Added tests for the new accumulate functions.

Corrected build issue on Neon without aarch64 support.
Corrected some Doxygen issues
pull/42/head
Christophe Favergeon 3 years ago
parent 2887bff90c
commit 865419778b

@ -81,6 +81,8 @@ target_sources(CMSISDSP PRIVATE StatisticsFunctions/arm_mse_q31.c)
target_sources(CMSISDSP PRIVATE StatisticsFunctions/arm_mse_f16.c) target_sources(CMSISDSP PRIVATE StatisticsFunctions/arm_mse_f16.c)
target_sources(CMSISDSP PRIVATE StatisticsFunctions/arm_mse_f32.c) target_sources(CMSISDSP PRIVATE StatisticsFunctions/arm_mse_f32.c)
target_sources(CMSISDSP PRIVATE StatisticsFunctions/arm_mse_f64.c) target_sources(CMSISDSP PRIVATE StatisticsFunctions/arm_mse_f64.c)
target_sources(CMSISDSP PRIVATE StatisticsFunctions/arm_accumulate_f64.c)
target_sources(CMSISDSP PRIVATE StatisticsFunctions/arm_accumulate_f32.c)
if ((NOT ARMAC5) AND (NOT DISABLEFLOAT16)) if ((NOT ARMAC5) AND (NOT DISABLEFLOAT16))
@ -102,4 +104,5 @@ target_sources(CMSISDSP PRIVATE StatisticsFunctions/arm_absmax_f16.c)
target_sources(CMSISDSP PRIVATE StatisticsFunctions/arm_absmin_f16.c) target_sources(CMSISDSP PRIVATE StatisticsFunctions/arm_absmin_f16.c)
target_sources(CMSISDSP PRIVATE StatisticsFunctions/arm_absmax_no_idx_f16.c) target_sources(CMSISDSP PRIVATE StatisticsFunctions/arm_absmax_no_idx_f16.c)
target_sources(CMSISDSP PRIVATE StatisticsFunctions/arm_absmin_no_idx_f16.c) target_sources(CMSISDSP PRIVATE StatisticsFunctions/arm_absmin_no_idx_f16.c)
target_sources(CMSISDSP PRIVATE StatisticsFunctions/arm_accumulate_f16.c)
endif() endif()

@ -100,7 +100,5 @@
#include "arm_mse_f64.c" #include "arm_mse_f64.c"
#include "arm_accumulate_f32.c" #include "arm_accumulate_f32.c"
#include "arm_accumulate_f64.c" #include "arm_accumulate_f64.c"
#include "arm_accumulate_q7.c"
#include "arm_accumulate_q15.c"
#include "arm_accumulate_q31.c"

