diff --git a/example/lapack_to_morse/CMakeLists.txt b/example/lapack_to_morse/CMakeLists.txt index b425025325816d6fa5512103a97abbd26a428d42..a013541936af70bda94cdbd47c1f3eba4ab7b279 100644 --- a/example/lapack_to_morse/CMakeLists.txt +++ b/example/lapack_to_morse/CMakeLists.txt @@ -45,7 +45,7 @@ list(APPEND libs_for_ltm # multithreaded BLAS and LAPACK libraries for this step unset(libs_for_step0) list(APPEND libs_for_step0 - ${libs_for_ltm} + ${LAPACKE_LIBRARIES} ${CBLAS_LIBRARIES} ) diff --git a/example/lapack_to_morse/step0.c b/example/lapack_to_morse/step0.c index 0ae46a070a70d62fa6540d9257c26bc18ea2f4ad..ecf7d076fe9f7b368cf135286a6ce74f00e0828f 100644 --- a/example/lapack_to_morse/step0.c +++ b/example/lapack_to_morse/step0.c @@ -17,7 +17,6 @@ * */ #include "step0.h" -#include <coreblas.h> /* * @brief step0 is a simple Cholesky example using the C interface of diff --git a/example/lapack_to_morse/step0.h b/example/lapack_to_morse/step0.h index 0f3f87672b85532ae2a6c03f9d23d5b8a6cea518..45eeff188a2f9b0887db627cf0e7efd7e28c6a32 100644 --- a/example/lapack_to_morse/step0.h +++ b/example/lapack_to_morse/step0.h @@ -120,4 +120,123 @@ static void print_header(char *prog_name, int * iparam) { return; } +#define Rnd64_A 6364136223846793005ULL +#define Rnd64_C 1ULL +#define RndF_Mul 5.4210108624275222e-20f +#define RndD_Mul 5.4210108624275222e-20 +#define NBELEM 1 + +static unsigned long long int +Rnd64_jump(unsigned long long int n, unsigned long long int seed ) { + unsigned long long int a_k, c_k, ran; + int i; + + a_k = Rnd64_A; + c_k = Rnd64_C; + + ran = seed; + for (i = 0; n; n >>= 1, i++) { + if (n & 1) + ran = a_k * ran + c_k; + c_k *= (a_k + 1); + a_k *= a_k; + } + + return ran; +} + +/** + * CORE_dplgsy - Generate a tile for random symmetric (positive definite if 'bump' is large enough) matrix. + */ +static void CORE_dplgsy( double bump, int m, int n, double *A, int lda, + int bigM, int m0, int n0, unsigned long long int seed ) +{ + double *tmp = A; + int64_t i, j; + unsigned long long int ran, jump; + + jump = (unsigned long long int)m0 + (unsigned long long int)n0 * (unsigned long long int)bigM; + + /* + * Tile diagonal + */ + if ( m0 == n0 ) { + for (j = 0; j < n; j++) { + ran = Rnd64_jump( NBELEM * jump, seed ); + + for (i = j; i < m; i++) { + *tmp = 0.5f - ran * RndF_Mul; + ran = Rnd64_A * ran + Rnd64_C; + tmp++; + } + tmp += (lda - i + j + 1); + jump += bigM + 1; + } + + for (j = 0; j < n; j++) { + A[j+j*lda] += bump; + + for (i=0; i<j; i++) { + A[lda*j+i] = A[lda*i+j]; + } + } + } + /* + * Lower part + */ + else if ( m0 > n0 ) { + for (j = 0; j < n; j++) { + ran = Rnd64_jump( NBELEM * jump, seed ); + + for (i = 0; i < m; i++) { + *tmp = 0.5f - ran * RndF_Mul; + ran = Rnd64_A * ran + Rnd64_C; + tmp++; + } + tmp += (lda - i); + jump += bigM; + } + } + /* + * Upper part + */ + else if ( m0 < n0 ) { + /* Overwrite jump */ + jump = (unsigned long long int)n0 + (unsigned long long int)m0 * (unsigned long long int)bigM; + + for (i = 0; i < m; i++) { + ran = Rnd64_jump( NBELEM * jump, seed ); + + for (j = 0; j < n; j++) { + A[j*lda+i] = 0.5f - ran * RndF_Mul; + } + jump += bigM; + } + } +} + +/** + * CORE_dplrnt - Generate a tile for random matrix. + */ +static void CORE_dplrnt( int m, int n, double *A, int lda, + int bigM, int m0, int n0, unsigned long long int seed ) +{ + double *tmp = A; + int64_t i, j; + unsigned long long int ran, jump; + + jump = (unsigned long long int)m0 + (unsigned long long int)n0 * (unsigned long long int)bigM; + + for (j=0; j<n; ++j ) { + ran = Rnd64_jump( NBELEM*jump, seed ); + for (i = 0; i < m; ++i) { + *tmp = 0.5f - ran * RndF_Mul; + ran = Rnd64_A * ran + Rnd64_C; + tmp++; + } + tmp += lda-i; + jump += bigM; + } +} + #endif /* STEP0_H */