#include #include #include #include // ------------------------------------------------------------ // global variable indicating whether a CUDA GPU is available or not bool g_have_cuda = false; // ------------------------------------------------------------ void my_dpotrf( magma_uplo_t uplo, magma_int_t n, double* A, magma_int_t lda, magma_int_t* info ) { if ( g_have_cuda ) { printf( "magma_dpotrf\n" ); magma_dpotrf( uplo, n, A, lda, info ); } else { printf( "lapackf77_dpotrf\n" ); lapackf77_dpotrf( lapack_uplo_const(uplo), &n, A, &lda, info ); } } // ------------------------------------------------------------ int main( int argc, char** argv ) { // check for CUDA GPU int cnt; cudaError_t err = cudaGetDeviceCount( &cnt ); g_have_cuda = (err == 0 && cnt > 0); // magma_init, magma_finalize don't currently work without a CUDA GPU if ( g_have_cuda ) { printf( "init\n" ); magma_init(); } // factor simple A matrix int n, info, lda; double *A; n = 100; lda = n; A = (double*) malloc( lda*n*sizeof(double) ); for( int j=0; j < n; ++j ) { for( int i=0; i < n; ++i ) { A[i + j*lda] = rand() / double(RAND_MAX); } A[ j + j*lda ] += n; // diagonally dominant } my_dpotrf( MagmaUpper, n, A, n, &info ); printf( "info %d\n", info ); free( A ); if ( g_have_cuda ) { printf( "finalize\n" ); magma_finalize(); } printf( "done\n" ); return 0; }