マルチメディア向き並列化に関する研究

ソニー(株)インフォメーション&ネットワーク研究所(平成12年度)
ソニー(株)ネットワーク&ソフトウエアテクノロジーセンター(平成13年度)
電気通信大学情報工学科 渡辺研究室(平成14年度〜)

1. 目的

本小テーマで扱うマルチメディア最適化は、命令レベル並列化に属する。マルチメディアアプリケーションでは、PCM音声や、画像のビットマップイメージのように、比較的サイズの小さい均質なデータが多数連続しているものを扱うことが多い。そのため、近年のプロセッサでは、SIMD型のマルチメディア向け拡張命令を持ち、一命令で複数のデータを扱うようにして高速化を達成しようとしている。拡張命令の例としては、
旧DEC	Motion Video Instruction Extensions for Alpha
MIPS	MIPS 3D
SUN	Visual Instruction Set
Motorola Velocity Engine (AltiVec)
Intel	MMX,SSE
などがある。しかしながら、これらの拡張命令を既存のコンパイラが活用する場面は非常に限定されており、多くの場合はプログラムの開発者が拡張命令の使用を明示し、拡張命令を利用しやすいようにプログラムを書く必要がある。

本小テーマでは、SIMD型のマルチメディア向け拡張命令を活用するようにプログラムを変換する方式を開発し、並列化コンパイラの共通インフラストラクチャの一部として利用可能な形にすることを目標とする。

2. 計画概要

3. 方法

SIMD型拡張命令を使った最適化は、従来のベクトル命令を使った最適化と同様にできる部分もあるが、ベクトル命令とは異なる特徴がいくつかある。 そのため、次のような三つの最適化方法を実装することにした。

4. 現在までの成果

  1. 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
    
  2. 命令の意味の詳細な記述

    SIMD型マルチメディア向け拡張命令セットの中には、飽和演算や丸めつき乗算 など、複合した演算、サイズを意識した演算を行う命令がある。これらを活用 するには、従来のような、高級言語の演算子とそれに対応する命令といった、 単純化された命令記述では困難である。

    また、並列度は低いがコストも小さいというSIMD型命令の特長を生かすために は、通常命令を含めて命令スケジューリングを行う必要があり、通常命令も含 めた依存関係を詳細に解析する必要がある。

    そのため、通常命令も含めて、命令の意味の詳細な記述を行った。具体的には、 次のアーキテクチャの命令セットについて、フラグ、オーバーフロー時の処理 などを含めた詳細な記述を行った。

  3. マルチメディア最適化のプロトタイプ実装

    三つの最適化方法:

    を実現しつつ、正しくコード生成を行うために、次のようなフェーズ分けによっ てプロトタイプ実装を行った。

    また、コンパイラのパス中での、これらの最適化の置き場所として、低水準中 間表現を使った最適化の最後である以下の2.nの場所に置くこととした。

      1. 仮想レジスタ割付
      2.1 低水準最適化1
      2.2 低水準最適化2
            :
      2.n-1 低水準最適化n-1
      2.n SIMD最適化
        論理演算を使ったif変換
        (中略)
        SIMDレジスタ割り当て
      3. フレーム割り当て
      4. パターンマッチング
      5. 物理レジスタ割当
      6. マシン語レベルでの最適化
      7. アセンブラコード生成
    

  4. インフラストラクチャ基盤部との接続

    本小テーマで現在用いている中間表現は、インフラストラクチャ基盤部で用いている低水準中間表現(LIR)に不足する機能を追加しており、実装も異なるため、SIR(S-expression Intermediate Representation)と呼ばれている。そのため、データ形式の変換を行って、インフラストラクチャ基盤部と接続を行っている。

  5. LIRへの提案

    SIRの設計は、命令の意味をより正確に表現するこ とを目標としており、最適化で扱いやすいことを目指した、基盤部の低水準中 間表現とは相違がある。相違点のうち、多機種への対応や、より進んだ最適化 のために、基盤部でも必要になると思われるものについて、指摘や提案を行っ てきた。

    具体的には、

    が挙げられる。これらは、今後のLIRに取り入れられていく予定である。

  6. データサイズ推論

    汎整数拡張(integral promotion)を施した場合と同等の演算結果を、integralタイプ より狭いデータサイズの演算器やレジスタを用いて処理できるようにするための、 プログラムコード解析法を開発した。 この解析の結果を用いることにより、コード生成系は最適な処理データ幅を 選択することが可能となり、処理の並列度の向上、無駄なサイズ変換命令の 挿入の省略、より高度な処理内容をもつ命令へのマッチングが可能となり、 実行性能の向上を図ることができる。
    現在、これはLIR最適化の一部としてプロトタイプ実装が完了している。

  7. 最適化方式の予備評価

    2で提案した最適化方式の予備評価を行い、特定のマルチメディアプログラム において5倍以上の速度向上を確認した。

5. 参考文献・関連研究