@ -36,7 +36,7 @@
*/ */
/** /**
@defgroup Accumulation @defgroup Accumulation Accumulation functions
Calculates the accumulation of the input vector. Sum is defined as the addition of the elements in the vector. Calculates the accumulation of the input vector. Sum is defined as the addition of the elements in the vector.
The underlying algorithm is used: The underlying algorithm is used:
@ -57,7 +57,7 @@
@brief accumulate value of a floating-point vector. @brief accumulate value of a floating-point vector.
@param[in] pSrc points to the input vector. @param[in] pSrc points to the input vector.
@param[in] blockSize number of samples in input vector. @param[in] blockSize number of samples in input vector.
@param[out] pResult sum value returned here. @param[out] pResult sum of values in input vector.
@return none @return none
*/ */
@ -67,7 +67,7 @@ void arm_accumulate_f16(
float16_t * pResult) float16_t * pResult)
{ {
uint32_t blkCnt; /* Loop counter */ uint32_t blkCnt; /* Loop counter */
float16_t sum = 0.0f; /* Temporary result storage */ float16_t sum = 0.0f16; /* Temporary result storage */
#if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE) #if defined (ARM_MATH_LOOPUNROLL) && !defined(ARM_MATH_AUTOVECTORIZE)

@ -42,12 +42,64 @@
@brief Accumulation value of a floating-point vector. @brief Accumulation value of a floating-point vector.
@param[in] pSrc points to the input vector. @param[in] pSrc points to the input vector.
@param[in] blockSize number of samples in input vector. @param[in] blockSize number of samples in input vector.
@param[out] pResult sum value returned here. @param[out] pResult sum of values in input vector.
@return none @return none
*/ */
#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)
#include "arm_helium_utils.h"
#if defined(ARM_MATH_NEON_EXPERIMENTAL) && !defined(ARM_MATH_AUTOVECTORIZE) void arm_accumulate_f32(
const float32_t * pSrc,
uint32_t blockSize,
float32_t * pResult)
{
f32x4_t vecA;
f32x4_t vecSum;
uint32_t blkCnt;
float32_t sum = 0.0f;
vecSum = vdupq_n_f32(0.0f);
/* Compute 4 outputs at a time */
blkCnt = blockSize >> 2U;
while (blkCnt > 0U)
{
/*
* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1]
* Calculate dot product and then store the result in a temporary buffer.
* and advance vector source and destination pointers
*/
vecA = vld1q_f32(pSrc);
pSrc += 4;
vecSum = vaddq_f32(vecSum, vecA);
/*
* Decrement the blockSize loop counter
*/
blkCnt --;
}
blkCnt = blockSize & 3;
if (blkCnt > 0U)
{
/* C = A[0]* B[0] + A[1]* B[1] + A[2]* B[2] + .....+ A[blockSize-1]* B[blockSize-1] */
mve_pred16_t p0 = vctp32q(blkCnt);
vecA = vld1q(pSrc);
vecSum = vaddq_m(vecSum,vecSum, vecA, p0);
}
sum = vecAddAcrossF32Mve(vecSum);
/* Store result in destination buffer */
*pResult = sum;
}
#else
#if defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE)
void arm_accumulate_f32( void arm_accumulate_f32(
const float32_t * pSrc, const float32_t * pSrc,
uint32_t blockSize, uint32_t blockSize,
@ -96,6 +148,7 @@ void arm_accumulate_f32(
/* Store the result to the destination */ /* Store the result to the destination */
*pResult = sum; *pResult = sum;
} }
#else #else
void arm_accumulate_f32( void arm_accumulate_f32(
const float32_t * pSrc, const float32_t * pSrc,
@ -150,7 +203,7 @@ void arm_accumulate_f32(
} }
#endif /* #if defined(ARM_MATH_NEON) */ #endif /* #if defined(ARM_MATH_NEON) */
#endif /* #if defined(ARM_MATH_MVEF) */
/** /**
@} end of Accumulation group @} end of Accumulation group
*/ */

@ -42,10 +42,10 @@
@brief Accumulation value of a floating-point vector. @brief Accumulation value of a floating-point vector.
@param[in] pSrc points to the input vector. @param[in] pSrc points to the input vector.
@param[in] blockSize number of samples in input vector. @param[in] blockSize number of samples in input vector.
@param[out] pResult sum value returned here. @param[out] pResult sum of values in input vector.
@return none @return none
*/ */
#if defined(ARM_MATH_NEON) #if defined(ARM_MATH_NEON) && defined(__aarch64__)
void arm_accumulate_f64( void arm_accumulate_f64(
const float64_t * pSrc, const float64_t * pSrc,
uint32_t blockSize, uint32_t blockSize,

@ -477,8 +477,7 @@ def writeTests(config,nb,format):
# So new tests have to be added after existing ones # So new tests have to be added after existing ones
def writeNewsTests(config,nb,format): def writeNewsTests(config,nb,format):
NBSAMPLES = 300 NBSAMPLES = 300
if format==Tools.F16:
config.setOverwrite(True)
data1=np.random.randn(NBSAMPLES) data1=np.random.randn(NBSAMPLES)
data1 = Tools.normalize(data1) data1 = Tools.normalize(data1)
@ -492,7 +491,39 @@ def writeNewsTests(config,nb,format):
config.writeInput(2, data2,"InputNew") config.writeInput(2, data2,"InputNew")
nb=generateOperatorTests(config,nb,format,data1,data2,mseTest,"MSEVals") nb=generateOperatorTests(config,nb,format,data1,data2,mseTest,"MSEVals")
config.setOverwrite(False)
return(nb)
def writeAccumulateTests(config,nb,format):
NBSAMPLES = 300
data1=np.random.randn(NBSAMPLES)
# First value is the number of tests
# Other values are the number of samples in each test
nbsamples = [4]
nbiters = Tools.loopnb(format,Tools.TAILONLY)
nbsamples.append(nbiters)
nbiters = Tools.loopnb(format,Tools.BODYONLY)
nbsamples.append(nbiters)
nbiters = Tools.loopnb(format,Tools.BODYANDTAIL)
nbsamples.append(nbiters)
nbsamples.append(NBSAMPLES)
ref=[]
for nb in nbsamples[1:]:
t = np.sum(data1[:nb])
ref.append(t)
config.writeInput(1, data1,"InputAccumulate")
config.writeInputS16(1, nbsamples,"InputAccumulateConfig")
config.writeReference(1, ref,"RefAccumulate")
return(nb+1)
def generateBenchmark(config,format): def generateBenchmark(config,format):
@ -536,24 +567,27 @@ def generatePatterns():
nb=writeTests(configf32,1,0) nb=writeTests(configf32,1,0)
nb=writeF32OnlyTests(configf32,22) nb=writeF32OnlyTests(configf32,22)
writeNewsTests(configf32,nb,Tools.F32) nb=writeNewsTests(configf32,nb,Tools.F32)
nb=writeAccumulateTests(configf32,nb,Tools.F32)
nb=writeTests(configf64,1,Tools.F64) nb=writeTests(configf64,1,Tools.F64)
nb=writeF64OnlyTests(configf64,22) nb=writeF64OnlyTests(configf64,22)
writeNewsTests(configf64,nb,Tools.F64) nb=writeNewsTests(configf64,nb,Tools.F64)
nb=writeAccumulateTests(configf64,nb,Tools.F64)
nb=writeTests(configq31,1,31) nb=writeTests(configq31,1,31)
writeNewsTests(configq31,nb,Tools.Q31) nb=writeNewsTests(configq31,nb,Tools.Q31)
nb=writeTests(configq15,1,15) nb=writeTests(configq15,1,15)
writeNewsTests(configq15,nb,Tools.Q15) nb=writeNewsTests(configq15,nb,Tools.Q15)
nb=writeTests(configq7,1,7) nb=writeTests(configq7,1,7)
writeNewsTests(configq7,nb,Tools.Q7) nb=writeNewsTests(configq7,nb,Tools.Q7)
nb=writeTests(configf16,1,16) nb=writeTests(configf16,1,16)
nb=writeF16OnlyTests(configf16,22) nb=writeF16OnlyTests(configf16,22)
writeNewsTests(configf16,nb,Tools.F16) nb=writeNewsTests(configf16,nb,Tools.F16)
nb=writeAccumulateTests(configf16,nb,Tools.F16)
generateBenchmark(configf64, Tools.F64) generateBenchmark(configf64, Tools.F64)
generateBenchmark(configf32, Tools.F32) generateBenchmark(configf32, Tools.F32)

@ -0,0 +1,602 @@
H
300
// 0.403228
0x3674
// 0.790535
0x3a53
// -1.765692
0xbf10
// 0.564353
0x3884
// 0.135080
0x3053
// -0.646656
0xb92c
// 0.647246
0x392e
// 0.108600
0x2ef3
// 0.255541
0x3417
// -0.587044
0xb8b2
// -0.863863
0xbae9
// -0.721468
0xb9c6
// -1.283427
0xbd22
// -0.948428
0xbb96
// 0.620959
0x38f8
// 1.702865
0x3ed0
// 0.077509
0x2cf6
// 2.637373
0x4146
// -0.508381
0xb811
// 0.879278
0x3b09
// -0.800507
0xba67
// 0.146854
0x30b3
// 0.080875
0x2d2d
// -0.004483
0x9c97
// 1.082495
0x3c54
// 0.629065
0x3908
// 1.153966
0x3c9e
// 0.596096
0x38c5
// 1.799158
0x3f32
// -0.904648
0xbb3d
// 0.234833
0x3384
// 0.406887
0x3683
// -0.571166
0xb892
// 0.229944
0x335c
// -0.222729
0xb321
// -2.061951
0xc020
// -1.736408
0xbef2
// 0.433383
0x36ef
// -0.573268
0xb896
// 0.898404
0x3b30
// 0.790407
0x3a53
// 1.047674
0x3c31
// -0.324671
0xb532
// 0.892667
0x3b24
// 0.867253
0x3af0
// -0.839434
0xbab7
// 0.296731
0x34bf
// -2.105106
0xc036
// -1.402729
0xbd9c
// 0.188074
0x3205
// 0.404535
0x3679
// -0.336336
0xb562
// -0.797713
0xba62
// 1.218317
0x3ce0
// 0.727737
0x39d2
// -0.920469
0xbb5d
// -0.128949
0xb020
// -0.433229
0xb6ef
// -1.677798
0xbeb6
// -1.193025
0xbcc6
// 0.854931
0x3ad7
// -0.099621
0xae60
// 2.091603
0x402f
// 0.629319
0x3909
// -0.512076
0xb819
// -1.936900
0xbfbf
// 1.724247
0x3ee6
// 0.156420
0x3101
// -0.651338
0xb936
// -0.633550
0xb912
// -2.303735
0xc09c
// 0.179141
0x31bc
// 0.685227
0x397b
// 0.387766
0x3634
// 1.371416
0x3d7c
// -1.918012
0xbfac
// 0.406116
0x367f
// -0.183715
0xb1e1
// 0.232746
0x3373
// -1.342283
0xbd5e
// 0.470318
0x3786
// -2.182310
0xc05d
// 0.741559
0x39ef
// -0.643764
0xb926
// 0.048399
0x2a32
// -0.540895
0xb854
// 1.106616
0x3c6d
// -0.323150
0xb52c
// 0.341424
0x3576
// -1.434152
0xbdbd
// -0.448837
0xb72e
// 1.274818
0x3d19
// -0.079564
0xad18
// -0.806076
0xba73
// -0.261651
0xb430
// 0.081918
0x2d3e
// 1.030944
0x3c20
// -0.141107
0xb084
// 0.909641
0x3b47
// -1.363575
0xbd74
// -0.373532
0xb5fa
// -0.199387
0xb261
// 0.026760
0x26da
// -0.840572
0xbab9
// -0.381145
0xb619
// -1.667549
0xbeac
// 1.216329
0x3cde
// -0.891745
0xbb22
// 0.197249
0x3250
// 0.914707
0x3b51
// 0.474276
0x3797
// -0.936337
0xbb7e
// 1.875325
0x3f80
// 0.309868
0x34f5
// -1.402561
0xbd9c
// -0.847870
0xbac8
// -0.613946
0xb8e9
// 1.454202
0x3dd1
// -0.934711
0xbb7a
// 1.348542
0x3d65
// 0.966193
0x3bbb
// 0.462141
0x3765
// 0.008913
0x2090
// -0.964340
0xbbb7
// 0.926279
0x3b69
// -1.422982
0xbdb1
// -0.266019
0xb442
// -0.841451
0xbabb
// 0.817545
0x3a8a
// -0.847594
0xbac8
// 0.675984
0x3968
// -0.976700
0xbbd0
// -1.046232
0xbc2f
// 0.299853
0x34cc
// 1.914445
0x3fa8
// -1.172457
0xbcb1
// -0.431608
0xb6e8
// -1.240815
0xbcf7
// -0.290280
0xb4a5
// 0.517154
0x3823
// 0.129529
0x3025
// 0.019651
0x2508
// 0.010109
0x212d
// -0.456176
0xb74c
// 0.072539
0x2ca4
// -1.058758
0xbc3c
// 0.565836
0x3887
// -0.906917
0xbb41
// 0.007338
0x1f84
// 0.280566
0x347d
// 0.894503
0x3b28
// 0.266863
0x3445
// 0.132966
0x3041
// 0.767206
0x3a23
// -0.686024
0xb97d
// -0.965636
0xbbba
// -1.063983
0xbc42
// -0.154416
0xb0f1
// 0.362044
0x35cb
// -1.199676
0xbccc
// 0.653584
0x393b
// -0.303124
0xb4da
// 0.327124
0x353c
// 0.090162
0x2dc5
// 0.255816
0x3418
// -0.248543
0xb3f4
// -0.599767
0xb8cc
// 0.877696
0x3b06
// 1.957729
0x3fd5
// -0.416063
0xb6a8
// 0.894641
0x3b28
// 0.893332
0x3b26
// 1.804270
0x3f38
// 0.571469
0x3892
// -0.538999
0xb850
// -0.711532
0xb9b1
// -0.302412
0xb4d7
// -0.964833
0xbbb8
// -0.598038
0xb8c9
// -0.654437
0xb93c
// 0.631505
0x390d
// 1.409936
0x3da4
// 0.213330
0x32d4
// -0.311454
0xb4fc
// 0.398628
0x3661
// -0.706000
0xb9a6
// -0.753669
0xba08
// 0.309298
0x34f3
// 1.492094
0x3df8
// 1.596098
0x3e62
// 0.490982
0x37db
// 1.596482
0x3e63
// 0.332411
0x3552
// -2.157640
0xc051
// -1.587679
0xbe5a
// 0.495530
0x37ee
// 0.960868
0x3bb0
// -0.591988
0xb8bc
// -1.045693
0xbc2f
// 0.843292
0x3abf
// -0.075070
0xacce
// -0.282838
0xb487
// 0.522908
0x382f
// -0.062621
0xac02
// -0.213422
0xb2d4
// -1.193460
0xbcc6
// 0.024896
0x2660
// -3.089132
0xc22e
// 0.458491
0x3756
// -1.698179
0xbecb
// 2.840010
0x41ae
// 0.578660
0x38a1
// 0.361009
0x35c7
// -1.742869
0xbef9
// -0.831256
0xbaa6
// -1.109137
0xbc70
// -0.596247
0xb8c5
// 1.208434
0x3cd5
// -1.935833
0xbfbe
// 2.217497
0x406f
// 1.160372
0x3ca4
// -0.081313
0xad34
// -2.419502
0xc0d7
// 0.272382
0x345c
// 0.889528
0x3b1e
// 0.397543
0x365c
// -1.700459
0xbecd
// 1.042543
0x3c2c
// 1.202107
0x3ccf
// -0.051818
0xaaa2
// -0.730582
0xb9d8
// 0.025250
0x2677
// -0.318532
0xb519
// -0.757038
0xba0e
// -0.484690
0xb7c1
// 0.658922
0x3945
// -0.684210
0xb979
// -1.351297
0xbd68
// -0.745298
0xb9f6
// 0.368193
0x35e4
// -1.528640
0xbe1d
// -0.673173
0xb963
// -0.014893
0xa3a0
// -0.417328
0xb6ad
// 1.101533
0x3c68
// -1.793305
0xbf2c
// -0.876005
0xbb02
// 0.710846
0x39b0
// -0.486367
0xb7c8
// 0.489545
0x37d5
// -0.753876
0xba08
// 0.684575
0x397a
// -0.569468
0xb88e
// 1.294840
0x3d2e
// -1.234943
0xbcf1
// -0.938473
0xbb82
// 1.262225
0x3d0d
// -1.040557
0xbc2a
// 2.077698
0x4028
// 1.582555
0x3e55
// 1.070929
0x3c49
// 1.747530
0x3efd
// -1.266449
0xbd11
// -0.117831
0xaf8b
// -1.120036
0xbc7b
// 0.115079
0x2f5d
// 0.097422
0x2e3c
// 0.054251
0x2af2
// 0.284460
0x348d
// -0.344650
0xb584
// -2.165535
0xc055
// 1.090171
0x3c5c
// -1.290367
0xbd29
// -0.291540
0xb4aa
// -0.262937
0xb435
// -0.269938
0xb452
// 1.745340
0x3efb
// -0.381207
0xb619
// 0.559560
0x387a
// 1.061609
0x3c3f
// -0.448525
0xb72d
// 0.600914
0x38cf
// -0.439293
0xb707
// 0.081809
0x2d3c
// 0.736261
0x39e4
// 1.237320
0x3cf3
// 0.314349
0x3508
// 0.002416
0x18f3
// 0.114545
0x2f55
// -0.890155
0xbb1f
// -1.599143
0xbe66
// -0.084827
0xad6e
// 0.452470
0x373d
// -0.363854
0xb5d2
// 0.494410
0x37e9
// 0.323634
0x352e
// 1.745487
0x3efb
// 2.692194
0x4162
// -2.172338
0xc058
// 0.676894
0x396a

@ -0,0 +1,12 @@
H
5
// 4
0x0004
// 7
0x0007
// 16
0x0010
// 23
0x0017
// 300
0x012C

@ -0,0 +1,10 @@
H
4
// 0.128093
0x3019
// -1.588172
0xbe5a
// 0.924829
0x3b66
// -10.314345
0xc928

@ -0,0 +1,602 @@
W
300
// -0.423443
0xbed8cd77
// -0.983498
0xbf7bc681
// -0.513058
0xbf0357c8
// -0.826724
0xbf53a42a
// -0.098833
0xbdca68b8
// -0.647028
0xbf25a3a9
// -0.586539
0xbf162767
// 1.582705
0x3fca9615
// 0.819569
0x3f51cf4d
// -0.685971
0xbf2f9bc9
// -0.157562
0xbe2157e3
// 0.880716
0x3f6176a2
// -0.579034
0xbf143b8e
// 0.623778
0x3f1fafe8
// -1.262239
0xbfa19109
// -0.625875
0xbf203958
// 0.684227
0x3f2f297e
// 0.370696
0x3ebdcbd0
// 0.698463
0x3f32ce72
// 2.012159
0x4000c738
// -0.067237
0xbd89b395
// 1.146582
0x3f92c332
// 0.075101
0x3d99ce71
// 0.410785
0x3ed2525d
// -1.697154
0xbfd93c59
// -0.590957
0xbf1748f0
// 0.337581
0x3eacd776
// -0.661201
0xbf29447e
// -0.091832
0xbdbc1287
// -0.822853
0xbf52a67d
// 0.083798
0x3dab9e36
// -1.254186
0xbfa08928
// 0.861168
0x3f5c7582
// -0.073341
0xbd9633da
// -1.121536
0xbf8f8e7a
// -0.897961
0xbf65e0cb
// -0.946319
0xbf7241fa
// -0.918747
0xbf6b3305
// 0.825834
0x3f5369db
// -0.306754
0xbe9d0ed5
// -0.070929
0xbd9142fc
// 0.931081
0x3f6e5b51
// -0.079323
0xbda273ee
// 0.144046
0x3e1380c6
// -0.201304
0xbe4e22a6
// 0.944336
0x3f71bfff
// 0.157191
0x3e20f6cc
// -1.196110
0xbf991a21
// -0.904330
0xbf678223
// 0.656791
0x3f28237b
// -2.277876
0xc011c8b8
// 0.322499
0x3ea51ea6
// -1.135596
0xbf915b37
// 0.332263
0x3eaa1e55
// -0.196604
0xbe49527e
// 0.370739
0x3ebdd17a
// -0.736538
0xbf3c8db9
// 0.430131
0x3edc3a32
// 1.991774
0x3ffef274
// 0.865658
0x3f5d9bc7
// 1.297061
0x3fa60614
// -0.353067
0xbeb4c53f
// -1.154915
0xbf93d445
// 0.013318
0x3c5a3568
// 0.604935
0x3f1add0b
// 0.650382
0x3f267f6c
// 0.057334
0x3d6ad705
// -1.391626
0xbfb220cf
// 1.436114
0x3fb7d298
// 0.162395
0x3e264af3
// 0.558801
0x3f0f0d97
// -0.079698
0xbda33877
// -0.055110
0xbd61baa1
// 0.179196
0x3e377f3c
// -1.057574
0xbf875e94
// -0.521445
0xbf057d6a
// 0.422838
0x3ed87e44
// 1.151230
0x3f935b85
// 1.216962
0x3f9bc565
// 0.950819
0x3f7368de
// -0.498350
0xbeff27ab
// -0.578754
0xbf14293f
// 0.702426
0x3f33d238
// 0.304651
0x3e9bfb30
// 0.995786
0x3f7eebce
// 0.030582
0x3cfa8671
// 0.102266
0x3dd170f9
// 0.356987
0x3eb6c6f1
// -0.337055
0xbeac926e
// -1.549700
0xbfc65c93
// 0.296486
0x3e97cd07
// 1.095437
0x3f8c374b
// 1.244417
0x3f9f490b
// 0.359604
0x3eb81df3
// -0.441891
0xbee23f96
// 0.384206
0x3ec4b6b0
// -0.471972
0xbef1a647
// 0.648020
0x3f25e49f
// 1.201917
0x3f99d86f
// -2.865849
0xc0376a11
// 1.176467
0x3f969677
// 0.640080
0x3f23dc46
// 0.422593
0x3ed85e2a
// 0.209291
0x3e56507f
// -0.336963
0xbeac8679
// 1.326757
0x3fa9d32c
// -1.032990
0xbf843905
// -0.904691
0xbf6799d9
// 0.065775
0x3d86b4de
// 1.856034
0x3fed9288
// -0.422515
0xbed853ef
// 1.135110
0x3f914b4a
// -2.076895
0xc004ebd8
// 0.866082
0x3f5db793
// -2.045051
0xc002e21e
// -0.504498
0xbf0126c0
// 1.459088
0x3fbac363
// 0.090395
0x3db9211f
// 1.077701
0x3f89f21b
// -0.025416
0xbcd0344b
// -0.468621
0xbeefef19
// -0.451325
0xbee7140c
// 0.669543
0x3f2b6731
// 0.278190
0x3e8e6efa
// -0.479717
0xbef59d67
// -0.793268
0xbf4b13a4
// 0.942438
0x3f7143a5
// -2.587449
0xc02598c4
// -0.026251
0xbcd70b5e
// -0.126607
0xbe01a544
// 0.658765
0x3f28a4d5
// -1.699255
0xbfd9812d
// -0.788664
0xbf49e5dc
// 0.275554
0x3e8d155c
// 0.935411
0x3f6f771e
// 0.787206
0x3f498652
// -0.049373
0xbd4a3bbd
// -0.746808
0xbf3f2ecc
// -1.299582
0xbfa658b7
// 0.043045
0x3d305068
// -0.729928
0xbf3adc8c
// 1.236238
0x3f9e3d0a
// -0.759593
0xbf4274b8
// -0.892822
0xbf648ff8
// 1.532354
0x3fc42429
// -0.597137
0xbf18ddfb
// -0.000702
0xba37f55e
// 1.655931
0x3fd3f58a
// 1.536543
0x3fc4ad6e
// 0.213734
0x3e5adcf5
// -0.208254
0xbe5540a3
// -2.398257
0xc0197d0c
// -1.241876
0xbf9ef5ca
// -1.542659
0xbfc575db
// -0.073463
0xbd967388
// 0.595362
0x3f1869a2
// -1.254223
0xbfa08a65
// -0.097561
0xbdc7ce41
// 0.611658
0x3f1c95a4
// 0.790725
0x3f4a6cfc
// 1.275721
0x3fa34ad7
// -0.377948
0xbec18257
// 0.654724
0x3f279bf6
// 0.077602
0x3d9eedb8
// -1.257696
0xbfa0fc31
// 0.110166
0x3de19e78
// -0.054233
0xbd5e23df
// -1.683268
0xbfd77550
// 0.941935
0x3f7122a2
// 2.554066
0x402375d0
// -1.619144
0xbfcf401e
// 1.462543
0x3fbb3498
// 0.811070
0x3f4fa242
// 1.927283
0x3ff6b136
// -0.022243
0xbcb63794
// 0.755502
0x3f41688f
// -0.554742
0xbf0e0391
// 0.795036
0x3f4b8780
// -1.578591
0xbfca0f42
// -1.086833
0xbf8b1d5a
// 0.343749
0x3eafffed
// 2.170838
0x400aef02
// 3.001650
0x40401b09
// 1.892707
0x3ff24436
// -0.056903
0xbd69129e
// -2.503841
0xc0203ef0
// 1.152213
0x3f937bb3
// -0.219470
0xbe60bcba
// -1.451331
0xbfb9c536
// 1.168464
0x3f95903e
// -0.342840
0xbeaf88b9
// 0.294751
0x3e96e998
// -0.353277
0xbeb4e0ab
// -0.698509
0xbf32d17a
// -1.092133
0xbf8bcb07
// 0.729987
0x3f3ae06e
// -0.523243
0xbf05f347
// 1.708302
0x3fdaa9a3
// -1.028413
0xbf83a30c
// 1.275090
0x3fa33628
// 0.067721
0x3d8ab126
// -0.451632
0xbee73c51
// 0.576707
0x3f13a311
// 1.627953
0x3fd060c4
// 0.639968
0x3f23d4ed
// 1.075825
0x3f89b4a0
// -0.495454
0xbefdac35
// 0.095114
0x3dc2cae1
// -1.313427
0xbfa81e61
// -1.200968
0xbf99b954
// 0.714616
0x3f36f11b
// -0.716077
0xbf3750d2
// 1.231550
0x3f9da36e
// 1.307033
0x3fa74cde
// 0.544918
0x3f0b7fb9
// -0.272018
0xbe8b45f9
// -0.202694
0xbe4f8f1a
// 0.902505
0x3f670a8c
// -2.392231
0xc0191a52
// -0.940717
0xbf70d2db
// -2.000130
0xc0000221
// -0.816307
0xbf50f981
// -0.888401
0xbf636e3d
// -0.209496
0xbe568609
// 2.026531
0x4001b2ae
// 1.216935
0x3f9bc487
// -0.112947
0xbde750f7
// 0.586520
0x3f162632
// 1.212788
0x3f9b3ca6
// 0.234782
0x3e706ab8
// 1.062053
0x3f87f15c
// -0.807098
0xbf4e9dfd
// -2.107924
0xc006e83b
// -0.991721
0xbf7de174
// 0.628760
0x3f20f66d
// 2.122896
0x4007dd89
// -0.952098
0xbf73bcb3
// 0.113922
0x3de94fdf
// 2.725400
0x402e6cf4
// 0.546763
0x3f0bf8a4
// -1.384506
0xbfb13780
// 0.119917
0x3df596e2
// -1.233861
0xbf9def28
// 0.935340
0x3f6f7270
// -1.505120
0xbfc0a7c7
// -0.377617
0xbec15713
// 0.799940
0x3f4cc8e3
// -0.319001
0xbea3541d
// 0.641903
0x3f2453c3
// 1.549009
0x3fc645f1
// -0.493078
0xbefc74bc
// -1.702947
0xbfd9fa2c
// 1.320023
0x3fa8f682
// 0.138493
0x3e0dd103
// 1.115283
0x3f8ec199
// -0.864410
0xbf5d49f5
// 1.279482
0x3fa3c615
// 0.390853
0x3ec81dec
// 0.781768
0x3f4821f5
// 0.370289
0x3ebd9693
// 0.669609
0x3f2b6b79
// 1.678452
0x3fd6d781
// 0.513118
0x3f035baf
// 0.649515
0x3f2646a1
// -0.990310
0xbf7d84ed
// -1.788502
0xbfe4eda4
// -0.071319
0xbd920fb2
// 0.096202
0x3dc5057b
// 0.369050
0x3ebcf41d
// -2.291920
0xc012aed3
// 0.868246
0x3f5e4560
// 1.527368
0x3fc380cb
// 0.905387
0x3f67c76e
// 2.014818
0x4000f2c8
// -1.645145
0xbfd29420
// 0.706149
0x3f34c629
// 0.437204
0x3edfd928
// -0.512773
0xbf03450f
// -1.036983
0xbf84bbe0
// 2.089183
0x4005b52d
// -0.464019
0xbeed93de
// -1.337332
0xbfab2dae
// -0.228851
0xbe6a57f4
// 1.735562
0x3fde26e2
// 0.085262
0x3dae9df0
// -0.496630
0xbefe4640
// -1.341138
0xbfabaa6b
// -0.550179
0xbf0cd883
// 2.034660
0x400237e0
// 0.052855
0x3d587ef7
// 1.781379
0x3fe40438
// -0.978739
0xbf7a8ea1
// -1.351531
0xbfacfef7
// -0.541003
0xbf0a7f29
// 0.995079
0x3f7ebd85
// 1.448289
0x3fb96187
// -0.123124
0xbdfc2852
// -0.350373
0xbeb36423
// 1.034495
0x3f846a57
// -0.678016
0xbf2d926f

@ -0,0 +1,12 @@
H
5
// 4
0x0004
// 3
0x0003
// 8
0x0008
// 11
0x000B
// 300
0x012C

@ -0,0 +1,10 @@
W
4
// -1.919998
0xbff5c282
// -2.496417
0xc01fc54b
// -2.520380
0xc0214de8
// 15.878417
0x417e0dff

@ -0,0 +1,602 @@
D
300
// 0.591762
0x3fe2efb7d1952c8d
// 1.346868
0x3ff58cc52fa376f9
// 0.285820
0x3fd24ae0a79ad81d
// -0.858870
0xbfeb7bdc5313e4f5
// 1.096028
0x3ff1895447537f90
// -0.843217
0xbfeafba14924b30e
// -0.731724
0xbfe76a48c78d7fc7
// 0.247799
0x3fcfb7df3ca5404f
// -0.416542
0xbfdaa89eaa690f97
// 0.672924
0x3fe58896ea6679cb
// 0.271024
0x3fd15873d49cbdf1
// -0.265199
0xbfd0f90428764a13
// 0.765841
0x3fe881c4d1806d05
// 0.525063
0x3fe0cd50748bbf99
// 0.533392
0x3fe1118bfb02f4c5
// -1.007398
0xbff01e4ceae2cb9a
// 1.190889
0x3ff30de1aae279f6
// 0.297438
0x3fd3093a9dd1a7b9
// 1.596330
0x3ff98a9161f98815
// -1.918050
0xbffeb054cf9f179b
// 0.412652
0x3fda68e5571a268f
// 0.389409
0x3fd8ec136d8391ee
// -0.298699
0xbfd31de3ed58bcb1
// 1.007653
0x3ff01f5842a07169
// 0.117794
0x3fbe27c4e4786fa7
// 1.275045
0x3ff4669531ba3c67
// 0.348807
0x3fd652dca72a1b86
// -0.518251
0xbfe0958302b38d1b
// -2.084621
0xc000ad4d869f0723
// 0.046931
0x3fa80752c164372b
// -1.098749
0xbff1947a5764d065
// 0.461066
0x3fdd82196683d235
// -0.461843
0xbfdd8ed5fa69a819
// -0.733344
0xbfe7778e215d5544
// 1.280933
0x3ff47eb31cc99694
// -0.450840
0xbfdcda91b3c7ae64
// -0.324242
0xbfd4c061d7b87f9b
// -0.082313
0xbfb51275aec18b50
// 0.678082
0x3fe5b2d9bba4d029
// 0.216665
0x3fcbbbb04679ea9d
// -0.072394
0xbfb28867086bfdc9
// -0.894777
0xbfeca202a4146dab
// -0.927379
0xbfedad16ece95ce0
// 1.745247
0x3ffbec8895a540aa
// 0.015979
0x3f905cbbc9435051
// 0.254808
0x3fd04ec60bc5c8f5
// -2.264820
0xc0021e59c97d4af9
// -1.889860
0xbffe3cde380dc5a8
// 0.173487
0x3fc634d30cf0da25
// -0.246073
0xbfcf7f53632de4a7
// 0.298900
0x3fd3212db677d0b0
// -0.638844
0xbfe47167fb3a588d
// -0.182363
0xbfc757abe21ec3cf
// 1.405280
0x3ff67c075ca67e9b
// -0.635200
0xbfe4538fc90c2e53
// -0.992023
0xbfefbea76346d417
// 1.156137
0x3ff27f8942c4b376
// 0.650516
0x3fe4d107e36b7876
// -0.990295
0xbfefb07e408b3fe2
// -0.065694
0xbfb0d1545a7902e3
// 1.374938
0x3ff5ffbec44f8a8e
// -0.593372
0xbfe2fce7ce325a00
// 0.063298
0x3fb03446a5d4a244
// -0.088991
0xbfb6c8238f3846fc
// 0.065581
0x3fb0c9eb043953dd
// -0.340817
0xbfd5cff01b999ed0
// -0.227255
0xbfcd16ad8b411be5
// -0.395505
0xbfd94ff5167e7cf3
// 0.229238
0x3fcd57aedec76d75
// -0.164329
0xbfc508bbae786c48
// 1.694348
0x3ffb1c0cbdda1e8b
// -2.223618
0xc001c9f879e1591b
// -0.387069
0xbfd8c5bc46545a36
// -0.163043
0xbfc4de99d7206f3f
// 2.427573
0x40036bab9b54edc8
// 1.052230
0x3ff0d5ef5cc472ed
// 1.123976
0x3ff1fbcde93ea419
// -0.974354
0xbfef2de84eb1a34f
// -1.351470
0xbff59f9f0fe1ca22
// 0.536450
0x3fe12a99a633cf41
// 1.265249
0x3ff43e75ab0275f6
// 0.553907
0x3fe1b99b70a0fe95
// 0.668717
0x3fe566220b75f0aa
// 0.321792
0x3fd4983c25827563
// -0.016920
0xbf915358decf654f
// 0.085172
0x3fb5cdd5e666d2c1
// -0.184192
0xbfc793984a18c898
// -0.513147
0xbfe06bb26ca6d453
// 0.927872
0x3fedb11fed57d980
// -1.548969
0xbff8c89345880c33
// -0.601981
0xbfe3436dcddf818a
// 0.476340
0x3fde7c58d3f2dba7
// -2.105879
0xc000d8d6ead7eb9c
// 0.954027
0x3fee876428a958d0
// -2.165969
0xc00153e753b9f2b8
// 1.012873
0x3ff034ba4cb5ce83
// -0.779203
0xbfe8ef3a25531656
// -0.961244
0xbfeec281d5a4a837
// -0.832993
0xbfeaa7e0408c3ddf
// 0.488423
0x3fdf4254658a8452
// -1.344825
0xbff584673279b99c
// 1.765342
0x3ffc3ed7b9846a66
// 1.478842
0x3ff7a9561fee9d33
// 1.686267
0x3ffafaf31639a6cc
// -0.944275
0xbfee378033fac580
// 0.210522
0x3fcaf2649e0564a0
// -0.732744
0xbfe772a3839d33ce
// -0.230683
0xbfcd8701792aa3c1
// 1.405108
0x3ff67b525ca07125
// -0.328691
0xbfd50947e8c28776
// -0.286968
0xbfd25db1078c312d
// -1.361024
0xbff5c6c18bdcfcb4
// 0.849591
0x3feb2fd9ffb31d30
// -2.088668
0xc000b59787b09019
// 1.387327
0x3ff6327d91b18236
// -0.392612
0xbfd9208d7c046335
// 0.409889
0x3fda3b9e5fb8b537
// 1.796759
0x3ffcbf86e38b29cd
// 0.978588
0x3fef5098b7f8c16d
// 0.703897
0x3fe686531a2ce622
// 0.549163
0x3fe192bd6c6821aa
// -0.173986
0xbfc6452ea4d2f9c9
// 0.692326
0x3fe62788cee7f567
// 0.484449
0x3fdf0135bb21590f
// -0.547055
0xbfe18179cae92363
// 0.084638
0x3fb5aad32b95ee97
// -0.343665
0xbfd5fe9a2a971648
// -0.797343
0xbfe983d54a566c09
// 0.624375
0x3fe3fae1cee7f031
// -0.650273
0xbfe4cf0a513ae832
// -1.151119
0xbff26afbcc2e0973
// -1.004242
0xbff0116024bebcbb
// -1.243463
0xbff3e539ec4b45a7
// 0.533702
0x3fe1141626f60241
// -0.200939
0xbfc9b860db5658a9
// -1.170179
0xbff2b90d8db1cc34
// 0.432628
0x3fdbb02f1335163d
// 0.177194
0x3fc6ae49b83d69b4
// 0.276979
0x3fd1ba042cd2c5ab
// -0.117636
0xbfbe1d5ca466df85
// 0.431909
0x3fdba466b78b3ba1
// 0.094699
0x3fb83e39f7278c86
// -0.887184
0xbfec63cf07d0d81d
// 0.571867
0x3fe24cbb2086ad4e
// -0.078704
0xbfb425f5d145dc81
// 0.561475
0x3fe1f79b1ffea495
// 0.247046
0x3fcf9f32cfe78e19
// -0.171075
0xbfc5e5c9fb66a9eb
// -1.027190
0xbff06f5eefc08f0e
// -0.595121
0xbfe30b3bd5cf730d
// 0.312975
0x3fd407c8b382d0b6
// 0.844432
0x3feb059562dae6c5
// 0.590219
0x3fe2e313d04ba5d7
// 0.455922
0x3fdd2dd41b02ae4b
// -2.021509
0xc0002c0cdad6b404
// 0.945978
0x3fee457403e43c84
// -0.392990
0xbfd926be44354f13
// 0.097190
0x3fb8e175506842a9
// 0.320984
0x3fd48b01d277cc59
// -1.163999
0xbff29fbd331b6294
// 1.256727
0x3ff41b8de1521368
// 1.885235
0x3ffe29ec4b6a54a4
// -0.391718
0xbfd911e808aecf5d
// 0.398626
0x3fd98317ca833afd
// -1.170556
0xbff2ba98f808c200
// 0.146972
0x3fc2cffdd3959390
// 0.872258
0x3febe98a145e337e
// 0.798093
0x3fe989f9f22516c1
// 0.216796
0x3fcbbff90adaad56
// 0.931629
0x3fedcfe6fe77a2b8
// 1.400970
0x3ff66a6002245ac1
// -0.646253
0xbfe4ae1a4d47a906
// 0.130761
0x3fc0bcc4f0ecba47
// 0.926996
0x3feda9f2bb8c8c34
// -1.332325
0xbff55133ec1b8572
// 0.161132
0x3fc49ff8acce4eed
// 0.267825
0x3fd1240a892de412
// -1.169964
0xbff2b82c904cbd43
// -0.131690
0xbfc0db39191ac220
// 0.355000
0x3fd6b853f910772f
// -1.455940
0xbff74b87f7d98d9b
// 0.215088
0x3fcb8804494d37f6
// -0.416629
0xbfdaaa0cec2a8135
// 2.552314
0x40046b23c8a17de8
// -0.148139
0xbfc2f63bc35a7507
// -0.061910
0xbfafb2b16dfe37d9
// 1.971133
0x3fff89c2df1a846a
// 0.609440
0x3fe380887f2b6543
// -0.392193
0xbfd919b06bf047d8
// -0.297496
0xbfd30a2c3ed85252
// -0.087342
0xbfb65c1297115bd2
// 0.042671
0x3fa5d8ff043a09cd
// 2.104092
0x4000d52e35891659
// -0.132587
0xbfc0f89f6e9946f0
// 0.101833
0x3fba11bfe14c9682
// 0.261865
0x3fd0c263ab139698
// -1.075224
0xbff1341e500ee40a
// -1.819020
0xbffd1ab50748d311
// 0.080063
0x3fb47f03e185fa13
// -0.897530
0xbfecb891a05597ca
// -1.764076
0xbffc39a7b4b95aa2
// -0.709456
0xbfe6b3dc83b2082c
// -0.206341
0xbfca6964573aa25b
// 0.324747
0x3fd4c8a91a0b3f12
// -1.004527
0xbff0128afad3effb
// 0.043461
0x3fa6408593d42d9a
// -0.603422
0xbfe34f3c55d8e2da
// -0.047375
0xbfa84187f1186311
// 2.766008
0x400620c8c065a38f
// -0.199130
0xbfc97d18476e7744
// 0.574960
0x3fe2661191d785b2
// -1.303529
0xbff4db40efe6bf97
// 1.252003
0x3ff40834968ab78b
// 1.023607
0x3ff060b19dc3c282
// 1.121515
0x3ff1f1b9ccab7a75
// -1.702770
0xbffb3e8bf56d96f2
// -0.200954
0xbfc9b8d985d4003c
// 0.577675
0x3fe27c4fc9101891
// -0.768667
0xbfe898ec87727e36
// -0.423557
0xbfdb1b8ea150239c
// 0.302140
0x3fd35641fb892792
// 0.969931
0x3fef09ac0a53586a
// 1.028069
0x3ff072f8fcf9bd3d
// 0.469475
0x3fde0be289b41c3b
// -0.894296
0xbfec9e1224500603
// 0.743941
0x3fe7ce5e08ab9d57
// -1.632494
0xbffa1eb28419980d
// 1.780551
0x3ffc7d23565fbff9
// 0.028156
0x3f9cd4d19bef37cf
// -1.573614
0xbff92d859621181d
// 0.975172
0x3fef349b49ca6c50
// 0.898281
0x3fecbeb8152f43fc
// 1.725924
0x3ffb9d625d1b0a37
// -1.194486
0xbff31c9dcdcb52ef
// 0.053978
0x3faba310450eab90
// -1.302649
0xbff4d7a6facf6f75
// 1.015055
0x3ff03daa2dd45d3c
// 1.892682
0x3ffe486cb45ee7a0
// -0.686480
0xbfe5f7a54304e1dd
// 0.720867
0x3fe7115891447acf
// -1.662034
0xbffa97b0fc58dc51
// 1.536524
0x3ff89599cfbd660e
// 0.704890
0x3fe68e74e80bbaa4
// -0.622870
0xbfe3ee8c24f62401
// 0.664386
0x3fe542a56e50ab96
// -1.661507
0xbffa95883f403baa
// 0.266999
0x3fd11683a57ded77
// 0.343106
0x3fd5f57375150fd8
// -1.434818
0xbff6f503e6e4f4f2
// -1.675793
0xbffad00c81040ae1
// 0.468676
0x3fddfec7a87a50ae
// 1.618443
0x3ff9e52411b0f681
// 0.616406
0x3fe3b9998f95b044
// -2.721910
0xc005c678d62c7edb
// -0.096007
0xbfb893e9c1444db8
// -1.213863
0xbff36bfb9d05fb96
// -1.557251
0xbff8ea7fab4c3f3c
// -1.790495
0xbffca5ddbc750c16
// -0.098268
0xbfb92818d6781289
// -0.084365
0xbfb598f2c2793fb6
// -0.940522
0xbfee18c106b285db
// 0.031567
0x3fa0299739e1ce5c
// -0.244852
0xbfcf5752f9d8026f
// 0.860829
0x3feb8be86deab741
// 1.451967
0x3ff73b4182549bd6
// -0.405878
0xbfd9f9e6492d096f
// -0.535251
0xbfe120c5b5bd58e2
// -0.429442
0xbfdb7bf956ec5674
// -1.235351
0xbff3c3ff07210191
// 0.480201
0x3fdebb9b700f269a
// -0.178620
0xbfc6dd0666e06e00
// -0.191338
0xbfc87dbf5bf7e834
// -0.408729
0xbfda289f7d26381e
// 0.173887
0x3fc641f14c55ac6d
// -1.843278
0xbffd7e111e3526a1
// -1.392580
0xbff648017596c0dd
// -0.001781
0xbf5d2e60e63984f3
// -0.593029
0xbfe2fa18c624b212
// -0.536947
0xbfe12eabd33e9917
// -0.096858
0xbfb8cba8ebb7c89d
// 1.737095
0x3ffbcb23c8c0aae5
// -0.288399
0xbfd27520f9801ba6
// 1.158473
0x3ff2891b545f4637
// -1.989434
0xbfffd4b8f92b07b6
// 0.106163
0x3fbb2d82e267b9e8
// -0.414173
0xbfda81cff95e1b79
// -1.839830
0xbffd6ff1e81e5d17
// -0.168047
0xbfc58292fb2ea89d
// -1.384072
0xbff625286f809ee3
// -1.502155
0xbff808d3aedbf275
// 1.598372
0x3ff992eec3fa02dd
// 0.226098
0x3fccf0c5571bc41c
// 0.286619
0x3fd257f53fc85098
// 1.939450
0x3fff07fc7c5ea519
// 1.372158
0x3ff5f45b899fbb57
// 0.636439
0x3fe45db5868f6986
// 0.357524
0x3fd6e1ae16681e18
// -0.056032
0xbfacb03334974378
// 0.898497
0x3fecc07cf2a97e70
// -0.874705
0xbfebfd962bcb1ff0

@ -0,0 +1,12 @@
H
5
// 4
0x0004
// 2
0x0002
// 4
0x0004
// 5
0x0005
// 300
0x012C

@ -0,0 +1,10 @@
D
4
// 1.938630
0x3fff04a1186e0d40
// 1.365581
0x3ff5d96b18cad0ce
// 2.461608
0x4003b15fb00f282f
// -3.785585
0xc00e48e0b70a2dcf

@ -13,6 +13,7 @@ a double precision computation.
*/ */
#define REL_ERROR (6.0e-3) #define REL_ERROR (6.0e-3)
#define REL_ERROR_ACCUMULATE (7.0e-3)
#define REL_KULLBACK_ERROR (5.0e-3) #define REL_KULLBACK_ERROR (5.0e-3)
#define ABS_KULLBACK_ERROR (5.0e-3) #define ABS_KULLBACK_ERROR (5.0e-3)
@ -464,6 +465,25 @@ a double precision computation.
} }
void StatsTestsF16::test_accumulate_f16()
{
const float16_t *inp = inputA.ptr();
const int16_t *dimsp = dims.ptr();
float16_t *outp = output.ptr();
for(int i=0;i < this->nbPatterns; i++)
{
arm_accumulate_f16(inp,dimsp[i+1],outp);
outp++;
}
ASSERT_SNR(ref,output,(float16_t)SNR_THRESHOLD);
ASSERT_REL_ERROR(ref,output,REL_ERROR_ACCUMULATE);
}
void StatsTestsF16::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr) void StatsTestsF16::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
{ {
(void)paramsArgs; (void)paramsArgs;
@ -1105,6 +1125,20 @@ a double precision computation.
refOffset = 3; refOffset = 3;
} }
break; break;
case StatsTestsF16::TEST_ACCUMULATE_F16_53:
{
inputA.reload(StatsTestsF16::INPUT_ACCUMULATE_F16_ID,mgr);
ref.reload(StatsTestsF16::REF_ACCUMULATE_F16_ID,mgr);
dims.reload(StatsTestsF16::INPUT_ACCUMULATE_CONFIG_S16_ID,mgr);
output.create(ref.nbSamples(),StatsTestsF16::OUT_F16_ID,mgr);
const int16_t *dimsp = dims.ptr();
this->nbPatterns=dimsp[0];
}
break;
} }
} }

