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