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