@ -459,6 +459,25 @@ a double precision computation.
} }
void StatsTestsF32::test_accumulate_f32()
{
const float32_t *inp = inputA.ptr();
const int16_t *dimsp = dims.ptr();
float32_t *outp = output.ptr();
for(int i=0;i < this->nbPatterns; i++)
{
arm_accumulate_f32(inp,dimsp[i+1],outp);
outp++;
}
ASSERT_SNR(ref,output,(float32_t)SNR_THRESHOLD);
ASSERT_REL_ERROR(ref,output,REL_ERROR);
}
void StatsTestsF32::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr) void StatsTestsF32::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
{ {
@ -1102,6 +1121,20 @@ a double precision computation.
} }
break; break;
case StatsTestsF32::TEST_ACCUMULATE_F32_53:
{
inputA.reload(StatsTestsF32::INPUT_ACCUMULATE_F32_ID,mgr);
ref.reload(StatsTestsF32::REF_ACCUMULATE_F32_ID,mgr);
dims.reload(StatsTestsF32::INPUT_ACCUMULATE_CONFIG_S16_ID,mgr);
output.create(ref.nbSamples(),StatsTestsF32::OUT_F32_ID,mgr);
const int16_t *dimsp = dims.ptr();
this->nbPatterns=dimsp[0];
}
break;
} }

