QTheora (0.9.0) | 2009-09-09 12:00 |
ビデオデコーダーの実用的な実装においては、処理するデーター量が非常に大きいため、 効率的な実装が不可欠である。
一般にビデオデコーダーの実装では、複数のデーターに対して同一の処理を繰り返すという 処理が多いため、SIMD (Single Instruction Multiple Data) 機能の活用が効果的である。
Intel アーキテクチャー (x86) のプロセッサーでは、SIMD 命令体系として、 MMX, SSE, SSE2, SSE3, SSE4 というテクノロジーが実装されている。
MMX は、64 bit 整数データーを扱う拡張命令で、現在使用されているほとんどのプロセッサー で使用できる。そのため、適用範囲の広い応用で、活用されている。
SSE は、128 bit (32 bit 実数 x 4) のデーターを扱う拡張命令で、Pentium III 以降の プロセッサーで使用できる。実数演算のみを扱うため、整数演算の多いビデオデコーダーでは、 活用範囲が限られる。
SSE2 は、SSE で実数しか扱えなかったものを、整数も扱えるようにした拡張命令で、Pentium 4 以降 のプロセッサーで使用できる。Intel 純正プロセッサーのみでなく、AMD 等互換プロセッサーでも 広く実装されているので、現在では、非常に実用度の高い機能であるといえる。
SSE3 以降のテクノロジーは、Intel の近年の純正プロセッサーに搭載されているもので、インストール ベースを考慮すると、全面的に活用を行うには、適用範囲が限られてしまうかもしれない。
本ライブラリーでは、実用度を鑑み SSE2 相当の命令セットを使用した、SIMD ルーティンの実装を行う。
SIMD 拡張命令の使用方法としては、アセンブリープログラミングが一般的だが、x86 では、アセンブリー 命令の使用に必要なレジスターの数が、8つと少なく、レジスターのやり繰りに非常に苦労する。
そこで、レジスターの割り当てをコンパイラーの最適化アルゴリズムに任せて、コンパイラーの組み込み 関数として、SIMD 命令を使用できるようにしたのが、Compiler Intrinsics である。
コンパイラーの生成コードは、熟達したコーダーの最適化されたコーディングに及ばない部分もある。 が、そのようなコードは、ほぼ解読、保守不能となるため、些少なパフォーマンスロスを気にしなければ、 Compiler Intrinsics は、アセンブリーレベルの最適化コードを記述する有力なツールである。
[ページ情報]
更新日時: 2009-07-14 15:43:01, 更新者: noumiakira
[ライセンス]
クリエイティブ・コモンズ 2.1 表示-継承
[権限]
表示:無制限, 編集:メンバー, 削除/設定:メンバー