今年度は、静的型付き関数型言語であるStandard MLの処理系である、SML#処理系(東北大学電気通信研究所大堀研究室において実装)に対して、NVidia社が製造するグラフィックプロセッサを使用した並列計算環境である、CUDAを活用するための拡張に関する仕様の調査・検討を行った。当初の計画では、このような環境での並列計算の実現に適したデータ構造の実装を行うことにしていたが、言語の並列計算への対応を先行して行うことが効率的であったため、先にこの検討を行った。 検討を行った結果、実装はおおむね以下のようになる: (1) CUDA低レベルAPIのStandard MLへの導入 CUDAでは、メモリ管理、デバイス管理、並列計算制御などといった、低レベルのAPIを提供しており、これらを使用してプログラマは並列計算を行う。これらのライブラリをStandard MLから使用できるようにし、また、必要に応じて特殊な構文を言語に追加することで、Standard MLからグラフィックプロセッサを利用し、MLのデータ構造に対する並列計算を実現する。 (2) データ構造の実装 CUDAを関数型言語から使用する場合に難しい課題に、再帰的データ構造など、ポインタを多数含むデータ構造の取り扱いがある。処理系を拡張するなどして、デバイスへのデータ構造の転送を自動化することにより、低レベルAPIでは難しかった関数型言語のデータ構造への並列計算を容易にする。 (3) コンパイラの拡張 ここまででは、CUDAの並列関数をStandard MLに統合した記述はできず、既存の(CUDA向け拡張Cの)関数を呼び出すだけになる。GPGPU固有の制約の下で、Standard MLへの統合をおこなう。 これらの実装を次年度以降に実施する。特に、(2)については、本研究の目標とする、並列計算での再帰的なデータ構造の効率的な取扱いにおいて、重要なポイントとなる。
|