add some code
This commit is contained in:
128
managed_components/78__esp-opus/dnn/test_vec.c
Normal file
128
managed_components/78__esp-opus/dnn/test_vec.c
Normal file
@@ -0,0 +1,128 @@
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
#include "opus_types.h"
|
||||
#include "arch.h"
|
||||
#include "common.h"
|
||||
#include "tansig_table.h"
|
||||
|
||||
#define LPCNET_TEST
|
||||
|
||||
// we need to call two versions of each functions that have the same
|
||||
// name, so use #defines to temp rename them
|
||||
|
||||
#define lpcnet_exp2 lpcnet_exp2_fast
|
||||
#define tansig_approx tansig_approx_fast
|
||||
#define sigmoid_approx sigmoid_approx_fast
|
||||
#define softmax softmax_fast
|
||||
#define vec_tanh vec_tanh_fast
|
||||
#define vec_sigmoid vec_sigmoid_fast
|
||||
#define sgemv_accum16 sgemv_accum16_fast
|
||||
#define sparse_sgemv_accum16 sparse_sgemv_accum16_fast
|
||||
|
||||
#ifdef __AVX__
|
||||
#include "vec_avx.h"
|
||||
#ifdef __AVX2__
|
||||
const char simd[]="AVX2";
|
||||
#else
|
||||
const char simd[]="AVX";
|
||||
#endif
|
||||
#elif __ARM_NEON__
|
||||
#include "vec_neon.h"
|
||||
const char simd[]="NEON";
|
||||
#else
|
||||
const char simd[]="none";
|
||||
|
||||
#endif
|
||||
|
||||
#undef lpcnet_exp2
|
||||
#undef tansig_approx
|
||||
#undef sigmoid_approx
|
||||
#undef softmax
|
||||
#undef vec_tanh
|
||||
#undef vec_sigmoid
|
||||
#undef sgemv_accum16
|
||||
#undef sparse_sgemv_accum16
|
||||
#include "vec.h"
|
||||
|
||||
#define ROW_STEP 16
|
||||
#define ROWS ROW_STEP*10
|
||||
#define COLS 2
|
||||
#define ENTRIES 2
|
||||
|
||||
int test_sgemv_accum16() {
|
||||
float weights[ROWS*COLS];
|
||||
float x[COLS];
|
||||
float out[ROWS], out_fast[ROWS];
|
||||
int i;
|
||||
|
||||
printf("sgemv_accum16.....................: ");
|
||||
for(i=0; i<ROWS*COLS; i++) {
|
||||
weights[i] = i;
|
||||
}
|
||||
for(i=0; i<ROWS; i++) {
|
||||
out[i] = 0;
|
||||
out_fast[i] = 0;
|
||||
}
|
||||
|
||||
for(i=0; i<COLS; i++) {
|
||||
x[i] = i+1;
|
||||
}
|
||||
|
||||
sgemv_accum16(out, weights, ROWS, COLS, 1, x);
|
||||
sgemv_accum16_fast(out_fast, weights, ROWS, COLS, 1, x);
|
||||
|
||||
for(i=0; i<ROWS; i++) {
|
||||
if (out[i] != out_fast[i]) {
|
||||
printf("fail\n");
|
||||
for(i=0; i<ROWS; i++) {
|
||||
printf("%d %f %f\n", i, out[i], out_fast[i]);
|
||||
if (out[i] != out_fast[i])
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
printf("pass\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int test_sparse_sgemv_accum16() {
|
||||
int rows = ROW_STEP*ENTRIES;
|
||||
int indx[] = {1,0,2,0,1};
|
||||
float w[ROW_STEP*(1+2)];
|
||||
float x[ENTRIES] = {1,2};
|
||||
float out[ROW_STEP*(1+2)], out_fast[ROW_STEP*(1+2)];
|
||||
int i;
|
||||
|
||||
printf("sparse_sgemv_accum16..............: ");
|
||||
for(i=0; i<ROW_STEP*(1+2); i++) {
|
||||
w[i] = i;
|
||||
out[i] = 0;
|
||||
out_fast[i] = 0;
|
||||
}
|
||||
|
||||
sparse_sgemv_accum16(out, w, rows, indx, x);
|
||||
sparse_sgemv_accum16_fast(out_fast, w, rows, indx, x);
|
||||
|
||||
for(i=0; i<ROW_STEP*ENTRIES; i++) {
|
||||
if (out[i] != out_fast[i]) {
|
||||
printf("fail\n");
|
||||
for(i=0; i<ROW_STEP*ENTRIES; i++) {
|
||||
printf("%d %f %f\n", i, out[i], out_fast[i]);
|
||||
if (out[i] != out_fast[i])
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
printf("pass\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main() {
|
||||
printf("testing vector routines on SIMD: %s\n", simd);
|
||||
int test1 = test_sgemv_accum16();
|
||||
int test2 = test_sparse_sgemv_accum16();
|
||||
return test1 || test2;
|
||||
}
|
||||
Reference in New Issue
Block a user