ドキュメントを調べた後、理解できない非常に基本的な質問があります。出力が完全に破損しているため、プロジェクトの1つを実行しているときにこの問題に直面しています。問題はメモリ割り当てまたはスレッド同期のいずれかにあると考えられます。問題は、すべてのスレッドが、カーネル関数に渡されたすべての変数とポインターの個別のコピーを作成できるかどうかです。または、変数のコピーを作成するだけですが、そのメモリを渡すポインターはすべてのスレッド間で共有されます。例えば
int main()
{
const int DC4_SIZE = 3;
const int DC4_BYTES = DC4_SIZE * sizeof(float);
float * dDC4_in;
float * dDC4_out;
float hDC4_out[DC4_SIZE];
float hDC4_out[DC4_SIZE];
gpuErrchk(cudaMalloc((void**) &dDC4_in, DC4_BYTES));
gpuErrchk(cudaMalloc((void**) &dDC4_out, DC4_BYTES));
// dc4 initialization function on host which allocates some values to DC4[] array
gpuErrchk(cudaMemcpy(dDC4_in, hDC4_in, DC4_BYTES, cudaMemcpyHostToDevice));
mykernel<<<10,128>>>(VolDepth,dDC4_in);
cudaMemcpy(hDC4_out, dDC4_out, DC4_BYTES, cudaMemcpyDeviceToHost);
}
__global__ void mykernel(float VolDepth,float * dDC4_in,float * dDC4_out)
{
for(int index =0 to end)
dDC4_out[index]=dDC4_in[index] * VolDepth;
}
したがって、dDC4_in と dDC4_out ポインターを GPU に渡し、dDC4_in をいくつかの値で初期化し、dDC4_out を計算してホストにコピーします。1280 のすべてのスレッドが個別の dDC4_in/out コピーを持つか、GPU で同じコピーで動作し、他のスレッドの値?