自分の過去メモ(2014年ころ)より
- MicroZed (CPU: 666MHz動作)
下のコードにすること (return fvalを追加)で、過度のoptimizationを回避できるようになり、O0 optionでもO2 optionでも同じ結果となった。
計時にはclock_gettime()を用いた。clock_gettime()のtime granularityは2700ns程度のようだ。10000回のループにすることで、granularityの影響を回避した。
float型 > 足し算10000回
static float funcToBeTimed_floatAdd(void)
{
int idx;
float fval = 0.0f;
for(idx=0; idx<kLoopNum; idx++) {
fval = fval + 1.001f;
}
return fval;
}
on MicroZed: 17.1(usec) >> 1回の演算は17.1(nsec)
float型 > 掛け算10000回
static float funcToBeTimed_floatMulti(void)
{
int idx;
float fval = 3.14f;
for(idx=0; idx<kLoopNum; idx++) {
fval = fval * 1.001f;
}
return fval;
}
on MicroZed: 18.2(usec) >> 1回の演算は18.2(nsec)
float型 > 割り算10000回
static float funcToBeTimed_floatDiv(void)
{
int idx;
float fval = 3141590000000.00f;
for(idx=0; idx<kLoopNum; idx++) {
fval = fval / 1.001f;
}
return fval;
}
on MicroZed: 33.2(usec) >> 1回の演算は33.2(nsec)
(追記 2016年1月)
計時のやり方についてStackoverflowでアドバイスをいただいたがリンク情報を失念した。