我一直在使用 cudaMemcpy2D 将 2D 数组从 20 * 20 字符值发送到我的内核,但是当我想尝试发送 20 * 30 数组时出现错误。
这些行的代码如下:
我这样定义常量:
//Define for 2D arrays
#define TEXTSIZE 20
#define NUMBERTEXT 30
我这样定义我的 textPitch
size_t pitch_text;
我像这样初始化我的数组:
char text[NUMBERTEXT][TEXTSIZE] = {{'A','A','B','C','B','B','C','A','B','A','A','B','B','A','A','A','C','A','A','B'},\ ... }};
我像这样制作我的cudamalloc:
gpuErrchk(cudaMallocPitch( (void**)&d_text, &pitch_text, NUMBERTEXT * sizeof(char), TEXTSIZE));
CudaMemcpy2D 的初始化如下:
gpuErrchk(cudaMemcpy2D(d_text, pitch_text, text, TEXTSIZE * sizeof(char), TEXTSIZE * sizeof(char),NUMBERTEXT, cudaMemcpyHostToDevice));
收到的错误如下:
GPUassert: invalid argument ../2D.cu 212
第 212 行的错误基本上是 CudaMemcpy2D 行。
有没有更好的方法将大型二维数组发送到全局内存中的 GPU?请注意,如果我使用 20 * 20 数组,代码可以正常工作。
谢谢