2006/02/18(土)「HSPが遅い」って書いたのは……
記事「HSPを使う理由」で、「動作が遅い」って書いた理由です。
というか、「動作が遅い」ってイメージがついちゃってる理由です。
ツールについて不向きなのに、ついHSPで書き始めてしまうのは
HSPの手軽さがすばらしいからだと思う。ただ、速度が遅い。
あらかじめ断っておくと、これは「不向きである」ことに目をつむった上での話です。
たとえば(というか最近思ったこと)こんな要求。
「ファイル転送ツールを書くことにする。
誤り検知機能を実装するに当たって、データのCRC32を算出したい。」
条件は、とりあえず。
「メモリに格納された64MBのランダムな数列からCRC32を算出する」
んで、いくつか書いてみて、実行時間の比較が以下。
素直にHSP3 : 6分45秒104
#defcfunc crc32 var buf,int len crc = $FFFFFFFF repeat len crc = crc ^ peek(buf,cnt) repeat 8 if crc&1 { crc = crc >> 1 & $7FFFFFFF ^ 0xEDB88320 } else { crc = crc >> 1 & $7FFFFFFF } loop loop return crc ^ $FFFFFFFF
遅いからテーブル : 1分13秒592
#defcfunc crc32 var buf,int len dim crctable, 256 ;// 参照用テーブル repeat 256 : c = cnt repeat 8 if c&1 { c = c >> 1 & 0x7FFFFFFF ^ 0xEDB88320 } else { c = c >> 1 & 0x7FFFFFFF } loop crctable.cnt = c loop crc = $FFFFFFFF repeat len crc = crc >> 8 & $FFFFFF ^ crctable(crc^peek(buf,cnt)&0xff) loop return crc ^ $FFFFFFFF
Cで書いてマシン語 : 4秒541
#defcfunc crc32 var data, int len xdim func,13 func.$0 = $33ec8b55,$ffc883d2,$0f084d8b,$33110cb6 func.$4 = $a8c933c1,$d1097401,$832035e8,$02ebedb8 func.$8 = $8341e8d1,$eb7208f9,$0c553b42,$f083da72 func.$C = $00c35dff prm = varptr(data),len return callfunc(prm,varptr(func),2)
マシン語は http://dream.freespace.jp/perl-bin/puma/lng/joyful.cgi?print+log4/05040003.txt の no.4 からお借りしております。
マシン語のさらにテーブル版 : 0秒191
;// 2/20 9:18修正。 #defcfunc crc32 var data, int len, int crc xdim func,25 func. 0 = $81EC8B55,$000400EC,$6AC93300,$5AC18B08,$097401A8 func. 5 = $2035E8D1,$EBEDB883,$4AE8D102,$8489EE75,$FFFC008D func.10 = $F98141FF,$00000100,$458BD97C,$39C93308,$D0F7104D func.15 = $8B56207E,$B60F0C55,$B60F1114,$8BD633F0,$FC009594 func.20 = $E8C1FFFF,$41C23308,$7C104D3B,$D0F75EE2,$000CC2C9 prm = crc, varptr(data), len return callfunc(prm,varptr(func),3)
あらかじめ(でもない)断りを入れさせて貰うと。
まぁ、遅いって言ったって、必要十分の速度が出ればいいことぐらいはわかっているし、
どうしても速度が必要な場合にはこうやってマシン語を組めばいいだけのことなので、
実際は問題にはならないんだけど。
ただ、「遅い」って書いたのはどういう理由かってのを明らかにするために、
やったこととして書いておくだけなので悪しからず。
ゲーム作りでも、もしかしたら、
ビデオメモリのポインタを得て、自分でグリグリしたい。
とか言う要求が出れば、遅すぎて実用不可能なのは確か、だろうなぁ。
# まぁ、HSPユーザの中からそんな要求は出ないので、あろうが……。
# 自分もこれっきりだし。
はい、また「だからなんなの」という記事を書いてしまいましたとさ。