Takuya Urakawa
/
calcSpeedBenchMark
speed benchmark
Diff: main.cpp
- Revision:
- 0:fb2a7afed608
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Jan 09 18:30:45 2014 +0000 @@ -0,0 +1,99 @@ +#include "mbed.h" + +/* + Benchmark test script +*/ + +/////////////////////////////////////////////////// +#define lOOPMACRO(label,symbol) t.reset();\ + t.start();\ + for(i=0;i<REPEAT;i++){\ + (label##_z) = (label##_y) symbol (label##_x);\ + }\ + (label##_result) = t.read_us();\ + t.stop();\ + pc.printf( #label ": %d us ",(label##_result)-overhead);\ + pc.printf("(%f us)\n",(float)((label##_result)-overhead) / (float)REPEAT); + +/////////////////////////////////////////////////// + +const uint32_t REPEAT = 1000000; + +Serial pc(USBTX,USBRX); +Timer t; + +volatile int8_t i8_x = 12; +volatile int8_t i8_y = 34; +volatile int8_t i8_z; + +volatile int16_t i16_x = 12; +volatile int16_t i16_y = 34; +volatile int16_t i16_z; + +volatile int32_t i32_x = 12345; +volatile int32_t i32_y = 67890; +volatile int32_t i32_z; + +volatile int64_t i64_x = 123456; +volatile int64_t i64_y = 789011; +volatile int64_t i64_z; + +volatile float f_x = 1.234567; +volatile float f_y = 2.345678; +volatile float f_z; + +volatile double d_x = 1.23456789; +volatile double d_y = 2.34567890; +volatile double d_z; + +int main() { + uint32_t i,overhead,i8_result,i16_result,i32_result,i64_result,f_result,d_result; + pc.printf("\n\nBenchMark TEST START\n\n // All calcurates repeat %d times\n\n",REPEAT); + + // overhead + t.reset(); + t.start(); + for(i=0;i<REPEAT;i++){ + } + overhead = t.read_us(); + t.stop(); + pc.printf("Overhead: %d us\n",overhead); + + pc.printf("\nADD\n\n"); + + lOOPMACRO(i8,+); + lOOPMACRO(i16,+); + lOOPMACRO(i32,+); + lOOPMACRO(i64,+); + lOOPMACRO(f,+); + lOOPMACRO(d,+); + + pc.printf("\nSUB\n\n"); + + lOOPMACRO(i8,-); + lOOPMACRO(i16,-); + lOOPMACRO(i32,-); + lOOPMACRO(i64,-); + lOOPMACRO(f,-); + lOOPMACRO(d,-); + + pc.printf("\nMULTI\n\n"); + + lOOPMACRO(i8,*); + lOOPMACRO(i16,*); + lOOPMACRO(i32,*); + lOOPMACRO(i64,*); + lOOPMACRO(f,*); + lOOPMACRO(d,*); + + pc.printf("\nDIV\n\n"); + + lOOPMACRO(i8,/); + lOOPMACRO(i16,/); + lOOPMACRO(i32,/); + lOOPMACRO(i64,/); + lOOPMACRO(f,/); + lOOPMACRO(d,/); + + pc.printf("\nDONE\n"); +}