最終年度のプロジェクトでは、開発者がCUDA APIのさまざまなカーネル実装の仕組みを理解することなく、CUDAでGPGPUコンピューティングを行うために使用できるライブラリを構築しました言い換えれば、CUDAラッパー)。このライブラリは、おそらくopenMPライブラリに似ています。 openMPに精通していない人にとっては、Cでマルチプラットフォームの共有メモリマルチプロセッシングプログラミングをサポートするAPIであり、データレイアウトと分解はディレクティブによって自動的に処理されます。例えば、APIは、ブロック内の各コードを並列化:CUDAによる自動並列コンピューティングのためのライブラリの構築
long sum = 0, loc_sum = 0;
/*forks off the threads and starts the work-sharing construct*/
#pragma omp parallel for private(w,loc_sum) schedule(static,1)
{
for(i = 0; i < N; i++)
{
w = i*i;
loc_sum = loc_sum + w*a[i];
}
#pragma omp critical
sum = sum + loc_sum;
}
printf("\n %li",sum);
私の場合、私は、GPU上のCUDA並列コンピューティングのための同じ機能を実装したいと思います。したがって、私は実行時の動作に影響を与える一連のコンパイラ・ディレクティブ、ライブラリ・ルーチン、および環境変数を構築する必要があります。 CUDAのすべての呼び出しは、プログラマから隠す必要があります。
CUDAはSIMDアーキテクチャなので、特に反復間の依存関係を考慮に入れなければならない多くの要因があることがわかります。しかし、今はプログラマがGPGPUコンピューティングの限界を知っていると思います。
ここで私はあなたの助けが必要です。そのような図書館の建設をどこから始めるべきか、誰にでも助言を与えることができますか?また、コンパイラ指令や環境変数を扱うのに役立つ良いチュートリアルをお持ちの方はいらっしゃいますか?あるいは、似たような仕事をしていて、良い文書を得ることができる他のライブラリを知っている人はいますか?
そして、最も重要なことは、これは約1200時間で実行できるプロジェクトだと思いますか?私はすでにGPGPUとCUDAに少し精通していますが、そのような図書館を構築することは私には新しいものです。
OpenACCで何が問題になっていますか? http://www.nvidia.com/object/openacc-gpu-directives.html – ngimel