UnaryTestsF16.cpp 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770
  1. #include "UnaryTestsF16.h"
  2. #include <stdio.h>
  3. #include "Error.h"
  4. #define SNR_THRESHOLD 57
  5. /*
  6. Reference patterns are generated with
  7. a double precision computation.
  8. */
  9. #define REL_ERROR (1.1e-3)
  10. #define ABS_ERROR (1.1e-3)
  11. /*
  12. Comparisons for QR
  13. */
  14. #define SNR_QR_THRESHOLD 20
  15. #define REL_QR_ERROR (3.0e-2)
  16. #define ABS_QR_ERROR (3.0e-2)
  17. /*
  18. Comparisons for inverse
  19. */
  20. /* Not very accurate for big matrix.
  21. But big matrix needed for checking the vectorized code */
  22. #define SNR_THRESHOLD_INV 52
  23. #define REL_ERROR_INV (3.0e-3)
  24. #define ABS_ERROR_INV (2.0e-2)
  25. #define REL_ERROR_SOLVE (6.0e-2)
  26. #define ABS_ERROR_SOLVE (2.0e-2)
  27. /*
  28. Comparison for Cholesky
  29. */
  30. #define SNR_THRESHOLD_CHOL 45
  31. #define REL_ERROR_CHOL (3.0e-3)
  32. #define ABS_ERROR_CHOL (3.0e-2)
  33. /* Upper bound of maximum matrix dimension used by Python */
  34. #define MAXMATRIXDIM 40
  35. #define LOADDATA2() \
  36. const float16_t *inp1=input1.ptr(); \
  37. const float16_t *inp2=input2.ptr(); \
  38. \
  39. float16_t *ap=a.ptr(); \
  40. float16_t *bp=b.ptr(); \
  41. \
  42. float16_t *outp=output.ptr(); \
  43. int16_t *dimsp = dims.ptr(); \
  44. int nbMatrixes = dims.nbSamples() >> 1;\
  45. int rows,columns; \
  46. int i;
  47. #define LOADDATA1() \
  48. const float16_t *inp1=input1.ptr(); \
  49. \
  50. float16_t *ap=a.ptr(); \
  51. \
  52. float16_t *outp=output.ptr(); \
  53. int16_t *dimsp = dims.ptr(); \
  54. int nbMatrixes = dims.nbSamples() >> 1;\
  55. int rows,columns; \
  56. int i;
  57. #define PREPAREDATA2() \
  58. in1.numRows=rows; \
  59. in1.numCols=columns; \
  60. memcpy((void*)ap,(const void*)inp1,sizeof(float16_t)*rows*columns);\
  61. in1.pData = ap; \
  62. \
  63. in2.numRows=rows; \
  64. in2.numCols=columns; \
  65. memcpy((void*)bp,(const void*)inp2,sizeof(float16_t)*rows*columns);\
  66. in2.pData = bp; \
  67. \
  68. out.numRows=rows; \
  69. out.numCols=columns; \
  70. out.pData = outp;
  71. #define PREPAREDATALT() \
  72. in1.numRows=rows; \
  73. in1.numCols=rows; \
  74. memcpy((void*)ap,(const void*)inp1,sizeof(float16_t)*rows*rows); \
  75. in1.pData = ap; \
  76. \
  77. in2.numRows=rows; \
  78. in2.numCols=columns; \
  79. memcpy((void*)bp,(const void*)inp2,sizeof(float16_t)*rows*columns);\
  80. in2.pData = bp; \
  81. \
  82. out.numRows=rows; \
  83. out.numCols=columns; \
  84. out.pData = outp;
  85. #define PREPAREDATA1(TRANSPOSED) \
  86. in1.numRows=rows; \
  87. in1.numCols=columns; \
  88. memcpy((void*)ap,(const void*)inp1,sizeof(float16_t)*rows*columns);\
  89. in1.pData = ap; \
  90. \
  91. if (TRANSPOSED) \
  92. { \
  93. out.numRows=columns; \
  94. out.numCols=rows; \
  95. } \
  96. else \
  97. { \
  98. out.numRows=rows; \
  99. out.numCols=columns; \
  100. } \
  101. out.pData = outp;
  102. #define PREPAREDATA1C(TRANSPOSED) \
  103. in1.numRows=rows; \
  104. in1.numCols=columns; \
  105. memcpy((void*)ap,(const void*)inp1,2*sizeof(float16_t)*rows*columns);\
  106. in1.pData = ap; \
  107. \
  108. if (TRANSPOSED) \
  109. { \
  110. out.numRows=columns; \
  111. out.numCols=rows; \
  112. } \
  113. else \
  114. { \
  115. out.numRows=rows; \
  116. out.numCols=columns; \
  117. } \
  118. out.pData = outp;
  119. #define LOADVECDATA2() \
  120. const float16_t *inp1=input1.ptr(); \
  121. const float16_t *inp2=input2.ptr(); \
  122. \
  123. float16_t *ap=a.ptr(); \
  124. float16_t *bp=b.ptr(); \
  125. \
  126. float16_t *outp=output.ptr(); \
  127. int16_t *dimsp = dims.ptr(); \
  128. int nbMatrixes = dims.nbSamples() / 2;\
  129. int rows,internal; \
  130. int i;
  131. #define PREPAREVECDATA2() \
  132. in1.numRows=rows; \
  133. in1.numCols=internal; \
  134. memcpy((void*)ap,(const void*)inp1,sizeof(float16_t)*rows*internal);\
  135. in1.pData = ap; \
  136. \
  137. memcpy((void*)bp,(const void*)inp2,sizeof(float16_t)*internal);
  138. static void checkInnerTailOverflow(float16_t *b)
  139. {
  140. ASSERT_TRUE(b[0] == 0);
  141. ASSERT_TRUE(b[1] == 0);
  142. ASSERT_TRUE(b[2] == 0);
  143. ASSERT_TRUE(b[3] == 0);
  144. ASSERT_TRUE(b[4] == 0);
  145. ASSERT_TRUE(b[5] == 0);
  146. ASSERT_TRUE(b[6] == 0);
  147. ASSERT_TRUE(b[7] == 0);
  148. }
  149. void UnaryTestsF16::test_householder_f16()
  150. {
  151. int16_t vecDim;
  152. const int16_t *dimsp = dims.ptr();
  153. const int nbVectors = dims.nbSamples();
  154. const float16_t *inp1=input1.ptr();
  155. float16_t *outp=output.ptr();
  156. float16_t *outBetap=outputBeta.ptr();
  157. for(int i=0; i < nbVectors ; i++)
  158. {
  159. vecDim = *dimsp++;
  160. float16_t beta = arm_householder_f16(inp1,DEFAULT_HOUSEHOLDER_THRESHOLD_F16,vecDim,outp);
  161. *outBetap = beta;
  162. outp += vecDim;
  163. inp1 += vecDim;
  164. outBetap++;
  165. checkInnerTailOverflow(outp);
  166. checkInnerTailOverflow(outBetap);
  167. }
  168. ASSERT_EMPTY_TAIL(output);
  169. ASSERT_EMPTY_TAIL(outputBeta);
  170. ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
  171. ASSERT_SNR(outputBeta,refBeta,(float16_t)SNR_THRESHOLD);
  172. ASSERT_CLOSE_ERROR(output,ref,ABS_ERROR,REL_ERROR);
  173. ASSERT_CLOSE_ERROR(outputBeta,refBeta,ABS_ERROR,REL_ERROR);
  174. }
  175. void UnaryTestsF16::test_mat_qr_f16()
  176. {
  177. int16_t rows, columns, rank;
  178. const int16_t *dimsp = dims.ptr();
  179. const int nbMatrixes = dims.nbSamples() / 3;
  180. const float16_t *inp1=input1.ptr();
  181. float16_t *outTaup=outputTau.ptr();
  182. float16_t *outRp=outputR.ptr();
  183. float16_t *outQp=outputQ.ptr();
  184. float16_t *pTmpA=a.ptr();
  185. float16_t *pTmpB=b.ptr();
  186. (void) outTaup;
  187. (void) outRp;
  188. for(int i=0; i < nbMatrixes ; i++)
  189. {
  190. rows = *dimsp++;
  191. columns = *dimsp++;
  192. rank = *dimsp++;
  193. (void)rank;
  194. in1.numRows=rows;
  195. in1.numCols=columns;
  196. in1.pData = (float16_t*)inp1;
  197. outR.numRows = rows;
  198. outR.numCols = columns;
  199. outR.pData = (float16_t*)outRp;
  200. outQ.numRows = rows;
  201. outQ.numCols = rows;
  202. outQ.pData = (float16_t*)outQp;
  203. arm_status status=arm_mat_qr_f16(&in1,DEFAULT_HOUSEHOLDER_THRESHOLD_F16,&outR,&outQ,outTaup,pTmpA,pTmpB);
  204. ASSERT_TRUE(status==ARM_MATH_SUCCESS);
  205. inp1 += rows * columns;
  206. outRp += rows * columns;
  207. outQp += rows * rows;
  208. outTaup += columns;
  209. checkInnerTailOverflow(outRp);
  210. checkInnerTailOverflow(outQp);
  211. checkInnerTailOverflow(outTaup);
  212. }
  213. ASSERT_EMPTY_TAIL(outputR);
  214. ASSERT_EMPTY_TAIL(outputQ);
  215. ASSERT_EMPTY_TAIL(outputTau);
  216. //ASSERT_SNR(refQ,outputQ,(float16_t)SNR_QR_THRESHOLD);
  217. //ASSERT_SNR(refR,outputR,(float16_t)SNR_QR_THRESHOLD);
  218. //ASSERT_SNR(refTau,outputTau,(float16_t)SNR_QR_THRESHOLD);
  219. ASSERT_CLOSE_ERROR(refQ,outputQ,ABS_QR_ERROR,REL_QR_ERROR);
  220. ASSERT_CLOSE_ERROR(refR,outputR,ABS_QR_ERROR,REL_QR_ERROR);
  221. ASSERT_CLOSE_ERROR(refTau,outputTau,ABS_QR_ERROR,REL_QR_ERROR);
  222. }
  223. void UnaryTestsF16::test_mat_vec_mult_f16()
  224. {
  225. LOADVECDATA2();
  226. for(i=0;i < nbMatrixes ; i ++)
  227. {
  228. rows = *dimsp++;
  229. internal = *dimsp++;
  230. PREPAREVECDATA2();
  231. arm_mat_vec_mult_f16(&this->in1, bp, outp);
  232. outp += rows ;
  233. }
  234. ASSERT_EMPTY_TAIL(output);
  235. ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
  236. ASSERT_CLOSE_ERROR(output,ref,ABS_ERROR,REL_ERROR);
  237. }
  238. void UnaryTestsF16::test_mat_add_f16()
  239. {
  240. LOADDATA2();
  241. arm_status status;
  242. for(i=0;i < nbMatrixes ; i ++)
  243. {
  244. rows = *dimsp++;
  245. columns = *dimsp++;
  246. PREPAREDATA2();
  247. status=arm_mat_add_f16(&this->in1,&this->in2,&this->out);
  248. ASSERT_TRUE(status==ARM_MATH_SUCCESS);
  249. outp += (rows * columns);
  250. }
  251. ASSERT_EMPTY_TAIL(output);
  252. ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
  253. ASSERT_CLOSE_ERROR(output,ref,ABS_ERROR,REL_ERROR);
  254. }
  255. void UnaryTestsF16::test_mat_sub_f16()
  256. {
  257. LOADDATA2();
  258. arm_status status;
  259. for(i=0;i < nbMatrixes ; i ++)
  260. {
  261. rows = *dimsp++;
  262. columns = *dimsp++;
  263. PREPAREDATA2();
  264. status=arm_mat_sub_f16(&this->in1,&this->in2,&this->out);
  265. ASSERT_TRUE(status==ARM_MATH_SUCCESS);
  266. outp += (rows * columns);
  267. }
  268. ASSERT_EMPTY_TAIL(output);
  269. ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
  270. ASSERT_CLOSE_ERROR(output,ref,ABS_ERROR,REL_ERROR);
  271. }
  272. void UnaryTestsF16::test_mat_scale_f16()
  273. {
  274. LOADDATA1();
  275. arm_status status;
  276. for(i=0;i < nbMatrixes ; i ++)
  277. {
  278. rows = *dimsp++;
  279. columns = *dimsp++;
  280. PREPAREDATA1(false);
  281. status=arm_mat_scale_f16(&this->in1,0.5f,&this->out);
  282. ASSERT_TRUE(status==ARM_MATH_SUCCESS);
  283. outp += (rows * columns);
  284. }
  285. ASSERT_EMPTY_TAIL(output);
  286. ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
  287. ASSERT_CLOSE_ERROR(output,ref,ABS_ERROR,REL_ERROR);
  288. }
  289. void UnaryTestsF16::test_mat_trans_f16()
  290. {
  291. LOADDATA1();
  292. arm_status status;
  293. for(i=0;i < nbMatrixes ; i ++)
  294. {
  295. rows = *dimsp++;
  296. columns = *dimsp++;
  297. PREPAREDATA1(true);
  298. status=arm_mat_trans_f16(&this->in1,&this->out);
  299. ASSERT_TRUE(status==ARM_MATH_SUCCESS);
  300. outp += (rows * columns);
  301. }
  302. ASSERT_EMPTY_TAIL(output);
  303. ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
  304. ASSERT_CLOSE_ERROR(output,ref,ABS_ERROR,REL_ERROR);
  305. }
  306. void UnaryTestsF16::test_mat_cmplx_trans_f16()
  307. {
  308. LOADDATA1();
  309. arm_status status;
  310. for(i=0;i < nbMatrixes ; i ++)
  311. {
  312. rows = *dimsp++;
  313. columns = *dimsp++;
  314. PREPAREDATA1C(true);
  315. status=arm_mat_cmplx_trans_f16(&this->in1,&this->out);
  316. ASSERT_TRUE(status==ARM_MATH_SUCCESS);
  317. outp += 2*(rows * columns);
  318. }
  319. ASSERT_EMPTY_TAIL(output);
  320. ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
  321. ASSERT_CLOSE_ERROR(output,ref,ABS_ERROR,REL_ERROR);
  322. }
  323. static void refInnerTail(float16_t *b)
  324. {
  325. b[0] = 1.0f;
  326. b[1] = -2.0f;
  327. b[2] = 3.0f;
  328. b[3] = -4.0f;
  329. }
  330. static void checkInnerTail(float16_t *b)
  331. {
  332. ASSERT_TRUE(b[0] == 1.0f);
  333. ASSERT_TRUE(b[1] == -2.0f);
  334. ASSERT_TRUE(b[2] == 3.0f);
  335. ASSERT_TRUE(b[3] == -4.0f);
  336. }
  337. void UnaryTestsF16::test_mat_inverse_f16()
  338. {
  339. const float16_t *inp1=input1.ptr();
  340. float16_t *ap=a.ptr();
  341. float16_t *outp=output.ptr();
  342. int16_t *dimsp = dims.ptr();
  343. int nbMatrixes = dims.nbSamples();
  344. int rows,columns;
  345. int i;
  346. arm_status status;
  347. for(i=0;i < nbMatrixes ; i ++)
  348. {
  349. rows = *dimsp++;
  350. columns = rows;
  351. PREPAREDATA1(false);
  352. refInnerTail(outp+(rows * columns));
  353. status=arm_mat_inverse_f16(&this->in1,&this->out);
  354. ASSERT_TRUE(status==ARM_MATH_SUCCESS);
  355. outp += (rows * columns);
  356. inp1 += (rows * columns);
  357. checkInnerTail(outp);
  358. }
  359. ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD_INV);
  360. ASSERT_CLOSE_ERROR(output,ref,ABS_ERROR_INV,REL_ERROR_INV);
  361. }
  362. void UnaryTestsF16::test_mat_cholesky_dpo_f16()
  363. {
  364. float16_t *ap=a.ptr();
  365. const float16_t *inp1=input1.ptr();
  366. float16_t *outp=output.ptr();
  367. int16_t *dimsp = dims.ptr();
  368. int nbMatrixes = dims.nbSamples();
  369. int rows,columns;
  370. int i;
  371. arm_status status;
  372. for(i=0;i < nbMatrixes ; i ++)
  373. {
  374. rows = *dimsp++;
  375. columns = rows;
  376. PREPAREDATA1(false);
  377. status=arm_mat_cholesky_f16(&this->in1,&this->out);
  378. ASSERT_TRUE(status==ARM_MATH_SUCCESS);
  379. outp += (rows * columns);
  380. inp1 += (rows * columns);
  381. }
  382. ASSERT_EMPTY_TAIL(output);
  383. ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD_CHOL);
  384. ASSERT_CLOSE_ERROR(ref,output,ABS_ERROR_CHOL,REL_ERROR_CHOL);
  385. }
  386. void UnaryTestsF16::test_solve_upper_triangular_f16()
  387. {
  388. float16_t *ap=a.ptr();
  389. const float16_t *inp1=input1.ptr();
  390. float16_t *bp=b.ptr();
  391. const float16_t *inp2=input2.ptr();
  392. float16_t *outp=output.ptr();
  393. int16_t *dimsp = dims.ptr();
  394. int nbMatrixes = dims.nbSamples() >> 1;
  395. int rows,columns;
  396. int i;
  397. arm_status status;
  398. for(i=0;i < nbMatrixes ; i ++)
  399. {
  400. rows = *dimsp++;
  401. columns = *dimsp++;
  402. PREPAREDATALT();
  403. status=arm_mat_solve_upper_triangular_f16(&this->in1,&this->in2,&this->out);
  404. ASSERT_TRUE(status==ARM_MATH_SUCCESS);
  405. outp += (rows * columns);
  406. inp1 += (rows * rows);
  407. inp2 += (rows * columns);
  408. }
  409. ASSERT_EMPTY_TAIL(output);
  410. ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
  411. ASSERT_CLOSE_ERROR(ref,output,ABS_ERROR_SOLVE,REL_ERROR_SOLVE);
  412. }
  413. void UnaryTestsF16::test_solve_lower_triangular_f16()
  414. {
  415. float16_t *ap=a.ptr();
  416. const float16_t *inp1=input1.ptr();
  417. float16_t *bp=b.ptr();
  418. const float16_t *inp2=input2.ptr();
  419. float16_t *outp=output.ptr();
  420. int16_t *dimsp = dims.ptr();
  421. int nbMatrixes = dims.nbSamples()>>1;
  422. int rows,columns;
  423. int i;
  424. arm_status status;
  425. for(i=0;i < nbMatrixes ; i ++)
  426. {
  427. rows = *dimsp++;
  428. columns = *dimsp++;
  429. PREPAREDATALT();
  430. status=arm_mat_solve_lower_triangular_f16(&this->in1,&this->in2,&this->out);
  431. ASSERT_TRUE(status==ARM_MATH_SUCCESS);
  432. outp += (rows * columns);
  433. inp1 += (rows * rows);
  434. inp2 += (rows * columns);
  435. }
  436. ASSERT_EMPTY_TAIL(output);
  437. ASSERT_SNR(output,ref,(float16_t)SNR_THRESHOLD);
  438. ASSERT_CLOSE_ERROR(ref,output,ABS_ERROR_SOLVE,REL_ERROR_SOLVE);
  439. }
  440. void UnaryTestsF16::setUp(Testing::testID_t id,std::vector<Testing::param_t>& params,Client::PatternMgr *mgr)
  441. {
  442. (void)params;
  443. switch(id)
  444. {
  445. case TEST_MAT_ADD_F16_1:
  446. input1.reload(UnaryTestsF16::INPUTS1_F16_ID,mgr);
  447. input2.reload(UnaryTestsF16::INPUTS2_F16_ID,mgr);
  448. dims.reload(UnaryTestsF16::DIMSUNARY1_S16_ID,mgr);
  449. ref.reload(UnaryTestsF16::REFADD1_F16_ID,mgr);
  450. output.create(ref.nbSamples(),UnaryTestsF16::OUT_F16_ID,mgr);
  451. a.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPA_F16_ID,mgr);
  452. b.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPB_F16_ID,mgr);
  453. break;
  454. case TEST_MAT_SUB_F16_2:
  455. input1.reload(UnaryTestsF16::INPUTS1_F16_ID,mgr);
  456. input2.reload(UnaryTestsF16::INPUTS2_F16_ID,mgr);
  457. dims.reload(UnaryTestsF16::DIMSUNARY1_S16_ID,mgr);
  458. ref.reload(UnaryTestsF16::REFSUB1_F16_ID,mgr);
  459. output.create(ref.nbSamples(),UnaryTestsF16::OUT_F16_ID,mgr);
  460. a.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPA_F16_ID,mgr);
  461. b.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPB_F16_ID,mgr);
  462. break;
  463. case TEST_MAT_SCALE_F16_3:
  464. input1.reload(UnaryTestsF16::INPUTS1_F16_ID,mgr);
  465. dims.reload(UnaryTestsF16::DIMSUNARY1_S16_ID,mgr);
  466. ref.reload(UnaryTestsF16::REFSCALE1_F16_ID,mgr);
  467. output.create(ref.nbSamples(),UnaryTestsF16::OUT_F16_ID,mgr);
  468. a.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPA_F16_ID,mgr);
  469. break;
  470. case TEST_MAT_TRANS_F16_4:
  471. input1.reload(UnaryTestsF16::INPUTS1_F16_ID,mgr);
  472. dims.reload(UnaryTestsF16::DIMSUNARY1_S16_ID,mgr);
  473. ref.reload(UnaryTestsF16::REFTRANS1_F16_ID,mgr);
  474. output.create(ref.nbSamples(),UnaryTestsF16::OUT_F16_ID,mgr);
  475. a.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPA_F16_ID,mgr);
  476. break;
  477. case TEST_MAT_INVERSE_F16_5:
  478. input1.reload(UnaryTestsF16::INPUTSINV_F16_ID,mgr);
  479. dims.reload(UnaryTestsF16::DIMSINVERT1_S16_ID,mgr);
  480. ref.reload(UnaryTestsF16::REFINV1_F16_ID,mgr);
  481. output.create(ref.nbSamples(),UnaryTestsF16::OUT_F16_ID,mgr);
  482. a.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPA_F16_ID,mgr);
  483. break;
  484. case TEST_MAT_VEC_MULT_F16_6:
  485. input1.reload(UnaryTestsF16::INPUTS1_F16_ID,mgr);
  486. input2.reload(UnaryTestsF16::INPUTVEC1_F16_ID,mgr);
  487. dims.reload(UnaryTestsF16::DIMSUNARY1_S16_ID,mgr);
  488. ref.reload(UnaryTestsF16::REFVECMUL1_F16_ID,mgr);
  489. output.create(ref.nbSamples(),UnaryTestsF16::OUT_F16_ID,mgr);
  490. a.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPA_F16_ID,mgr);
  491. b.create(MAXMATRIXDIM,UnaryTestsF16::TMPB_F16_ID,mgr);
  492. break;
  493. case TEST_MAT_CMPLX_TRANS_F16_7:
  494. input1.reload(UnaryTestsF16::INPUTSC1_F16_ID,mgr);
  495. dims.reload(UnaryTestsF16::DIMSUNARY1_S16_ID,mgr);
  496. ref.reload(UnaryTestsF16::REFTRANSC1_F16_ID,mgr);
  497. output.create(ref.nbSamples(),UnaryTestsF16::OUT_F16_ID,mgr);
  498. a.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPA_F16_ID,mgr);
  499. break;
  500. case TEST_MAT_CHOLESKY_DPO_F16_8:
  501. input1.reload(UnaryTestsF16::INPUTSCHOLESKY1_DPO_F16_ID,mgr);
  502. dims.reload(UnaryTestsF16::DIMSCHOLESKY1_DPO_S16_ID,mgr);
  503. ref.reload(UnaryTestsF16::REFCHOLESKY1_DPO_F16_ID,mgr);
  504. output.create(ref.nbSamples(),UnaryTestsF16::OUT_F16_ID,mgr);
  505. a.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPA_F16_ID,mgr);
  506. break;
  507. case TEST_SOLVE_UPPER_TRIANGULAR_F16_9:
  508. input1.reload(UnaryTestsF16::INPUT_MAT_UTSOLVE_F16_ID,mgr);
  509. input2.reload(UnaryTestsF16::INPUT_VEC_LTSOLVE_F16_ID,mgr);
  510. dims.reload(UnaryTestsF16::DIM_LTSOLVE_F16_ID,mgr);
  511. ref.reload(UnaryTestsF16::REF_UT_SOLVE_F16_ID,mgr);
  512. output.create(ref.nbSamples(),UnaryTestsF16::OUT_F16_ID,mgr);
  513. a.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPA_F16_ID,mgr);
  514. b.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPB_F16_ID,mgr);
  515. break;
  516. case TEST_SOLVE_LOWER_TRIANGULAR_F16_10:
  517. input1.reload(UnaryTestsF16::INPUT_MAT_LTSOLVE_F16_ID,mgr);
  518. input2.reload(UnaryTestsF16::INPUT_VEC_LTSOLVE_F16_ID,mgr);
  519. dims.reload(UnaryTestsF16::DIM_LTSOLVE_F16_ID,mgr);
  520. ref.reload(UnaryTestsF16::REF_LT_SOLVE_F16_ID,mgr);
  521. output.create(ref.nbSamples(),UnaryTestsF16::OUT_F16_ID,mgr);
  522. a.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPA_F16_ID,mgr);
  523. b.create(MAXMATRIXDIM*MAXMATRIXDIM,UnaryTestsF16::TMPB_F16_ID,mgr);
  524. break;
  525. case TEST_HOUSEHOLDER_F16_11:
  526. input1.reload(UnaryTestsF16::INPUTS_HOUSEHOLDER_F16_ID,mgr);
  527. dims.reload(UnaryTestsF16::DIMS_HOUSEHOLDER_S16_ID,mgr);
  528. ref.reload(UnaryTestsF16::REF_HOUSEHOLDER_V_F16_ID,mgr);
  529. refBeta.reload(UnaryTestsF16::REF_HOUSEHOLDER_BETA_F16_ID,mgr);
  530. output.create(ref.nbSamples(),UnaryTestsF16::TMPA_F16_ID,mgr);
  531. outputBeta.create(refBeta.nbSamples(),UnaryTestsF16::TMPB_F16_ID,mgr);
  532. break;
  533. case TEST_MAT_QR_F16_12:
  534. input1.reload(UnaryTestsF16::INPUTS_QR_F16_ID,mgr);
  535. dims.reload(UnaryTestsF16::DIMS_QR_S16_ID,mgr);
  536. refTau.reload(UnaryTestsF16::REF_QR_TAU_F16_ID,mgr);
  537. refR.reload(UnaryTestsF16::REF_QR_R_F16_ID,mgr);
  538. refQ.reload(UnaryTestsF16::REF_QR_Q_F16_ID,mgr);
  539. outputTau.create(refTau.nbSamples(),UnaryTestsF16::TMPA_F16_ID,mgr);
  540. outputR.create(refR.nbSamples(),UnaryTestsF16::TMPB_F16_ID,mgr);
  541. outputQ.create(refQ.nbSamples(),UnaryTestsF16::TMPC_F16_ID,mgr);
  542. a.create(47,UnaryTestsF16::TMPC_F16_ID,mgr);
  543. b.create(47,UnaryTestsF16::TMPD_F16_ID,mgr);
  544. break;
  545. }
  546. }
  547. void UnaryTestsF16::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
  548. {
  549. (void)id;
  550. //output.dump(mgr);
  551. (void)mgr;
  552. }