VC++ BitBltとメモリ内ScrollDCの速度 【やってみた】


メモリ内から画面へのBitBltとメモリ内のScrollDCの速度を測定してみた。なお速度測定には、Read Time Stamp Counterを使っている。

ダブルバッファリングを使って描画する際には、よくメモリ内デバイスコンテキストから画面のデバイスコンテキストへのBitBltを使う。また、そのような状況でスクロールを行なう時メモリ内デバイスコンテキストでScrollDCを使う。いくつかのマシンでこのような時のRead Time Stamp Counterを測定してみた。

スポンサーリンク

Intel Core 2 Duoマシン

CPUがIntel Core 2 Duo 2.40GHz、ビデオがNVIDIA GeForce 7600GS 256MBというもの。

平均的なクロック数

1回あたりの時間(ミリ秒)

ということで現代の平均的デスクトップマシンでは、BitBlt及びScrollDCはかなり軽い動作であることがわかる。なお、ScrollDCは移動幅をランダムに変えて測定したのだが、その時のクロック数との関係は下の図の通り。この通り相関はなくほぼ一定であることがわかる。

scrolldc1.gif
 

IBM ThinkPad A22m

CPUがIntel Pentium III 900MHz、ビデオはATI Rage(TM) Mobility 128というもの。

平均的なクロック数

1回あたりの時間(ミリ秒)

二昔かそれ以上前のノートであるが、BitBlt・ScrollDCともにわりと負荷のかかる動作であることがわかる。移動幅とクロックの関係では、相関がみられ幅が大きいほどクロック数は小さくなる。移動幅が多いほど、コピーする量が少なくなるためであると考えられる。

scrolldc2.gif
 

VMWare

Intel Core 2 DuoマシンのVMWareで測定したもの。

平均的なクロック数

1回あたりの時間(ミリ秒)

A22mのようにScrollDCの方BitBltより軽い。負荷については、同じマシンではあるがネイティブ動作の方が明らかに速い。グラフィックカードの性能を生かせるかどうかというところなのでしょうか。移動幅とクロックの関係では、相関がみられ幅が大きいほどクロック数は小さくなる。

scrolldc3.gif
 

Celeronマシン

CPUがIntel Celeron 2.66GHz、ビデオがRadeon 9200 Pro(128MB)というもの。

平均的なクロック数

1回あたりの時間(ミリ秒)

一昔前のデスクトップといったところ。ビデオカードを挿しているためわりと速度が出ている。移動幅とクロックの関係では、特に相関はないことがわかる。

scrolldc4.gif
 

IBM ThinkPad X40

CPUがIntel Pentium M 1.3GHz、ビデオはオンボード(Intel 855GME)というもの。

平均的なクロック数

1回あたりの時間(ミリ秒)

移動幅とクロック数の関係。相関が見られる。

scrolldc5.gif

おそらくGPUやVRAMの恩恵を受けれる場合、BitBltやScrollDCは高速かつ転送サイズなどにあまり影響されなくなるような感じがする。ここらへんの描画速度については、他の人も色々実験(Google:BitBlt 高速)を行っているようですね。

一応、使用したアプリケーションを置いておきます。WTLで作ってます。

スポンサーリンク
カテゴリー: やってみた   パーマリンク

コメントは受け付けていません。