GPUによる量子化学シミュレーション 3

実用的計算ではd基底関数を使わなければならないが、最悪の場合、各threadは63個以下の変数を使い、約500個の積分を計算せねばならない。例えるなら9個の原材料から、2個を選んで色々な中間財を作り、 原材料と作った中間財から別の中間財を作り、という手順を繰り返し、165個の最終製品を作る。この際、 原材料や中間財の保管容器は30個程度しかない、という状況である。 またある中間財 を作るレシピは3種類あり、どれを使うか決める必要がある。

このスケジューリング問題をコンパイラーは上手に解けなかったので、 丸岡寛典さん(当時学部4年生)は、良い計算手順を探索するプログラムを作成した。手持ちの中間財から作れる新しい 中間財を調べ、それらの生産順序を全て調べる、というものである。この巨大な探索木を、枝刈りや確率などで小さく刈り込み、良さそうな解を見つけた。これらの解を元に十数種類のkernel関数を作成した。GPUでの計算速度を測定したところ、理論性能の40-70%が得られ、先行研究の5-10%の値を大幅に改善した。この結果を国際論文で発表した。

交換相関項は、排他原理と電子相関の効果を表すが、これは計算 時間の4割を占める。交換相関項は電子密度の複雑な関数なので、3次元グリッドで求積する必要が有る。グリッド上での基底関数値の計算、グリッド上での電子密度の計算、交換相関ポテンシャルの行列要素の計算が必要である。無視できる程小さい項は計算しないので、不規則なデータが多く、SIMD processorで効率良く処理する方法が問題だった。細粒度並列性を確保するため、代表例のデータを解析し、original programを相当書き換えた。また短縮長や基底関数の数など可変長ループが複数あり、作業領域も足りない。色々なアイデアでプログラムを作り比較した。論文に書き難いノウハウが沢山あった。最終的にはCPUプログラムの5-10倍程度に速くなった。