2011-01-18 5 views
1

最終年度のプロジェクトでは、開発者が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に少し精通していますが、そのような図書館を構築することは私には新しいものです。

+0

OpenACCで何が問題になっていますか? http://www.nvidia.com/object/openacc-gpu-directives.html – ngimel

答えて

1

これは、コンパイラの一部を書き換えるほどライブラリを書くのではありません。 GCCもVisual Studioも、自分のプラグマを定義することはできません。組み込みのオプティマイザでうまくやる必要があります。

正直なところ、実際のGPGPUの部分は簡単な部分です。

OpenMPをGCCでどのように行ったかを見たい場合は、GOMP projectの履歴を調べることをお勧めします。

+0

ありがとうございます。私は今朝同僚と同じ議論をしました。新しいプラグマを定義するときには簡単な方法はないようです。したがって、コンパイル前に実行されるpythonスクリプトを作成して、cudaコードを生成することにしました。 #pragmaを使うのではなく、@cudaのようなものを使うつもりだと思う。 –

1

これは少し主観的ですが、これは非常に難しいプロジェクトのようです。ホストからGPUへのデータ転送に恩恵を受けるだけの問題を構造化するにはかなりの思考と計画が必要であり、問​​題のサブセットには意味があります。

同様のことをする既存のプロジェクトでは、PyCUDAPyOpenCLのような単純なラッパーがあり、マトリックス演算のようなGPU機能の小さなビットをラップします。おそらく最も近いものはtheanoです。これはかなりの数学的計算に焦点を当てていますが、GPUコンポーネントを抽象化して良い仕事です。

+0

あなたの迅速な回答に感謝します。私はプロジェクトが挑戦的であることを知っています。そのため、私は素朴な世代で小さなものを始めることを考えています。私はあなたが私を助けてくれたラッパーを見ていきます。 –

関連する問題