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.5 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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. double norm;
  21. int i, j, info;
  22. srand(0);
  23. for (i = 0; i < DATASIZE*DATASIZE; i++) {
  24. m[i] = (rand()+0.0)/RAND_MAX * 10;
  25. tmp[i] = m[i];
  26. }
  27. info = LAPACKE_dgesvd( LAPACK_ROW_MAJOR, 'A', 'A', DATASIZE, DATASIZE, m, DATASIZE,
  28. s, u, DATASIZE, vt, DATASIZE, superb);
  29. for (i = 0; i < DATASIZE; i++) {
  30. for (j = 0; j < DATASIZE; j++) {
  31. u[i*DATASIZE+j] = u[i*DATASIZE+j]*s[j];
  32. }
  33. }
  34. cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans,
  35. DATASIZE, DATASIZE, DATASIZE, 1, u, DATASIZE, vt, DATASIZE, 0, X, DATASIZE);
  36. for (i = 0; i < DATASIZE*DATASIZE; i++) {
  37. X[i] = X[i] - tmp[i];
  38. }
  39. norm = cblas_dnrm2(DATASIZE*DATASIZE, X, 1);
  40. ASSERT_DBL_NEAR_TOL(0.0, norm, 1e-10);
  41. }