旧DEC Motion Video Instruction Extensions for Alpha MIPS MIPS 3D SUN Visual Instruction Set Motorola Velocity Engine (AltiVec) Intel MMX,SSEなどがある。しかしながら、これらの拡張命令を既存のコンパイラが活用する場面は非常に限定されており、多くの場合はプログラムの開発者が拡張命令の使用を明示し、拡張命令を利用しやすいようにプログラムを書く必要がある。
本小テーマでは、SIMD型のマルチメディア向け拡張命令を活用するようにプログラムを変換する方式を開発し、並列化コンパイラの共通インフラストラクチャの一部として利用可能な形にすることを目標とする。
近年のマイクロプロセッサの持つSIMD型拡張命令に関する技術文書を入手し、 基本的特徴などのほか、単にSIMD型命令であるこ と以外に特徴を持つような特殊な命令についてもまとめた。(文献1参照)
以下に調査を行ったSIMD型拡張命令セットの名称と、それの実装されている プロセッサの例を示す。
SUN: VIS(TM) Instruction Set UltraSPARC-I以降 Compaq (DEC) Motion Video Instructions Alpha 21264 Intel: MMX(R)テクノロジ (MMX Technology) MMXテクノロジ対応Pentium Processor, Pentium II 以降 Intel: ストリーミングSIMD拡張命令 (Streaming SIMD Extensions) Pentium III 以降 Intel: Streaming SIMD Extentions 2 Pentium 4 AMD: 3DNow!(TM)テクノロジ K6-2以降 AMD: Enchanced 3DNow!(TM) Technology Athlon, Duron Motorola: AltiVec(TM) Technology MPC7400, MPC7410 (PowerPC G4) 日立: 浮動小数点グラフィック強化命令 SH7750 MIPS: MIPS V ISA Extension (現MIPS_64の一部) R5000 MIPS: MDMX (Mips Digital Media Extension) MIPS64 5Kc MIPS: MIPS-3D(TM) ASE (Application Specific Extension) MIPS64 R20K, MIPS64 20Kc
SIMD型マルチメディア向け拡張命令セットの中には、飽和演算や丸めつき乗算 など、複合した演算、サイズを意識した演算を行う命令がある。これらを活用 するには、従来のような、高級言語の演算子とそれに対応する命令といった、 単純化された命令記述では困難である。
また、並列度は低いがコストも小さいというSIMD型命令の特長を生かすために は、通常命令を含めて命令スケジューリングを行う必要があり、通常命令も含 めた依存関係を詳細に解析する必要がある。
そのため、通常命令も含めて、命令の意味の詳細な記述を行った。具体的には、 次のアーキテクチャの命令セットについて、フラグ、オーバーフロー時の処理 などを含めた詳細な記述を行った。
三つの最適化方法:
また、コンパイラのパス中での、これらの最適化の置き場所として、低水準中 間表現を使った最適化の最後である以下の2.nの場所に置くこととした。
1. 仮想レジスタ割付
2.1 低水準最適化1
2.2 低水準最適化2
:
2.n-1 低水準最適化n-1
2.n SIMD最適化
論理演算を使ったif変換
(中略)
SIMDレジスタ割り当て
3. フレーム割り当て
4. パターンマッチング
5. 物理レジスタ割当
6. マシン語レベルでの最適化
7. アセンブラコード生成
本小テーマで現在用いている中間表現は、インフラストラクチャ基盤部で用いている低水準中間表現(LIR)に不足する機能を追加しており、実装も異なるため、SIR(S-expression Intermediate Representation)と呼ばれている。そのため、データ形式の変換を行って、インフラストラクチャ基盤部と接続を行っている。
SIRの設計は、命令の意味をより正確に表現するこ とを目標としており、最適化で扱いやすいことを目指した、基盤部の低水準中 間表現とは相違がある。相違点のうち、多機種への対応や、より進んだ最適化 のために、基盤部でも必要になると思われるものについて、指摘や提案を行っ てきた。
具体的には、
汎整数拡張(integral promotion)を施した場合と同等の演算結果を、integralタイプ
より狭いデータサイズの演算器やレジスタを用いて処理できるようにするための、
プログラムコード解析法を開発した。
この解析の結果を用いることにより、コード生成系は最適な処理データ幅を
選択することが可能となり、処理の並列度の向上、無駄なサイズ変換命令の
挿入の省略、より高度な処理内容をもつ命令へのマッチングが可能となり、
実行性能の向上を図ることができる。
現在、これはLIR最適化の一部としてプロトタイプ実装が完了している。
2で提案した最適化方式の予備評価を行い、特定のマルチメディアプログラム において5倍以上の速度向上を確認した。