Exemplo n.º 1
0
/* ////////////////////////////////////////////////////////////////////////////
   -- testing csr matrix add
*/
int main(  int argc, char** argv )
{
    TESTING_INIT();
    
    magma_queue_t queue;
    magma_queue_create( /*devices[ opts->device ],*/ &queue );

    real_Double_t res;
    magma_z_sparse_matrix A, B, B2, C, A_d, B_d, C_d;

    magmaDoubleComplex one = MAGMA_Z_MAKE(1.0, 0.0);
    magmaDoubleComplex zero = MAGMA_Z_MAKE(0.0, 0.0);
    magmaDoubleComplex mone = MAGMA_Z_MAKE(-1.0, 0.0);

    magma_int_t i=1;

    if ( strcmp("LAPLACE2D", argv[i]) == 0 && i+1 < argc ) {   // Laplace test
        i++;
        magma_int_t laplace_size = atoi( argv[i] );
        magma_zm_5stencil(  laplace_size, &A, queue );
    } else {                        // file-matrix test
        magma_z_csr_mtx( &A,  argv[i], queue );
    }
    printf( "# matrix info: %d-by-%d with %d nonzeros\n",
                        (int) A.num_rows,(int) A.num_cols,(int) A.nnz );
    i++;

    if ( strcmp("LAPLACE2D", argv[i]) == 0 && i+1 < argc ) {   // Laplace test
        i++;
        magma_int_t laplace_size = atoi( argv[i] );
        magma_zm_5stencil(  laplace_size, &B, queue );
    } else {                        // file-matrix test
        magma_z_csr_mtx( &B,  argv[i], queue );
    }
    printf( "# matrix info: %d-by-%d with %d nonzeros\n",
                        (int) B.num_rows,(int) B.num_cols,(int) B.nnz );


    magma_z_mtransfer( A, &A_d, Magma_CPU, Magma_DEV, queue );
    magma_z_mtransfer( B, &B_d, Magma_CPU, Magma_DEV, queue );

    magma_zcuspaxpy( &one, A_d, &one, B_d, &C_d, queue );

    magma_z_mfree(&B_d, queue );

    magma_zcuspaxpy( &mone, A_d, &one, C_d, &B_d, queue );
    
    magma_z_mtransfer( B_d, &B2, Magma_DEV, Magma_CPU, queue );

    magma_z_mfree(&A_d, queue );
    magma_z_mfree(&B_d, queue );
    magma_z_mfree(&C_d, queue );

    // check difference
    magma_zmdiff( B, B2, &res, queue );
    printf("# ||A-B||_F = %8.2e\n", res);
    if ( res < .000001 )
        printf("# tester matrix add:  ok\n");
    else
        printf("# tester matrix add:  failed\n");

    magma_z_mfree(&A, queue ); 
    magma_z_mfree(&B, queue ); 
    magma_z_mfree(&B2, queue ); 

    magma_queue_destroy( queue );
    TESTING_FINALIZE();
    return 0;
}
Exemplo n.º 2
0
/* ////////////////////////////////////////////////////////////////////////////
   -- testing csr matrix add
*/
int main(  int argc, char** argv )
{
    magma_int_t info = 0;
    TESTING_INIT();
    
    magma_queue_t queue=NULL;
    magma_queue_create( &queue );

    real_Double_t res;
    magma_z_matrix A={Magma_CSR}, B={Magma_CSR}, B2={Magma_CSR}, 
    A_d={Magma_CSR}, B_d={Magma_CSR}, C_d={Magma_CSR};

    magmaDoubleComplex one = MAGMA_Z_MAKE(1.0, 0.0);
    magmaDoubleComplex mone = MAGMA_Z_MAKE(-1.0, 0.0);

    magma_int_t i=1;

    if ( strcmp("LAPLACE2D", argv[i]) == 0 && i+1 < argc ) {   // Laplace test
        i++;
        magma_int_t laplace_size = atoi( argv[i] );
        CHECK( magma_zm_5stencil(  laplace_size, &A, queue ));
    } else {                        // file-matrix test
        CHECK( magma_z_csr_mtx( &A,  argv[i], queue ));
    }
    printf("%% matrix info: %d-by-%d with %d nonzeros\n",
                        int(A.num_rows), int(A.num_cols), int(A.nnz) );
    i++;

    if ( strcmp("LAPLACE2D", argv[i]) == 0 && i+1 < argc ) {   // Laplace test
        i++;
        magma_int_t laplace_size = atoi( argv[i] );
        CHECK( magma_zm_5stencil(  laplace_size, &B, queue ));
    } else {                        // file-matrix test
        CHECK( magma_z_csr_mtx( &B,  argv[i], queue ));
    }
    printf("%% matrix info: %d-by-%d with %d nonzeros\n",
                        int(B.num_rows), int(B.num_cols), int(B.nnz) );


    CHECK( magma_zmtransfer( A, &A_d, Magma_CPU, Magma_DEV, queue ));
    CHECK( magma_zmtransfer( B, &B_d, Magma_CPU, Magma_DEV, queue ));

    CHECK( magma_zcuspaxpy( &one, A_d, &one, B_d, &C_d, queue ));

    magma_zmfree(&B_d, queue );

    CHECK( magma_zcuspaxpy( &mone, A_d, &one, C_d, &B_d, queue ));
    
    CHECK( magma_zmtransfer( B_d, &B2, Magma_DEV, Magma_CPU, queue ));

    magma_zmfree(&A_d, queue );
    magma_zmfree(&B_d, queue );
    magma_zmfree(&C_d, queue );

    // check difference
    CHECK( magma_zmdiff( B, B2, &res, queue ));
    printf("%% ||A-B||_F = %8.2e\n", res);
    if ( res < .000001 )
        printf("%% tester matrix add:  ok\n");
    else
        printf("%% tester matrix add:  failed\n");

    magma_zmfree(&A, queue );
    magma_zmfree(&B, queue );
    magma_zmfree(&B2, queue );

cleanup:
    magma_zmfree(&A_d, queue );
    magma_zmfree(&B_d, queue );
    magma_zmfree(&C_d, queue );
    magma_zmfree(&A, queue );
    magma_zmfree(&B, queue );
    magma_zmfree(&B2, queue );
    magma_queue_destroy( queue );
    TESTING_FINALIZE();
    return info;
}