はじめてのクロック測定


はじめてのクロック測定

はじめに

ここではVC++6.0を使ったクロック測定のやり方について説明する。
VC++が使えない人ははじめてのVC++を参照のこと。

とにかく測ってみる

測定コード

1000回の空ループを実行するのに何クロックかかるかを計測してみよう。

#include <stdio.h>

int main()
{
	int a;
	__asm{
		rdtsc		//タイムスタンプ・カウンタの値をeaxに読み込む
		mov a,eax		//読み込んだ値を変数aに保存しておく
			
		mov ecx,1000	//ここから測定対象
lp:
		dec ecx
		jnz lp		//ここまで測定対象
			
		rdtsc		//タイムスタンプ・カウンタの値をeaxに読み込む
		sub eax,a		//新しいカウンタの値eaxから、古い値aを引くと、所要クロックがわかる
		mov a,eax		//それを変数aにコピー
	}
	printf("%d\n",a);		//aの値を出力
	return 0;
}

これを実行するとPentiumMでは 1102 と出力される。

測定結果の考察

PentiumMで空ループの測定をして、1102と出力された。
1ループ当たり1clkと少し、という計算だが、半端な102が何を意味するかがわからない。
そこで測定コードのmov ecx,1000 という部分をmov ecx,10000 と変えて再び実行してみる。
すると10102と出力された。
ここから、半端な102はいつも同じで、それを除けば1ループ当たりちょうど1clkだということが見て取れる。

半端な102clkが謎のままだが、ここでは1ループ1clkという結果が得られただけでよしとしよう。


注意点

上のような手法が常に通用するとは限らない。
102という数字も、たまたま一致しただけかもしれない。
なるべく多くのパターンを測定して、よく考えて結論を出さないといけない。

測定コードの改善

色々なものの測り方

レイテンシの測定方法

Menu

About
過去ログ

div命令の
レイテンシ

BBS
アップローダ

最新の4件

2016-01-20 2014-07-08 2012-07-08 2008-06-18

今日の4件

  • counter: 703
  • today: 1
  • yesterday: 0
  • online: 1