は、私は、チュートリアルで説明したように、作業効率の悪い「ダブルバッファ1」をしようとしています。このtutorial -uda共有メモリ上書き?
に従うことによって、CUDAの並列プレフィックススキャンを記述しようとしています。
これは私が持っているものです。
// double buffered naive.
// d = number of iterations, N - size, and input.
__global__ void prefixsum(int* in, int d, int N)
{
//get the block index
int idx = blockIdx.x*blockDim.x + threadIdx.x;
// allocate shared memory
extern __shared__ int temp_in[], temp_out[];
// copy data to it.
temp_in[idx] = in[idx];
temp_out[idx] = 0;
// block until all threads copy
__syncthreads();
int i = 1;
for (i; i<=d; i++)
{
if (idx < N+1 && idx >= (int)pow(2.0f,(float)i-1))
{
// copy new result to temp_out
temp_out[idx] += temp_in[idx - (int)pow(2.0f,(float)i-1)] + temp_in[idx];
}
else
{
// if the element is to remain unchanged, copy the same thing
temp_out[idx] = temp_in[idx];
}
// block until all theads do this
__syncthreads();
// copy the result to temp_in for next iteration
temp_in[idx] = temp_out[idx];
// wait for all threads to do so
__syncthreads();
}
//finally copy everything back to global memory
in[idx] = temp_in[idx];
}
あなたはこれで間違っているものを指摘することはできますか?私は何が起こるべきかについてのコメントを書いている。
これは、カーネルの呼び出しである - これはグリッドとブロックの割り当てである
prefixsum<<<dimGrid,dimBlock>>>(d_arr, log(SIZE)/log(2), N);
:
dim3 dimGrid(numBlocks);
dim3 dimBlock(numThreadsPerBlock);
問題は、私はより多くのだ任意の入力に対して正しい出力を得ることはありませんということです8要素長い。
カーネルの呼び出しを追加できますか?正確な問題は何ですか? –
'dimGrid'と' dimBlock'の値は何ですか? – flipchart