・MMXで半透明(2) : アセンブラ 編 (99/5/18) 前回 C でα合成を試したら平均 8 回/秒 しか計算出来ませんでした。 ならばアセンブラで高速化しよう、という訳で今回は アセンブラを使ってα合成をしてみます。 さてアセンブラで合成の部分を素直に書けば下の様なソースになります。前回の ソースの VOID AlphaBlending() 関数を置き換えて下さい。WinMain() やプロシージャ等の関数は同じ物を使います(したがって今回は それらのソースは載せません)。 やっていること自体は C 版と全く同じなのですがメモリへのアクセスが かなり減りますので C よりは速くなることが予想できます (もっとも最近はキャッシュがあるのであまり変わらないような気もしますが)。 // α合成 アセンブラ版 // // コピー先 = コピー元1 * α + コピー元1 * (1-α)
『8 / 16 / 32bitの整数をまとめて処理できる』というのは発表当時の雑誌に散々解説されていたのでみなさんご存知だと思います. #割にはあんまり流行ってないですけど 命令の説明のためにここだけの記号法ですが, 次のルールを使います. 8 / 16 / 32bit整数をB, W, Dで表します. それらを複数並べた場合は左のほうが上位bitとします. (例) [D1:D0]は上位D1下位D0の32bit整数が2つペアになったもの. m??は??bitメモリ, r32は32bit汎用レジスタを表します. 殆どのMMX命令は第1オペランド (dest) にはMMXレジスタのみ指定でき, 第2オペランド (src) にはMMXレジスタ / メモリを指定できます. シフト命令のみ第2オペランドに即値を使えます.
8.1 はじめに 第8章では、いよいよMMX命令の使って画像処理を高速化する方法について説明したいと思います。 7.6節で述べたように、7.4節で説明したフェードアウトのプログラムと、7.5節で説明したフェードインのプログラムを高速化してみました。 いきなりプログラムの説明をすると大変なので、まずはMMXテクノロジとはどんな技術なのかという事から説明していきます。 既にMMXテクノロジについて理解している方は、8.2~8.5節は読み飛ばして構いません。 8.2 MMXテクノロジとは MMXテクノロジは、画像や音声などのマルチメディア関係の処理を高速化するために生まれた技術です。 加算や減算などの演算を一つずつ行うのではなく、一度に複数の値同士を加算したり減算したりする事で、高速に処理をする事ができます。 この考え方は、Pentium3から搭載されたSSE命令(ストリーミングSIMD拡張命令
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く