magma_int_t magma_dprint_vector( magma_d_matrix x, magma_int_t offset, magma_int_t visulen, magma_queue_t queue ) { magma_int_t info = 0; magma_d_matrix y={Magma_CSR}; //************************************************************** #define REAL double c_zero = MAGMA_D_ZERO; #ifdef COMPLEX #define magma_dprintval( tmp ) { \ if ( MAGMA_D_EQUAL( tmp, c_zero )) { \ printf( " 0. \n" ); \ } \ else { \ printf( " %8.4f+%8.4fi\n", \ MAGMA_D_REAL( tmp ), MAGMA_D_IMAG( tmp )); \ } \ } #else #define magma_dprintval( tmp ) { \ if ( MAGMA_D_EQUAL( tmp, c_zero )) { \ printf( " 0. \n" ); \ } \ else { \ printf( " %8.4f\n", MAGMA_D_REAL( tmp )); \ } \ } #endif //************************************************************** printf("visualize entries %d - %d of vector ", (int) offset, (int) (offset + visulen) ); fflush(stdout); if ( x.memory_location == Magma_CPU ) { printf("located on CPU:\n"); for( magma_int_t i=offset; i<offset + visulen; i++ ) magma_dprintval(x.val[i]); } else if ( x.memory_location == Magma_DEV ) { printf("located on DEV:\n"); CHECK( magma_dmtransfer( x, &y, Magma_DEV, Magma_CPU, queue )); for( magma_int_t i=offset; i<offset + visulen; i++ ) magma_dprintval(y.val[i]); } cleanup: magma_free_cpu(y.val); return info; }
magma_int_t magma_dprint_matrix( magma_d_matrix A, magma_queue_t queue ) { magma_int_t info = 0; //************************************************************** #define REAL #ifdef COMPLEX #define magma_dprintval( tmp ) { \ if ( MAGMA_D_EQUAL( tmp, c_zero )) { \ printf( " 0. " ); \ } \ else { \ printf( " %8.4f+%8.4fi", \ MAGMA_D_REAL( tmp ), MAGMA_D_IMAG( tmp )); \ } \ } #else #define magma_dprintval( tmp ) { \ if ( MAGMA_D_EQUAL( tmp, c_zero )) { \ printf( " 0. " ); \ } \ else { \ printf( " %8.4f", MAGMA_D_REAL( tmp )); \ } \ } #endif //************************************************************** magma_index_t i, j, k; double c_zero = MAGMA_D_ZERO; magma_d_matrix C={Magma_CSR}; if ( A.memory_location == Magma_CPU ) { printf("visualizing matrix of size %d x %d with %d nonzeros:\n", int(A.num_rows), int(A.num_cols), int(A.nnz)); if ( A.storage_type == Magma_DENSE ) { for( i=0; i < (A.num_rows); i++ ) { for( j=0; j < A.num_cols; j++ ) { magma_dprintval( A.val[i*(A.num_cols)+j] ); } printf( "\n" ); } } else if( A.num_cols < 8 || A.num_rows < 8 ) { CHECK( magma_dmconvert( A, &C, A.storage_type, Magma_DENSE, queue )); CHECK( magma_dprint_matrix( C, queue )); } else if ( A.storage_type == Magma_CSR ) { // visualize only small matrices like dense if ( A.num_rows < 11 && A.num_cols < 11 ) { CHECK( magma_dmconvert( A, &C, A.storage_type, Magma_DENSE, queue )); CHECK( magma_dprint_matrix( C, queue )); magma_dmfree( &C, queue ); } // otherwise visualize only coners else { // 4 beginning and 4 last elements of first four rows for( i=0; i < 4; i++ ) { // upper left corner for( j=0; j < 4; j++ ) { double tmp = MAGMA_D_ZERO; magma_index_t rbound = min( A.row[i]+4, A.row[i+1]); magma_index_t lbound = max( A.row[i], A.row[i]); for( k=lbound; k < rbound; k++ ) { if ( A.col[k] == j ) { tmp = A.val[k]; } } magma_dprintval( tmp ); } if ( i == 0 ) { printf( " . . . " ); } else { printf( " " ); } // upper right corner for( j=A.num_cols-4; j < A.num_cols; j++ ) { double tmp = MAGMA_D_ZERO; magma_index_t rbound = min( A.row[i+1], A.row[i+1]); magma_index_t lbound = max( A.row[i+1]-4, A.row[i]); for( k=lbound; k < rbound; k++ ) { if ( A.col[k] == j ) { tmp = A.val[k]; } } magma_dprintval( tmp ); } printf( "\n"); } printf( " . . . .\n" " . . . .\n" " . . . .\n" " . . . .\n" ); for( i=A.num_rows-4; i < A.num_rows; i++ ) { // lower left corner for( j=0; j < 4; j++ ) { double tmp = MAGMA_D_ZERO; magma_index_t rbound = min( A.row[i]+4, A.row[i+1]); magma_index_t lbound = max( A.row[i], A.row[i]); for( k=lbound; k < rbound; k++ ) { if ( A.col[k] == j ) { tmp = A.val[k]; } } magma_dprintval( tmp ); } printf( " "); // lower right corner for( j=A.num_cols-4; j < A.num_cols; j++ ) { double tmp = MAGMA_D_ZERO; magma_index_t rbound = min( A.row[i+1], A.row[i+1]); magma_index_t lbound = max( A.row[i+1]-4, A.row[i]); for( k=lbound; k < rbound; k++ ) { if ( A.col[k] == j ) { tmp = A.val[k]; } } magma_dprintval( tmp ); } printf( "\n"); } } } else { CHECK( magma_dmconvert( A, &C, A.storage_type, Magma_CSR, queue )); CHECK( magma_dprint_matrix( C, queue )); } } else { //magma_d_matrix C={Magma_CSR}; CHECK( magma_dmtransfer( A, &C, A.memory_location, Magma_CPU, queue )); CHECK( magma_dprint_matrix( C, queue )); } cleanup: magma_dmfree( &C, queue ); return info; }