コードは機能しません。しかし、次のコードでatomicAdd
とコメントすると、コードが機能します。ヒュージグラムによる計算の計算
その理由は何ですか?
フロート配列のヒストグラムコードはどこで入手できますか?
__global__ void calculateHistogram(float *devD, int* retHis)
{
int globalLi = getCurrentThread(); //get the thread ID
if(globalLi>=0 && globalLi<Rd*Cd*Dd)
{
int r=0,c=0,d=0;
GetInd2Sub(globalLi, Rd, Cd, r, c, d); //some calculations to get r,c,d
if(r>=stYd && r<edYd && c>=stXd && c<edXd && d>=stZd && d<edZd)
{
//calculate the histogram
int indexInHis = GetBinNo(devD[globalLi]); //get the bin number in the histogram
atomicAdd(&retHis[indexInHis],1); //when I comment this line the code works
}
}
}
をデバッグするためにあなたが 'indexInHis'が有効の直前であることを確認したい場合があり、戻り値を使用する前に、いくつかのチェックを追加します'atomicAdd'に渡します。 –
あなたはどういう意味ですか、うまくいかないのですか?それはコンパイルされますか?ハードウェアがグローバルアトミックアドをサポートしていますか(Cuda Capabiltiy> 1.0)?プラグマをカーネルコードに含めましたか? –
indexInを正しくチェックしました。私のcuda能力は1.1です。 – user570593