sizeの 1D 配列にフラット化された各次元src
の sizeの 3D 配列をカーネルに送信し、結果を計算して に格納したいと思います。ただし、最後に不適切にすべて 0 が含まれます。これが私のコードです:size
length = size * size * size
dst
dst
int size = 256;
int length = size * size * size;
int bytes = length * sizeof(float);
// Allocate source and destination arrays on the host and initialize source array
float *src, *dst;
cudaMallocHost(&src, bytes);
cudaMallocHost(&dst, bytes);
for (int i = 0; i < length; i++) {
src[i] = i;
}
// Allocate source and destination arrays on the device
struct cudaPitchedPtr srcGPU, dstGPU;
struct cudaExtent extent = make_cudaExtent(size*sizeof(float), size, size);
cudaMalloc3D(&srcGPU, extent);
cudaMalloc3D(&dstGPU, extent);
// Copy to the device, execute kernel, and copy back to the host
cudaMemcpy(srcGPU.ptr, src, bytes, cudaMemcpyHostToDevice);
myKernel<<<numBlocks, blockSize>>>((float *)srcGPU.ptr, (float *)dstGPU.ptr);
cudaMemcpy(dst, dstGPU.ptr, bytes, cudaMemcpyDeviceToHost);
cudaMallocHost()
、cudaMalloc()
およびcudaMemcpy()
明確にするために、のエラーチェックを省略しました。いずれの場合も、このコードによってトリガーされるエラーはありません。
cudaMalloc3D()
withの正しい使い方は何cudaMemcpy()
ですか?
カーネルの最小限のテスト ケースも投稿する必要があるかどうか、または上記のコードで問題が見つかるかどうかをお知らせください。