本研究の目的はハードウェアのSingle Instruction Multiple Data (SIMD)長実装を前提としない並列コードの生成手法の開発と、その最適化をユーザレベルで簡単に記述できる並列言語仕様の提案である。本研究ではSIMDコード生成のために中間形式としてオープンソースコンパイラのLLVMの中間形式をベースにループ文の実行範囲やメモリ参照などを表現する中間形式を設計した。また、OpenMPの言語仕様を拡張し、SIMD命令セットで明示的に並列化されたコードをOpenMP SIMDループ文で呼び出す拡張構文の提案を行っている。 設計したSIMDコードの生成手法をField-Programmable Gate Array (FPGA)デバイスに適用することで有効性を確認した。FPGAは1次元の連続したデータ配列(ストリーム)を入力とし、同様に連続した出力ストリームを生成するため、可変長のSIMDハードウェアとして考えることができる。C言語のループ文と独自に導入した指示文の記述から提案手法の中間形式を生成し、FPGA向けのDomain Specific Language (DSL)コード生成と最適化を行った。FPGA向けの最適化とはメモリバンド幅を有効活用するための入出力データ幅の拡大(ベクトル化)と計算イテレーションの展開とカスケード接続によるパイプライン化(ループアンローリング)である。 最終年度はループ文の変換による並列化に加えて、OpenMPのタスクを利用したコード生成についても検討を行った。SIMD化された計算コードをOpenMPタスク指示文でタスク化し、依存関係を記述することで、独立したタスクが並列に実行されるだけでなく、細粒度のタスク同士を統合して並列度を向上させる仕組みについて研究開発を行った。
|