[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[WitchTech 00404] Re: 実行時間計測



鈴木です

narunaru> 詳細は、こばやしさんが [WitchTech 00208] でお書きになっているドキュメント
narunaru> を見てください。
こんなページがあったんですか。
掛け算を3,4クロックでかたずけたりするところを見ると、演算系に
ロジックをつぎ込んでますね。

# WitchTechのアーカイブ検索でV30で 00208が引っかからなかったのは なぜ?

COBOL実行するわけじゃないから10進系の命令なんて要らないし、
ビット位置を示すったって
int bm[] = {1, 2, 4, 8 …};
…
if (x and bm[y]) { …
みたいにやるから、test1も不要。
でもビットフィールドが落ちたのは、ちょっと残念です。

narunaru> # しかし静鎖なんて訳語があるのか ... 
英語では何て言うんでしたっけ?
Cコンパイラはenterやleaveを活用できないから、不要だったかも。


narunaru>  > V33は、1クロック1バスサイクルのCPUで、スワンのに非常に近い
narunaru> 
narunaru> # どうでも良いんですが、手元の雑誌記事 (プロセッサ 1989/7 月号) では
narunaru> 2ck / 1bus cycle となっています。
御意。 家に帰って本を見たら、そうでした。干支がひとまわりして
しまうと、1クロックでできるようになるんですねえ。

というわけで.186をつけて実験してみると、ご指摘の通り
2ビット以上は shl ax,n は同じ実行時間でした。

でも、命令の配置(ループヘッドが奇数番地か偶数か)で実行時間が
1クロック違うのが、面白いですね。

プロセッサの命令セットがV30MZだと判ったところで…
蛇足ですが、最後にテストに使ったコードの一部をつけます。

;  tickes[0] = sys_get_tick_count();
	CALL	_sys_get_tick_count
	MOV	[BP-66].W,AX
	MOV	2[BP-66].W,DX
;  for (m = 0; m < 100; m++) /* LSICはこんなコードは吐かない */
	MOV	BX,100
_Y0:
;  for (n = 0; n < 10000; n++)
	MOV	CX,10000
_X0:
; ここに計りたい命令を挿入する
; BX.CXは壊さないでね
	LOOP	_X0
	DEC	BX
	JNZ	_Y0

;  tickes[1] = sys_get_tick_count();
	CALL	_sys_get_tick_count
	MOV	[BP-66+4].W,AX
	MOV	2[BP-66+4].W,DX

……
; そして、tikes[i]とtikes[i-1]の差を求めて表示する。
; 約24tickで1clockに相当する。
; 空のループも計って、差を求めると挿入した命令の実行
; 時間が解る。


-----------------------------------------------------------
鈴木 貢
vsuzuki@cs.uec.ac.jp


ML Archives