You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_kernel_regress.c 1.6 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include "openblas_utest.h"
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <cblas.h>
  5. #define LAPACK_ROW_MAJOR 101
  6. blasint LAPACKE_dgesvd( blasint matrix_layout, char jobu, char jobvt,
  7. blasint m, blasint n, double* a,
  8. blasint lda, double* s, double* u, blasint ldu,
  9. double* vt, blasint ldvt, double* superb );
  10. #define DATASIZE 100
  11. double s[DATASIZE];
  12. double u[DATASIZE*DATASIZE];
  13. double vt[DATASIZE*DATASIZE];
  14. double X[DATASIZE*DATASIZE];
  15. double superb[DATASIZE];
  16. double tmp[DATASIZE*DATASIZE];
  17. double m[DATASIZE*DATASIZE];
  18. CTEST(kernel_regress,skx_avx)
  19. {
  20. #ifdef BUILD_DOUBLE
  21. double norm;
  22. int i, j, info;
  23. srand(0);
  24. for (i = 0; i < DATASIZE*DATASIZE; i++) {
  25. m[i] = (rand()+0.0)/RAND_MAX * 10;
  26. tmp[i] = m[i];
  27. }
  28. info = LAPACKE_dgesvd( LAPACK_ROW_MAJOR, 'A', 'A', DATASIZE, DATASIZE, m, DATASIZE,
  29. s, u, DATASIZE, vt, DATASIZE, superb);
  30. for (i = 0; i < DATASIZE; i++) {
  31. for (j = 0; j < DATASIZE; j++) {
  32. u[i*DATASIZE+j] = u[i*DATASIZE+j]*s[j];
  33. }
  34. }
  35. cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,
  36. DATASIZE, DATASIZE, DATASIZE, 1, u, DATASIZE, vt, DATASIZE, 0, X, DATASIZE);
  37. for (i = 0; i < DATASIZE*DATASIZE; i++) {
  38. X[i] = X[i] - tmp[i];
  39. }
  40. norm = cblas_dnrm2(DATASIZE*DATASIZE, X, 1);
  41. ASSERT_DBL_NEAR_TOL(0.0, norm, 1e-10);
  42. #endif
  43. }