CUDA三维数组
根据上面链接的帖子研究了下三维数组,就像他自己说的一样是有问题的,我自己修改了下,结果终于正确了。大家有兴趣的可以对照着看看。
整个过程关键参考了这篇文章http://www.xuebuyuan.com/685353.html
1 #include <stdio.h> 2 //#include <cutil.h> 3 #include <helper_cuda.h>//替代cutil.h 4 #include <cuda_runtime.h> 5 6 #define Width 2 7 #define Height 2 8 #define Depth 2 9 int bmp1[Width][Height][Depth]={11,22,33,44,55,66,77,88}; 10 int bmp2[Width][Height][Depth]; 11 int main(){ 12 13 cudaPitchedPtr devPitchedPtr; 14 cudaExtent extent = make_cudaExtent(Width * sizeof(int), Height, Depth); 15 cudaMalloc3D(&devPitchedPtr, extent); 16 cudaMemset3D(devPitchedPtr, 0, extent); 17 18 19 cudaError status; 20 cudaMemcpy3DParms HostToDev = { 0 }; 21 HostToDev.srcPtr = make_cudaPitchedPtr((void*)bmp1,Width * sizeof(int), Width, Height); 22 HostToDev.dstPtr = devPitchedPtr; 23 HostToDev.extent = extent; 24 HostToDev.kind = cudaMemcpyHostToDevice; 25 status = cudaMemcpy3D(&HostToDev); 26 if (status != cudaSuccess){ 27 fprintf(stderr, "MemcpyHtD: %s\n", cudaGetErrorString(status)); 28 } 29 30 cudaMemcpy3DParms DevToHost = { 0 }; 31 DevToHost.srcPtr = devPitchedPtr; 32 DevToHost.dstPtr = make_cudaPitchedPtr((void*)bmp2, Width * sizeof(int), Width, Height); 33 DevToHost.extent = extent; 34 DevToHost.kind = cudaMemcpyDeviceToHost; 35 status = cudaMemcpy3D(&DevToHost); 36 if (status != cudaSuccess){ 37 fprintf(stderr, "MemcpyHtD: %s\n", cudaGetErrorString(status)); 38 } 39 cudaFree(&devPitchedPtr); 40 41 int i, j, k; 42 for (i = 0; i<2; i++) 43 for (j = 0; j<2; j++) 44 for (k = 0; k<2; k++) 45 printf("bmp2[%d][%d][%d]=%d\n", i, j, k, bmp2[i][j][k]); 46 47 return 0; 48 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。