グローバル関数への入力として多数の配列を提供する必要がある状況に遭遇しました。他のスレッドがコピーする方法に影響を与えないように、各スレッドが配列に対して操作を実行できるようにする必要があります。配列、達成しようとしているものの例として、以下のコードを提供します。
__global__ void testLocalCopy(double *temper){
int threadIDx = threadIdx.x + blockDim.x * blockIdx.x;
// what I need is for each thread to set temper[3] to its id without affecting any other threads copy
// so thread id 0 will have a set its copy of temper[3] to 0 and thread id 3 will set it to 3 etc.
temper[3]=threadIDx;
printf("For thread %d the val in temper[3] is %lf \n",threadIDx,temper[3]);
}
言い直すと、特定のスレッドが他のスレッドがtemper[3]の値を更新していないことを確認できる方法はありますか?
私は当初、定数メモリを使用することでこの問題を解決できると信じていましたが、定数メモリは読み取り専用であるため、これは私のニーズを満たしていませんでした。
私は cuda 4.0 を使用しています。以下のメイン関数を参照してください。
int main(){
double temper[4]={2.0,25.9999,55.3,66.6};
double *dev_temper;
int size=4;
cudaMalloc( (void**)&dev_temper, size * sizeof(double) );
cudaMemcpy( dev_temper, &temper, size * sizeof(double), cudaMemcpyHostToDevice );
testLocalCopy<<<2,2>>>(dev_temper);
cudaDeviceReset();
cudaFree(dev_temper);
}
前もって感謝します、 コナー