2

CUDA を使用した Just-In-Time (JIT) コンパイルについていくつか質問があります。

論文によると、式テンプレートに基づいてライブラリを実装しました

JM Cohen 著、「Processing Device Arrays with C++ Metaprogramming」、GPU Computing Gems - Jade Edition

それはかなりうまくいくようです。行列要素ごとの演算の計算時間を比較すると

D_D=A_D*B_D-sin(C_D)+3.;

意図的に開発された CUDA カーネルの結果を使用すると、次の結果が得られます (括弧内は行列のサイズ)。

時間 [ms] 手書きカーネル: 2.05 (1024x1024) 8.16 (2048x2048) 57.4 (4096*4096)

時間 [ミリ秒] ライブラリ: 2.07 (1024x1024) 8.17 (2048x2048) 57.4 (4096*4096)

ライブラリは、手書きのカーネルとほぼ同じ計算時間を必要とするようです。また、C++ 11 キーワード auto を使用して、実際に必要な場合にのみ式を評価しています。. 私の最初の質問は

1. (コードの最適化に関して) JIT がライブラリに提供するその他の利点はどれですか? JIT は、実行時コンパイルのためにさらに負荷を導入しますか?

Expression Templates に基づくライブラリを .dll ライブラリ内に配置できないことが知られています。 b710-825b503787e2 . 私の2番目の質問は次のとおりです。

2. JIT はサードパーティのユーザーに実装を隠すのに役立ちますか? はいの場合、どのように?

CUDA SDK には、ptx コードが実行時にロードされず、コンパイル時に定義される ptxjit の例が含まれています。私の3番目の質問は次のとおりです。

3. 私の場合、どのように JIT を実装すればよいですか? 実行時に読み込まれる PTX を使用した JIT の例はありますか?

助けてくれてありがとう。

Talonmiesのコメントに続いて編集

Cuda カーネルからのジャストインタイム (jit) コンパイルは可能ですか? 投稿、それはそれを読む

cuda コードは中間形式の ptx コードにコンパイルでき、実行時に実際のデバイス アーキテクチャ マシン コードに jit コンパイルされます。

私が持っている疑問は、上記が Expression Templates ライブラリに適用できるかどうかです。インスタンス化の問題により、CUDA/C++ テンプレート コードを PTX にコンパイルできないことはわかっています。しかし、おそらく、単項式と 2 項式の型/演算子のすべての可能な組み合わせをインスタンス化すると、実装の少なくとも一部を PTX にコンパイル (およびサード パーティのユーザーにマスク) し、次に JIT コンパイルして、建築を手元に。

4

2 に答える 2

1

OpenCLを調べる必要があると思います。これは、GPU で計算カーネルを作成、コンパイル、および実行するための JIT に似たプログラミング モデルを提供します (すべて実行時に)。

Boost.Computeで同様の式テンプレート ベースのアプローチを採用しています。これにより、コンパイル タイプの C++ 式を OpenCL カーネル コード (C の方言) に変換することで、ライブラリが C++ テンプレートと汎用アルゴリズムをサポートできるようになります。

于 2013-04-14T00:37:58.327 に答える