@ -462,6 +462,25 @@ a double precision computation.
} }
void StatsTestsF64::test_accumulate_f64()
{
const float64_t *inp = inputA.ptr();
const int16_t *dimsp = dims.ptr();
float64_t *outp = output.ptr();
for(int i=0;i < this->nbPatterns; i++)
{
arm_accumulate_f64(inp,dimsp[i+1],outp);
outp++;
}
ASSERT_SNR(ref,output,(float64_t)SNR_THRESHOLD);
ASSERT_REL_ERROR(ref,output,REL_ERROR);
}
void StatsTestsF64::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr) void StatsTestsF64::setUp(Testing::testID_t id,std::vector<Testing::param_t>& paramsArgs,Client::PatternMgr *mgr)
{ {
(void)paramsArgs; (void)paramsArgs;
@ -1105,6 +1124,20 @@ a double precision computation.
} }
break; break;
case StatsTestsF64::TEST_ACCUMULATE_F64_53:
{
inputA.reload(StatsTestsF64::INPUT_ACCUMULATE_F64_ID,mgr);
ref.reload(StatsTestsF64::REF_ACCUMULATE_F64_ID,mgr);
dims.reload(StatsTestsF64::INPUT_ACCUMULATE_CONFIG_S16_ID,mgr);
output.create(ref.nbSamples(),StatsTestsF64::OUT_F64_ID,mgr);
const int16_t *dimsp = dims.ptr();
this->nbPatterns=dimsp[0];
}
break;
} }

