diff --git a/Testing/CMakeLists.txt b/Testing/CMakeLists.txt index df2425ab..53396b6b 100644 --- a/Testing/CMakeLists.txt +++ b/Testing/CMakeLists.txt @@ -92,6 +92,7 @@ set(TESTSRC testmain.cpp Source/FullyConnected.cpp Source/FullyConnectedBench.cpp Source/Pooling.cpp + Source/PoolingBench.cpp GeneratedSource/TestDesc.cpp ) diff --git a/Testing/FrameworkSource/Timing.cpp b/Testing/FrameworkSource/Timing.cpp index 15c0cbd3..a5259dfc 100644 --- a/Testing/FrameworkSource/Timing.cpp +++ b/Testing/FrameworkSource/Timing.cpp @@ -104,7 +104,11 @@ void cycleMeasurementStart() SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk; + while(SysTick->VAL == 0); + startCycles = SysTick->VAL; + + #endif diff --git a/Testing/FullBenchmark/NN/Pooling/fullBenchmark.csv b/Testing/FullBenchmark/NN/Pooling/fullBenchmark.csv new file mode 100755 index 00000000..b112da81 --- /dev/null +++ b/Testing/FullBenchmark/NN/Pooling/fullBenchmark.csv @@ -0,0 +1,5 @@ +CATEGORY,NAME,ID,OLDID,NB,CYCLES,OPTIMIZED,HARDFP,FASTMATH,NEON,UNROLL,ROUNDING,PLATFORM,CORE,COMPILER,VERSION +"NN:Pooling","test_avgpool_s8",1,"",10,87558,1,1,1,0,1,0,FVP,ARMCM7_DP,AC6,6120001 +"NN:Pooling","test_avgpool_s8",1,"",20,177505,1,1,1,0,1,0,FVP,ARMCM7_DP,AC6,6120001 +"NN:Pooling","test_avgpool_s8",1,"",100,885034,1,1,1,0,1,0,FVP,ARMCM7_DP,AC6,6120001 +"NN:Pooling","test_avgpool_s8",1,"",200,1772498,1,1,1,0,1,0,FVP,ARMCM7_DP,AC6,6120001 diff --git a/Testing/FullBenchmark/NN/Pooling/regression.csv b/Testing/FullBenchmark/NN/Pooling/regression.csv new file mode 100755 index 00000000..64995dce --- /dev/null +++ b/Testing/FullBenchmark/NN/Pooling/regression.csv @@ -0,0 +1,2 @@ +"ID","OLDID","CATEGORY","NAME","OPTIMIZED","HARDFP","FASTMATH","NEON","UNROLL","ROUNDING","PLATFORM","CORE","COMPILER","VERSION","Regression","MAX" +1,"","NN:Pooling","test_avgpool_s8",1,1,1,0,1,0,"FVP","ARMCM7_DP","AC6",6120001,"-648.9462943071558 + NB * 8864.214500537057",1772498 diff --git a/Testing/GeneratedInclude/PoolingBench_decl.h b/Testing/GeneratedInclude/PoolingBench_decl.h new file mode 100755 index 00000000..f45b3898 --- /dev/null +++ b/Testing/GeneratedInclude/PoolingBench_decl.h @@ -0,0 +1,13 @@ +void test_avgpool_s8(); + +// Pattern IDs +static const int INPUT1_S8_ID=0; +static const int REF1_S8_ID=1; + +// Output IDs +static const int OUTPUT_S8_ID=0; +static const int TEMP_S8_ID=1; +static const int TEMPINPUT_S8_ID=2; + +// Test IDs +static const int TEST_AVGPOOL_S8_1=1; diff --git a/Testing/Include/PoolingBench.h b/Testing/Include/PoolingBench.h new file mode 100755 index 00000000..fb09a56d --- /dev/null +++ b/Testing/Include/PoolingBench.h @@ -0,0 +1,37 @@ +#include "Test.h" +#include "Pattern.h" +class PoolingBench:public Client::Suite + { + public: + PoolingBench(Testing::testID_t id); + void setUp(Testing::testID_t,std::vector& paramsArgs,Client::PatternMgr *mgr); + void tearDown(Testing::testID_t,Client::PatternMgr *mgr); + private: + #include "PoolingBench_decl.h" + + Client::Pattern input; + + Client::LocalPattern tmpInput; + Client::LocalPattern output; + Client::LocalPattern temp; + + // Reference patterns are not loaded when we are in dump mode + Client::RefPattern ref; + + int DIM_IN_X; + int DIM_IN_Y; + int DIM_OUT_X; + int DIM_OUT_Y; + int IN_CHANNEL; + int DIM_FILTER_X; + int DIM_FILTER_Y; + int PAD_WIDTH; + int PAD_HEIGHT; + int STRIDE_X; + int STRIDE_Y; + int ACT_MIN; + int ACT_MAX; + + int repeatNb; + + }; \ No newline at end of file diff --git a/Testing/Source/PoolingBench.cpp b/Testing/Source/PoolingBench.cpp new file mode 100755 index 00000000..9ef4dcea --- /dev/null +++ b/Testing/Source/PoolingBench.cpp @@ -0,0 +1,85 @@ +#include "PoolingBench.h" +#include "Error.h" +#include "arm_nnfunctions.h" +#include "Test.h" + +#include + + + void PoolingBench::test_avgpool_s8() + { + q7_t *tmpin = tmpInput.ptr(); + q7_t *outp = output.ptr(); + q15_t *tempp = temp.ptr(); + + for(int i=0; i < this->repeatNb; i++) + { + arm_avgpool_s8( + DIM_IN_Y, + DIM_IN_X, + DIM_OUT_Y, + DIM_OUT_X, + STRIDE_Y, + STRIDE_X, + DIM_FILTER_Y, + DIM_FILTER_X, + PAD_HEIGHT, + PAD_WIDTH, + ACT_MIN, + ACT_MAX, + IN_CHANNEL, + tmpin, + tempp, + outp); + + } + } + + + void PoolingBench::setUp(Testing::testID_t id,std::vector& paramsArgs,Client::PatternMgr *mgr) + { + + std::vector::iterator it = paramsArgs.begin(); + this->repeatNb = *it; + + switch(id) + { + case PoolingBench::TEST_AVGPOOL_S8_1: + input.reload(PoolingBench::INPUT1_S8_ID,mgr); + ref.reload(PoolingBench::REF1_S8_ID,mgr); + + this->DIM_IN_X= 4; + this->DIM_IN_Y= 2; + this->DIM_OUT_X= 2; + this->DIM_OUT_Y= 1; + this->IN_CHANNEL= 101; + this->DIM_FILTER_X= 2; + this->DIM_FILTER_Y= 2; + this->PAD_WIDTH= 0; + this->PAD_HEIGHT= 0; + this->STRIDE_X= 2; + this->STRIDE_Y= 2; + this->ACT_MIN= -128; + this->ACT_MAX= 127; + + break; + + + } + temp.create(this->DIM_OUT_X * this->IN_CHANNEL,PoolingBench::TEMP_S8_ID,mgr); + + output.create(ref.nbSamples(),PoolingBench::OUTPUT_S8_ID,mgr); + tmpInput.create(input.nbSamples(),PoolingBench::TEMPINPUT_S8_ID,mgr); + + q7_t *tmpin = tmpInput.ptr(); + const q7_t *inp = input.ptr(); + + memcpy(tmpin,inp,input.nbSamples()); + + + } + + void PoolingBench::tearDown(Testing::testID_t id,Client::PatternMgr *mgr) + { + + } diff --git a/Testing/addToDB.py b/Testing/addToDB.py index ea4c9715..580e2139 100755 --- a/Testing/addToDB.py +++ b/Testing/addToDB.py @@ -275,7 +275,7 @@ parser = argparse.ArgumentParser(description='Generate summary benchmarks') parser.add_argument('-f', nargs='?',type = str, default=None, help="Test description file path") parser.add_argument('-b', nargs='?',type = str, default="FullBenchmark", help="Full Benchmark dir path") -parser.add_argument('-e', action='store_true', help="Embedded test") +#parser.add_argument('-e', action='store_true', help="Embedded test") parser.add_argument('-o', nargs='?',type = str, default="bench.db", help="Benchmark database") parser.add_argument('others', nargs=argparse.REMAINDER) diff --git a/Testing/bench.db b/Testing/bench.db index 25570985..ddbeba1b 100755 Binary files a/Testing/bench.db and b/Testing/bench.db differ diff --git a/Testing/currentConfig.csv b/Testing/currentConfig.csv index ca8c4002..08125dc3 100644 --- a/Testing/currentConfig.csv +++ b/Testing/currentConfig.csv @@ -1,2 +1,2 @@ OPTIMIZED,HARDFP,FASTMATH,NEON,UNROLL,ROUNDING,PLATFORM,CORE,COMPILER,VERSION -1,1,1,0,1,0,FVP,ARMCM7_DP,AC6,6120001 +1,1,1,1,1,0,FVP,ARMCA5,AC6,6120001 diff --git a/Testing/desc.txt b/Testing/desc.txt index c5b7ee62..3022d864 100644 --- a/Testing/desc.txt +++ b/Testing/desc.txt @@ -653,10 +653,10 @@ group Root { folder = FullyConnected ParamList { - REPEAT - Summary REPEAT + NB + Summary NB Names "Repetition" - Formula "REPEAT" + Formula "NB" } Pattern INPUT1_S8_ID : TestCase_1_10_4_input_1.txt @@ -676,5 +676,32 @@ group Root { arm_fully_connected_tflite_s8:test_fully_connected_tflite_s8 -> PARAM1_ID } } + + suite Pooling Benchmarks { + class = PoolingBench + folder = Pooling + + ParamList { + NB + Summary NB + Names "Repetition" + Formula "NB" + } + + Pattern INPUT1_S8_ID : Input1.txt + Pattern REF1_S8_ID : Ref1.txt + + Output OUTPUT_S8_ID : Output + Output TEMP_S8_ID : Temp + Output TEMPINPUT_S8_ID : TempInput + + Params PARAM1_ID = { + NB = [10,20,100,200] + } + + Functions { + arm_avgpool_s8 Test 1:test_avgpool_s8 -> PARAM1_ID + } + } } }