2
基本的なC/C++ループをCUDAカーネルに変換する方法を理解したいと思います。C/C++ forループをCUDAに変換する
for (int i=0;i < MAXi;i++)
for(int j=0;j< MAXj;j++){
...code that uses i and j....
}
私はすべての要素をMAXjで計算する必要があります。 これは非常に基本的なものかもしれませんが、私は本当にここで苦労しています。Maxjが約100万であるとします.MAXj = 1000000です。すべてのスレッドが動作する場所があります。 私は、内側のループで成功している:
int tid=threadIdx.x + blockDim.x*blockIdx.x + blockDim.x*gridDim.x*blockIdx.y;
は、どのように私は、ループのこの種を並列化することができ、2Dブロックを使用していますか? C言語では非常に一般的ですが、それを行う方法を学ぶことは非常に便利です。
答えは「... iとj ...を使用するコード」に完全に依存します。質問にさらなる詳細を追加し、有用な答えを得ることが可能かもしれません。あなたは、[このスレッド]を見つける価値がある(http://stackoverflow.com/questions/5643178/cuda-how-to-get-grid-block-thread-size-and-parallalize-non-square-matrix-calcul)あまりにも。 – talonmies