@ -56,6 +56,10 @@ group Root {
Pattern MSE_F64_ID : MSEVals28_f64.txt Pattern MSE_F64_ID : MSEVals28_f64.txt
Pattern INPUT_ACCUMULATE_F64_ID : InputAccumulate1_f64.txt
Pattern INPUT_ACCUMULATE_CONFIG_S16_ID : InputAccumulateConfig1_s16.txt
Pattern REF_ACCUMULATE_F64_ID : RefAccumulate1_f64.txt
Output OUT_F64_ID : Output Output OUT_F64_ID : Output
Output OUT_S16_ID : Index Output OUT_S16_ID : Index
Output TMP_F64_ID : Temp Output TMP_F64_ID : Temp
@ -129,7 +133,7 @@ group Root {
Test nb=2n arm_mse_f64:test_mse_f64 Test nb=2n arm_mse_f64:test_mse_f64
Test nb=2n+1 arm_mse_f64:test_mse_f64 Test nb=2n+1 arm_mse_f64:test_mse_f64
Test long arm_mse_f64:test_mse_f64 Test long arm_mse_f64:test_mse_f64
Test combined arm_accumulate_f64:test_accumulate_f64
} }
@ -180,6 +184,9 @@ group Root {
Pattern MSE_F32_ID : MSEVals28_f32.txt Pattern MSE_F32_ID : MSEVals28_f32.txt
Pattern INPUT_ACCUMULATE_F32_ID : InputAccumulate1_f32.txt
Pattern INPUT_ACCUMULATE_CONFIG_S16_ID : InputAccumulateConfig1_s16.txt
Pattern REF_ACCUMULATE_F32_ID : RefAccumulate1_f32.txt
Output OUT_F32_ID : Output Output OUT_F32_ID : Output
Output OUT_S16_ID : Index Output OUT_S16_ID : Index
@ -254,7 +261,7 @@ group Root {
Test nb=4n arm_mse_f32:test_mse_f32 Test nb=4n arm_mse_f32:test_mse_f32
Test nb=4n+1 arm_mse_f32:test_mse_f32 Test nb=4n+1 arm_mse_f32:test_mse_f32
Test long arm_mse_f32:test_mse_f32 Test long arm_mse_f32:test_mse_f32
Test combined arm_accumulate_f32:test_accumulate_f32
} }

@ -54,6 +54,10 @@ group Root {
Pattern MSE_F16_ID : MSEVals28_f16.txt Pattern MSE_F16_ID : MSEVals28_f16.txt
Pattern INPUT_ACCUMULATE_F16_ID : InputAccumulate1_f16.txt
Pattern INPUT_ACCUMULATE_CONFIG_S16_ID : InputAccumulateConfig1_s16.txt
Pattern REF_ACCUMULATE_F16_ID : RefAccumulate1_f16.txt
Output OUT_F16_ID : Output Output OUT_F16_ID : Output
Output OUT_S16_ID : Index Output OUT_S16_ID : Index
Output TMP_F16_ID : Temp Output TMP_F16_ID : Temp
@ -127,6 +131,7 @@ group Root {
Test nb=8n arm_mse_f16:test_mse_f16 Test nb=8n arm_mse_f16:test_mse_f16
Test nb=8n+1 arm_mse_f16:test_mse_f16 Test nb=8n+1 arm_mse_f16:test_mse_f16
Test long arm_mse_f16:test_mse_f16 Test long arm_mse_f16:test_mse_f16
Test combined arm_accumulate_f16:test_accumulate_f16
} }
} }
} }

Loading…
Cancel
Save