StatsTestsF16.cpp 31 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130
  1. #include "StatsTestsF16.h"
  2. #include <stdio.h>
  3. #include "Error.h"
  4. #include "Test.h"
  5. #define SNR_THRESHOLD 48
  6. #define SNR_KULLBACK_THRESHOLD 40
  7. /*
  8. Reference patterns are generated with
  9. a double precision computation.
  10. */
  11. #define REL_ERROR (6.0e-3)
  12. #define REL_KULLBACK_ERROR (5.0e-3)
  13. #define ABS_KULLBACK_ERROR (5.0e-3)
  14. void StatsTestsF16::test_max_f16()
  15. {
  16. const float16_t *inp = inputA.ptr();
  17. float16_t result;
  18. uint32_t indexval;
  19. float16_t *refp = ref.ptr();
  20. int16_t *refind = maxIndexes.ptr();
  21. float16_t *outp = output.ptr();
  22. int16_t *ind = index.ptr();
  23. arm_max_f16(inp,
  24. inputA.nbSamples(),
  25. &result,
  26. &indexval);
  27. outp[0] = result;
  28. ind[0] = indexval;
  29. ASSERT_EQ(result,refp[this->refOffset]);
  30. ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
  31. }
  32. void StatsTestsF16::test_absmax_f16()
  33. {
  34. const float16_t *inp = inputA.ptr();
  35. float16_t result;
  36. uint32_t indexval;
  37. float16_t *refp = ref.ptr();
  38. int16_t *refind = maxIndexes.ptr();
  39. float16_t *outp = output.ptr();
  40. int16_t *ind = index.ptr();
  41. arm_absmax_f16(inp,
  42. inputA.nbSamples(),
  43. &result,
  44. &indexval);
  45. outp[0] = result;
  46. ind[0] = indexval;
  47. ASSERT_EQ(result,refp[this->refOffset]);
  48. ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
  49. }
  50. void StatsTestsF16::test_max_no_idx_f16()
  51. {
  52. const float16_t *inp = inputA.ptr();
  53. float16_t result;
  54. float16_t *refp = ref.ptr();
  55. float16_t *outp = output.ptr();
  56. arm_max_no_idx_f16(inp,
  57. inputA.nbSamples(),
  58. &result);
  59. outp[0] = result;
  60. ASSERT_EQ(result,refp[this->refOffset]);
  61. }
  62. void StatsTestsF16::test_absmax_no_idx_f16()
  63. {
  64. const float16_t *inp = inputA.ptr();
  65. float16_t result;
  66. float16_t *refp = ref.ptr();
  67. float16_t *outp = output.ptr();
  68. arm_absmax_no_idx_f16(inp,
  69. inputA.nbSamples(),
  70. &result);
  71. outp[0] = result;
  72. ASSERT_EQ(result,refp[this->refOffset]);
  73. }
  74. void StatsTestsF16::test_min_no_idx_f16()
  75. {
  76. const float16_t *inp = inputA.ptr();
  77. float16_t result;
  78. float16_t *refp = ref.ptr();
  79. float16_t *outp = output.ptr();
  80. arm_min_no_idx_f16(inp,
  81. inputA.nbSamples(),
  82. &result);
  83. outp[0] = result;
  84. ASSERT_EQ(result,refp[this->refOffset]);
  85. }
  86. void StatsTestsF16::test_absmin_no_idx_f16()
  87. {
  88. const float16_t *inp = inputA.ptr();
  89. float16_t result;
  90. float16_t *refp = ref.ptr();
  91. float16_t *outp = output.ptr();
  92. arm_absmin_no_idx_f16(inp,
  93. inputA.nbSamples(),
  94. &result);
  95. outp[0] = result;
  96. ASSERT_EQ(result,refp[this->refOffset]);
  97. }
  98. void StatsTestsF16::test_min_f16()
  99. {
  100. const float16_t *inp = inputA.ptr();
  101. float16_t result;
  102. uint32_t indexval;
  103. float16_t *refp = ref.ptr();
  104. int16_t *refind = minIndexes.ptr();
  105. float16_t *outp = output.ptr();
  106. int16_t *ind = index.ptr();
  107. arm_min_f16(inp,
  108. inputA.nbSamples(),
  109. &result,
  110. &indexval);
  111. outp[0] = result;
  112. ind[0] = indexval;
  113. ASSERT_EQ(result,refp[this->refOffset]);
  114. ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
  115. }
  116. void StatsTestsF16::test_absmin_f16()
  117. {
  118. const float16_t *inp = inputA.ptr();
  119. float16_t result;
  120. uint32_t indexval;
  121. float16_t *refp = ref.ptr();
  122. int16_t *refind = minIndexes.ptr();
  123. float16_t *outp = output.ptr();
  124. int16_t *ind = index.ptr();
  125. arm_absmin_f16(inp,
  126. inputA.nbSamples(),
  127. &result,
  128. &indexval);
  129. outp[0] = result;
  130. ind[0] = indexval;
  131. ASSERT_EQ(result,refp[this->refOffset]);
  132. ASSERT_EQ((int16_t)indexval,refind[this->refOffset]);
  133. }
  134. void StatsTestsF16::test_mean_f16()
  135. {
  136. const float16_t *inp = inputA.ptr();
  137. float16_t result;
  138. float16_t *refp = ref.ptr();
  139. float16_t *outp = output.ptr();
  140. arm_mean_f16(inp,
  141. inputA.nbSamples(),
  142. &result);
  143. outp[0] = result;
  144. ASSERT_SNR(result,refp[this->refOffset],(float16_t)SNR_THRESHOLD);
  145. ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
  146. }
  147. void StatsTestsF16::test_power_f16()
  148. {
  149. const float16_t *inp = inputA.ptr();
  150. float16_t result;
  151. float16_t *refp = ref.ptr();
  152. float16_t *outp = output.ptr();
  153. arm_power_f16(inp,
  154. inputA.nbSamples(),
  155. &result);
  156. outp[0] = result;
  157. ASSERT_SNR(result,refp[this->refOffset],(float16_t)SNR_THRESHOLD);
  158. ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
  159. }
  160. void StatsTestsF16::test_rms_f16()
  161. {
  162. const float16_t *inp = inputA.ptr();
  163. float16_t result;
  164. float16_t *refp = ref.ptr();
  165. float16_t *outp = output.ptr();
  166. arm_rms_f16(inp,
  167. inputA.nbSamples(),
  168. &result);
  169. outp[0] = result;
  170. ASSERT_SNR(result,refp[this->refOffset],(float16_t)SNR_THRESHOLD);
  171. ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
  172. }
  173. void StatsTestsF16::test_std_f16()
  174. {
  175. const float16_t *inp = inputA.ptr();
  176. float16_t result;
  177. float16_t *refp = ref.ptr();
  178. float16_t *outp = output.ptr();
  179. arm_std_f16(inp,
  180. inputA.nbSamples(),
  181. &result);
  182. outp[0] = result;
  183. ASSERT_SNR(result,refp[this->refOffset],(float16_t)SNR_THRESHOLD);
  184. ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
  185. }
  186. void StatsTestsF16::test_var_f16()
  187. {
  188. const float16_t *inp = inputA.ptr();
  189. float16_t result;
  190. float16_t *refp = ref.ptr();
  191. float16_t *outp = output.ptr();
  192. arm_var_f16(inp,
  193. inputA.nbSamples(),
  194. &result);
  195. outp[0] = result;
  196. ASSERT_SNR(result,refp[this->refOffset],(float16_t)SNR_THRESHOLD);
  197. ASSERT_REL_ERROR(result,refp[this->refOffset],REL_ERROR);
  198. }
  199. void StatsTestsF16::test_std_stability_f16()
  200. {
  201. /*
  202. With the textbook algorithm, those values will produce a negative
  203. value for the variance.
  204. The CMSIS-DSP variance algorithm is the two pass one so will work
  205. with those values.
  206. So, it should be possible to compute the square root for the standard
  207. deviation.
  208. */
  209. float16_t in[4]={4.0f, 7.0f, 13.0f, 16.0f};
  210. float16_t result;
  211. int i;
  212. /*
  213. Add bigger offset so that average is much bigger than standard deviation.
  214. */
  215. for(i=0 ; i < 4; i++)
  216. {
  217. in[i] += 3.0e3f;
  218. }
  219. arm_std_f16(in,4,&result);
  220. /*
  221. If variance is giving a negative value, the square root
  222. should return zero.
  223. We check it is not happening here.
  224. */
  225. ASSERT_TRUE(fabs(5.47723f - result) < 0.32f);
  226. }
  227. void StatsTestsF16::test_entropy_f16()
  228. {
  229. const float16_t *inp = inputA.ptr();
  230. const int16_t *dimsp = dims.ptr();
  231. float16_t *outp = output.ptr();
  232. for(int i=0;i < this->nbPatterns; i++)
  233. {
  234. *outp = arm_entropy_f16(inp,dimsp[i+1]);
  235. outp++;
  236. inp += dimsp[i+1];
  237. }
  238. ASSERT_SNR(ref,output,(float16_t)SNR_THRESHOLD);
  239. ASSERT_REL_ERROR(ref,output,REL_ERROR);
  240. }
  241. void StatsTestsF16::test_logsumexp_f16()
  242. {
  243. const float16_t *inp = inputA.ptr();
  244. const int16_t *dimsp = dims.ptr();
  245. float16_t *outp = output.ptr();
  246. for(int i=0;i < this->nbPatterns; i++)
  247. {
  248. *outp = arm_logsumexp_f16(inp,dimsp[i+1]);
  249. outp++;
  250. inp += dimsp[i+1];
  251. }
  252. ASSERT_SNR(ref,output,(float16_t)SNR_THRESHOLD);
  253. ASSERT_REL_ERROR(ref,output,REL_ERROR);
  254. }
  255. void StatsTestsF16::test_kullback_leibler_f16()
  256. {
  257. const float16_t *inpA = inputA.ptr();
  258. const float16_t *inpB = inputB.ptr();
  259. const int16_t *dimsp = dims.ptr();
  260. float16_t *outp = output.ptr();
  261. for(int i=0;i < this->nbPatterns; i++)
  262. {
  263. *outp = arm_kullback_leibler_f16(inpA,inpB,dimsp[i+1]);
  264. outp++;
  265. inpA += dimsp[i+1];
  266. inpB += dimsp[i+1];
  267. }
  268. ASSERT_SNR(ref,output,(float16_t)SNR_KULLBACK_THRESHOLD);
  269. ASSERT_CLOSE_ERROR(ref,output,ABS_KULLBACK_ERROR,REL_KULLBACK_ERROR);
  270. }
  271. void StatsTestsF16::test_logsumexp_dot_prod_f16()
  272. {
  273. const float16_t *inpA = inputA.ptr();
  274. const float16_t *inpB = inputB.ptr();
  275. const int16_t *dimsp = dims.ptr();
  276. float16_t *outp = output.ptr();
  277. float16_t *tmpp = tmp.ptr();
  278. for(int i=0;i < this->nbPatterns; i++)
  279. {
  280. *outp = arm_logsumexp_dot_prod_f16(inpA,inpB,dimsp[i+1],tmpp);
  281. outp++;
  282. inpA += dimsp[i+1];
  283. inpB += dimsp[i+1];
  284. }
  285. ASSERT_SNR(ref,output,(float16_t)SNR_THRESHOLD);
  286. ASSERT_REL_ERROR(ref,output,REL_ERROR);
  287. }
  288. void StatsTestsF16::test_mse_f16()
  289. {
  290. const float16_t *inpA = inputA.ptr();
  291. const float16_t *inpB = inputB.ptr();
  292. float16_t result;
  293. float16_t *refp = ref.ptr();
  294. float16_t *outp = output.ptr();
  295. arm_mse_f16(inpA,inpB,
  296. inputA.nbSamples(),
  297. &result);
  298. outp[0] = result;
  299. ASSERT_SNR(result,refp[this->refOffset],(float16_t)SNR_THRESHOLD);
  300. ASSERT_REL_ERROR(result,refp[this->refOffset],(float16_t)REL_ERROR);
  301. }
  302. void StatsTestsF16::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
  303. {
  304. (void)paramsArgs;
  305. switch(id)
  306. {
  307. case StatsTestsF16::TEST_MAX_F16_1:
  308. {
  309. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,7);
  310. maxIndexes.reload(StatsTestsF16::MAXINDEXES_S16_ID,mgr);
  311. ref.reload(StatsTestsF16::MAXVALS_F16_ID,mgr);
  312. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  313. index.create(1,StatsTestsF16::OUT_S16_ID,mgr);
  314. refOffset = 0;
  315. }
  316. break;
  317. case StatsTestsF16::TEST_MAX_F16_2:
  318. {
  319. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,16);
  320. maxIndexes.reload(StatsTestsF16::MAXINDEXES_S16_ID,mgr);
  321. ref.reload(StatsTestsF16::MAXVALS_F16_ID,mgr);
  322. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  323. index.create(1,StatsTestsF16::OUT_S16_ID,mgr);
  324. refOffset = 1;
  325. }
  326. break;
  327. case StatsTestsF16::TEST_MAX_F16_3:
  328. {
  329. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,23);
  330. maxIndexes.reload(StatsTestsF16::MAXINDEXES_S16_ID,mgr);
  331. ref.reload(StatsTestsF16::MAXVALS_F16_ID,mgr);
  332. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  333. index.create(1,StatsTestsF16::OUT_S16_ID,mgr);
  334. refOffset = 2;
  335. }
  336. break;
  337. case StatsTestsF16::TEST_MEAN_F16_4:
  338. {
  339. inputA.reload(StatsTestsF16::INPUT2_F16_ID,mgr,7);
  340. ref.reload(StatsTestsF16::MEANVALS_F16_ID,mgr);
  341. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  342. refOffset = 0;
  343. }
  344. break;
  345. case StatsTestsF16::TEST_MEAN_F16_5:
  346. {
  347. inputA.reload(StatsTestsF16::INPUT2_F16_ID,mgr,16);
  348. ref.reload(StatsTestsF16::MEANVALS_F16_ID,mgr);
  349. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  350. refOffset = 1;
  351. }
  352. break;
  353. case StatsTestsF16::TEST_MEAN_F16_6:
  354. {
  355. inputA.reload(StatsTestsF16::INPUT2_F16_ID,mgr,23);
  356. ref.reload(StatsTestsF16::MEANVALS_F16_ID,mgr);
  357. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  358. refOffset = 2;
  359. }
  360. break;
  361. case StatsTestsF16::TEST_MIN_F16_7:
  362. {
  363. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,7);
  364. minIndexes.reload(StatsTestsF16::MININDEXES_S16_ID,mgr);
  365. ref.reload(StatsTestsF16::MINVALS_F16_ID,mgr);
  366. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  367. index.create(1,StatsTestsF16::OUT_S16_ID,mgr);
  368. refOffset = 0;
  369. }
  370. break;
  371. case StatsTestsF16::TEST_MIN_F16_8:
  372. {
  373. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,16);
  374. minIndexes.reload(StatsTestsF16::MININDEXES_S16_ID,mgr);
  375. ref.reload(StatsTestsF16::MINVALS_F16_ID,mgr);
  376. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  377. index.create(1,StatsTestsF16::OUT_S16_ID,mgr);
  378. refOffset = 1;
  379. }
  380. break;
  381. case StatsTestsF16::TEST_MIN_F16_9:
  382. {
  383. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,23);
  384. minIndexes.reload(StatsTestsF16::MININDEXES_S16_ID,mgr);
  385. ref.reload(StatsTestsF16::MINVALS_F16_ID,mgr);
  386. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  387. index.create(1,StatsTestsF16::OUT_S16_ID,mgr);
  388. refOffset = 2;
  389. }
  390. break;
  391. case StatsTestsF16::TEST_POWER_F16_10:
  392. {
  393. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,7);
  394. ref.reload(StatsTestsF16::POWERVALS_F16_ID,mgr);
  395. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  396. refOffset = 0;
  397. }
  398. break;
  399. case StatsTestsF16::TEST_POWER_F16_11:
  400. {
  401. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,16);
  402. ref.reload(StatsTestsF16::POWERVALS_F16_ID,mgr);
  403. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  404. refOffset = 1;
  405. }
  406. break;
  407. case StatsTestsF16::TEST_POWER_F16_12:
  408. {
  409. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,23);
  410. ref.reload(StatsTestsF16::POWERVALS_F16_ID,mgr);
  411. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  412. refOffset = 2;
  413. }
  414. break;
  415. case StatsTestsF16::TEST_RMS_F16_13:
  416. {
  417. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,7);
  418. ref.reload(StatsTestsF16::RMSVALS_F16_ID,mgr);
  419. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  420. refOffset = 0;
  421. }
  422. break;
  423. case StatsTestsF16::TEST_RMS_F16_14:
  424. {
  425. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,16);
  426. ref.reload(StatsTestsF16::RMSVALS_F16_ID,mgr);
  427. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  428. refOffset = 1;
  429. }
  430. break;
  431. case StatsTestsF16::TEST_RMS_F16_15:
  432. {
  433. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,23);
  434. ref.reload(StatsTestsF16::RMSVALS_F16_ID,mgr);
  435. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  436. refOffset = 2;
  437. }
  438. break;
  439. case StatsTestsF16::TEST_STD_F16_16:
  440. {
  441. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,7);
  442. ref.reload(StatsTestsF16::STDVALS_F16_ID,mgr);
  443. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  444. refOffset = 0;
  445. }
  446. break;
  447. case StatsTestsF16::TEST_STD_F16_17:
  448. {
  449. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,16);
  450. ref.reload(StatsTestsF16::STDVALS_F16_ID,mgr);
  451. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  452. refOffset = 1;
  453. }
  454. break;
  455. case StatsTestsF16::TEST_STD_F16_18:
  456. {
  457. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,23);
  458. ref.reload(StatsTestsF16::STDVALS_F16_ID,mgr);
  459. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  460. refOffset = 2;
  461. }
  462. break;
  463. case StatsTestsF16::TEST_VAR_F16_19:
  464. {
  465. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,7);
  466. ref.reload(StatsTestsF16::VARVALS_F16_ID,mgr);
  467. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  468. refOffset = 0;
  469. }
  470. break;
  471. case StatsTestsF16::TEST_VAR_F16_20:
  472. {
  473. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,16);
  474. ref.reload(StatsTestsF16::VARVALS_F16_ID,mgr);
  475. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  476. refOffset = 1;
  477. }
  478. break;
  479. case StatsTestsF16::TEST_VAR_F16_21:
  480. {
  481. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,23);
  482. ref.reload(StatsTestsF16::VARVALS_F16_ID,mgr);
  483. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  484. refOffset = 2;
  485. }
  486. break;
  487. case StatsTestsF16::TEST_ENTROPY_F16_22:
  488. {
  489. inputA.reload(StatsTestsF16::INPUT22_F16_ID,mgr);
  490. dims.reload(StatsTestsF16::DIM22_S16_ID,mgr);
  491. ref.reload(StatsTestsF16::REF22_ENTROPY_F16_ID,mgr);
  492. output.create(ref.nbSamples(),StatsTestsF16::OUT_F16_ID,mgr);
  493. const int16_t *dimsp = dims.ptr();
  494. this->nbPatterns=dimsp[0];
  495. }
  496. break;
  497. case StatsTestsF16::TEST_LOGSUMEXP_F16_23:
  498. {
  499. inputA.reload(StatsTestsF16::INPUT23_F16_ID,mgr);
  500. dims.reload(StatsTestsF16::DIM23_S16_ID,mgr);
  501. ref.reload(StatsTestsF16::REF23_LOGSUMEXP_F16_ID,mgr);
  502. output.create(ref.nbSamples(),StatsTestsF16::OUT_F16_ID,mgr);
  503. const int16_t *dimsp = dims.ptr();
  504. this->nbPatterns=dimsp[0];
  505. }
  506. break;
  507. case StatsTestsF16::TEST_KULLBACK_LEIBLER_F16_24:
  508. {
  509. inputA.reload(StatsTestsF16::INPUTA24_F16_ID,mgr);
  510. inputB.reload(StatsTestsF16::INPUTB24_F16_ID,mgr);
  511. dims.reload(StatsTestsF16::DIM24_S16_ID,mgr);
  512. ref.reload(StatsTestsF16::REF24_KL_F16_ID,mgr);
  513. output.create(ref.nbSamples(),StatsTestsF16::OUT_F16_ID,mgr);
  514. const int16_t *dimsp = dims.ptr();
  515. this->nbPatterns=dimsp[0];
  516. }
  517. break;
  518. case StatsTestsF16::TEST_LOGSUMEXP_DOT_PROD_F16_25:
  519. {
  520. inputA.reload(StatsTestsF16::INPUTA25_F16_ID,mgr);
  521. inputB.reload(StatsTestsF16::INPUTB25_F16_ID,mgr);
  522. dims.reload(StatsTestsF16::DIM25_S16_ID,mgr);
  523. ref.reload(StatsTestsF16::REF25_LOGSUMEXP_DOT_F16_ID,mgr);
  524. output.create(ref.nbSamples(),StatsTestsF16::OUT_F16_ID,mgr);
  525. const int16_t *dimsp = dims.ptr();
  526. this->nbPatterns=dimsp[0];
  527. /* 12 is max vecDim as defined in Python script generating the data */
  528. tmp.create(12,StatsTestsF16::TMP_F16_ID,mgr);
  529. }
  530. break;
  531. case StatsTestsF16::TEST_MAX_NO_IDX_F16_26:
  532. {
  533. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,7);
  534. ref.reload(StatsTestsF16::MAXVALS_F16_ID,mgr);
  535. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  536. refOffset = 0;
  537. }
  538. break;
  539. case StatsTestsF16::TEST_MAX_NO_IDX_F16_27:
  540. {
  541. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,8);
  542. ref.reload(StatsTestsF16::MAXVALS_F16_ID,mgr);
  543. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  544. refOffset = 1;
  545. }
  546. break;
  547. case StatsTestsF16::TEST_MAX_NO_IDX_F16_28:
  548. {
  549. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,11);
  550. ref.reload(StatsTestsF16::MAXVALS_F16_ID,mgr);
  551. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  552. refOffset = 2;
  553. }
  554. break;
  555. case TEST_MEAN_F16_29:
  556. inputA.reload(StatsTestsF16::INPUT2_F16_ID,mgr,100);
  557. ref.reload(StatsTestsF16::MEANVALS_F16_ID,mgr);
  558. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  559. refOffset = 3;
  560. break;
  561. case TEST_RMS_F16_30:
  562. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,100);
  563. ref.reload(StatsTestsF16::RMSVALS_F16_ID,mgr);
  564. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  565. refOffset = 3;
  566. break;
  567. case TEST_STD_F16_31:
  568. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,100);
  569. ref.reload(StatsTestsF16::STDVALS_F16_ID,mgr);
  570. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  571. refOffset = 3;
  572. break;
  573. case TEST_VAR_F16_32:
  574. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,100);
  575. ref.reload(StatsTestsF16::VARVALS_F16_ID,mgr);
  576. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  577. refOffset = 3;
  578. break;
  579. case StatsTestsF16::TEST_ABSMAX_F16_34:
  580. {
  581. inputA.reload(StatsTestsF16::INPUTNEW1_F16_ID,mgr,7);
  582. maxIndexes.reload(StatsTestsF16::ABSMAXINDEXES_S16_ID,mgr);
  583. ref.reload(StatsTestsF16::ABSMAXVALS_F16_ID,mgr);
  584. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  585. index.create(1,StatsTestsF16::OUT_S16_ID,mgr);
  586. refOffset = 0;
  587. }
  588. break;
  589. case StatsTestsF16::TEST_ABSMAX_F16_35:
  590. {
  591. inputA.reload(StatsTestsF16::INPUTNEW1_F16_ID,mgr,16);
  592. maxIndexes.reload(StatsTestsF16::ABSMAXINDEXES_S16_ID,mgr);
  593. ref.reload(StatsTestsF16::ABSMAXVALS_F16_ID,mgr);
  594. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  595. index.create(1,StatsTestsF16::OUT_S16_ID,mgr);
  596. refOffset = 1;
  597. }
  598. break;
  599. case StatsTestsF16::TEST_ABSMAX_F16_36:
  600. {
  601. inputA.reload(StatsTestsF16::INPUTNEW1_F16_ID,mgr,23);
  602. maxIndexes.reload(StatsTestsF16::ABSMAXINDEXES_S16_ID,mgr);
  603. ref.reload(StatsTestsF16::ABSMAXVALS_F16_ID,mgr);
  604. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  605. index.create(1,StatsTestsF16::OUT_S16_ID,mgr);
  606. refOffset = 2;
  607. }
  608. break;
  609. case StatsTestsF16::TEST_ABSMIN_F16_37:
  610. {
  611. inputA.reload(StatsTestsF16::INPUTNEW1_F16_ID,mgr,7);
  612. minIndexes.reload(StatsTestsF16::ABSMININDEXES_S16_ID,mgr);
  613. ref.reload(StatsTestsF16::ABSMINVALS_F16_ID,mgr);
  614. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  615. index.create(1,StatsTestsF16::OUT_S16_ID,mgr);
  616. refOffset = 0;
  617. }
  618. break;
  619. case StatsTestsF16::TEST_ABSMIN_F16_38:
  620. {
  621. inputA.reload(StatsTestsF16::INPUTNEW1_F16_ID,mgr,16);
  622. minIndexes.reload(StatsTestsF16::ABSMININDEXES_S16_ID,mgr);
  623. ref.reload(StatsTestsF16::ABSMINVALS_F16_ID,mgr);
  624. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  625. index.create(1,StatsTestsF16::OUT_S16_ID,mgr);
  626. refOffset = 1;
  627. }
  628. break;
  629. case StatsTestsF16::TEST_ABSMIN_F16_39:
  630. {
  631. inputA.reload(StatsTestsF16::INPUTNEW1_F16_ID,mgr,23);
  632. minIndexes.reload(StatsTestsF16::ABSMININDEXES_S16_ID,mgr);
  633. ref.reload(StatsTestsF16::ABSMINVALS_F16_ID,mgr);
  634. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  635. index.create(1,StatsTestsF16::OUT_S16_ID,mgr);
  636. refOffset = 2;
  637. }
  638. break;
  639. case StatsTestsF16::TEST_MIN_NO_IDX_F16_40:
  640. {
  641. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,7);
  642. ref.reload(StatsTestsF16::MINVALS_F16_ID,mgr);
  643. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  644. refOffset = 0;
  645. }
  646. break;
  647. case StatsTestsF16::TEST_MIN_NO_IDX_F16_41:
  648. {
  649. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,16);
  650. ref.reload(StatsTestsF16::MINVALS_F16_ID,mgr);
  651. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  652. refOffset = 1;
  653. }
  654. break;
  655. case StatsTestsF16::TEST_MIN_NO_IDX_F16_42:
  656. {
  657. inputA.reload(StatsTestsF16::INPUT1_F16_ID,mgr,23);
  658. ref.reload(StatsTestsF16::MINVALS_F16_ID,mgr);
  659. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  660. refOffset = 2;
  661. }
  662. break;
  663. case StatsTestsF16::TEST_ABSMAX_NO_IDX_F16_43:
  664. {
  665. inputA.reload(StatsTestsF16::INPUTNEW1_F16_ID,mgr,7);
  666. ref.reload(StatsTestsF16::ABSMAXVALS_F16_ID,mgr);
  667. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  668. refOffset = 0;
  669. }
  670. break;
  671. case StatsTestsF16::TEST_ABSMAX_NO_IDX_F16_44:
  672. {
  673. inputA.reload(StatsTestsF16::INPUTNEW1_F16_ID,mgr,16);
  674. ref.reload(StatsTestsF16::ABSMAXVALS_F16_ID,mgr);
  675. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  676. refOffset = 1;
  677. }
  678. break;
  679. case StatsTestsF16::TEST_ABSMAX_NO_IDX_F16_45:
  680. {
  681. inputA.reload(StatsTestsF16::INPUTNEW1_F16_ID,mgr,23);
  682. ref.reload(StatsTestsF16::ABSMAXVALS_F16_ID,mgr);
  683. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  684. refOffset = 2;
  685. }
  686. break;
  687. case StatsTestsF16::TEST_ABSMIN_NO_IDX_F16_46:
  688. {
  689. inputA.reload(StatsTestsF16::INPUTNEW1_F16_ID,mgr,7);
  690. ref.reload(StatsTestsF16::ABSMINVALS_F16_ID,mgr);
  691. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  692. refOffset = 0;
  693. }
  694. break;
  695. case StatsTestsF16::TEST_ABSMIN_NO_IDX_F16_47:
  696. {
  697. inputA.reload(StatsTestsF16::INPUTNEW1_F16_ID,mgr,16);
  698. ref.reload(StatsTestsF16::ABSMINVALS_F16_ID,mgr);
  699. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  700. refOffset = 1;
  701. }
  702. break;
  703. case StatsTestsF16::TEST_ABSMIN_NO_IDX_F16_48:
  704. {
  705. inputA.reload(StatsTestsF16::INPUTNEW1_F16_ID,mgr,23);
  706. ref.reload(StatsTestsF16::ABSMINVALS_F16_ID,mgr);
  707. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  708. refOffset = 2;
  709. }
  710. break;
  711. case StatsTestsF16::TEST_MSE_F16_49:
  712. {
  713. inputA.reload(StatsTestsF16::INPUTNEW1_F16_ID,mgr,7);
  714. inputB.reload(StatsTestsF16::INPUTNEW2_F16_ID,mgr,7);
  715. ref.reload(StatsTestsF16::MSE_F16_ID,mgr);
  716. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  717. refOffset = 0;
  718. }
  719. break;
  720. case StatsTestsF16::TEST_MSE_F16_50:
  721. {
  722. inputA.reload(StatsTestsF16::INPUTNEW1_F16_ID,mgr,16);
  723. inputB.reload(StatsTestsF16::INPUTNEW2_F16_ID,mgr,16);
  724. ref.reload(StatsTestsF16::MSE_F16_ID,mgr);
  725. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  726. refOffset = 1;
  727. }
  728. break;
  729. case StatsTestsF16::TEST_MSE_F16_51:
  730. {
  731. inputA.reload(StatsTestsF16::INPUTNEW1_F16_ID,mgr,23);
  732. inputB.reload(StatsTestsF16::INPUTNEW2_F16_ID,mgr,23);
  733. ref.reload(StatsTestsF16::MSE_F16_ID,mgr);
  734. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  735. refOffset = 2;
  736. }
  737. break;
  738. case StatsTestsF16::TEST_MSE_F16_52:
  739. {
  740. inputA.reload(StatsTestsF16::INPUTNEW1_F16_ID,mgr,100);
  741. inputB.reload(StatsTestsF16::INPUTNEW2_F16_ID,mgr,100);
  742. ref.reload(StatsTestsF16::MSE_F16_ID,mgr);
  743. output.create(1,StatsTestsF16::OUT_F16_ID,mgr);
  744. refOffset = 3;
  745. }
  746. break;
  747. }
  748. }
  749. void StatsTestsF16::tearDown(Testing::testID_t id,Client::PatternMgr *mgr)
  750. {
  751. (void)id;
  752. switch(id)
  753. {
  754. case StatsTestsF16::TEST_MAX_F16_1:
  755. case StatsTestsF16::TEST_MAX_F16_2:
  756. case StatsTestsF16::TEST_MAX_F16_3:
  757. case StatsTestsF16::TEST_MIN_F16_7:
  758. case StatsTestsF16::TEST_MIN_F16_8:
  759. case StatsTestsF16::TEST_MIN_F16_9:
  760. index.dump(mgr);
  761. output.dump(mgr);
  762. break;
  763. default:
  764. output.dump(mgr);
  765. }
  766. }