演算子がオーバーロードされた単純な数学ベクトル クラスがあります。オペレーターのタイミング結果を取得したいと考えています。次のコードのタイミングをとることで、+=、-=、*=、および /= の時間を簡単に計ることができます。
Vector sum;
for(size_t i = 0; i<iter; ++i)
sum += RandVector();
cout << sum << endl;
次に、反復乱数ベクトルを生成するのにかかる時間を差し引くことができます。私のテストでは、Vector は 3 次元、iter = 10,000,000 です。
+、-、*、/で同様のことを試みました:
Vector sum;
for(size_t i = 0; i<iter; ++i)
sum = sum + RandVector();
cout << sum << endl;
次に、反復ランダムベクトルを生成して反復割り当てを実行するのにかかる時間を差し引きますが、これは「負の」時間を与え、コンパイラが何らかの形で操作を最適化しているか、何か奇妙なことが起こっていると信じさせます。
Fedora Linux マシンで -O3 を使用して gcc-4.7.2 を使用しています。
ここに私のタイミングコードがあります:
clock_t start, k = clock();
do start = clock();
while(start == k);
F()();
clock_t end = clock();
double time = double(end-start)/double(CLOCKS_PER_SEC);
cout << time - time_iter_rand_v - time_iter_ass;
ここで F は、上記のコードを実行する関数オブジェクトです。time_iter_rand_v は iter ランダム ベクトルの作成にかかる時間であり、time_iter_ass は iter 割り当て操作にかかった時間です。
私の質問は、割り当てやランダムなベクトル生成ではなく、演算子 + 関数だけの正確なタイミングを取得する方法です。