MCUDA: An Efficient Implementation of CUDA Kernels on Multi-cores

by syoyo

MCUDA: An Efficient Implementation of CUDA Kernels on Multi-cores
John Stratton, Sam Stone, Wen-mei Hwu
http://www.gigascale.org/pubs/1278.html

最近お気に入りの gigascale.org から

CUDA を CPU でも動くようにフレームワークを作ってみたよ、
CPU でも効率的にコードが動くことがわかったよ、
という論文。

効率は、チューンされた CPU コードを 1 とすると、
MCUDA でコードした同等のプログラムは 1/2 であったとのこと。
このパフォーマンスのロスは、データの局所化のセットアップなどの
余計な処理が原因のようです。

CUDA は G80 にべったりな仕様ですが、まあ言語自体は複雑ではないので
CPU にマップするのはさほど難しくないでしょう。
ただし論文が言うように、最適化の方向性は CPU と GPU では
すこし変わってきますね. でもそこはコンパイラで吸収できるでしょう。

ただ、CUDA の実行モデル自体がプロセッサでの実行に適しているわけで、
CUDA にうまくマッピングできるプログラムなら、
まあべつに MCUDA を使わなくても CPU でも効率に実行できるわけです.

とはいえ、同じコードで CPU でも GPU でも動くというのは
プログラムを書く方にとってはうれしいですね。
それにどうせ (GP)GPU はなくなるんですから、MCUDA があれば
GPU がなくなっても CPU にそのままスイッチできるという利点があります.

うーん、でも CUDA 化しやすいプログラムなんて、
実世界から見れば 1 割にも満たないと思うんですよね。
残りの 9 割のうちいくつかは、とても労力を使えば CUDA に合う
ようにはできると思いますが、投資に見合うリターンが得られる
とは思えません。

どんなアプリでも、とまでは必要ありませんが、
レイトレ, GI あたりのプログラム(二分木探索、incoherent 処理)
が自動で複数コアに効率よく実行してくれるような
並列プログラミングモデルが出てきてほしいところ.
(そんなわけで gigascale.org の他の研究に注目しています)

Abst 日本語訳

CUDA プログラミングモデルは、拡張 ANSI C 言語とランタイム環境であり、プログラマが明示的にデータ並列計算を行うことができるモデルです。

NVIDIA は、自社のグラフィックスアクセラレータのアーキティクチャを、より汎用的なアプリにも提供するために、CUDA を開発しました。

しかし、他のアーキティクチャでこのプログラミングモデルを効率的に適用することは行われていません。

本文では、効率的に CUDA プログラミングモデルをマルチコア CPU にマップする、Muticode-CUDA(MCUDA) について解説します。

本研究のおもな寄与は、、CUDA コードを標準 C 言語にソース-ソース変換し、並列実行向けのランタイムライブラリとリンクできるようにするプロセスです。

我々は MCUDA フレームワークを、GPU では高パフォーマンスに実行されることが示されているいくつかの CUDA アプリに適用し、マルチコア CPU のアーキティクチャでもこれらのアプリが高効率に実行できることを示します。
CUDA モデルで示されているコードのスレッドレベルの並列性、データ局所性、計算の等質性というものが、CPU アーキティクチャ向けにアプリケーションを手作業でチューニングしたときの利益の多くを実現することができます。

MCUDA フレームワークにより、データ並列のコードを単一のプログラミングモデルで記述し、CPU でも GPU でも効率的に実行できるようになります。

Advertisements