首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >到CUDA内核的2d字符数组

到CUDA内核的2d字符数组
EN

Stack Overflow用户
提问于 2013-10-18 22:06:58
回答 2查看 1.1K关注 0票数 2

我需要帮助把炭转移到库达内核。这是我的密码:

代码语言:javascript
运行
复制
__global__ 
void kernel(char** BiExponent){
  for(int i=0; i<500; i++)
     printf("%c",BiExponent[1][i]); // I want print line 1
}

int main(){
  char (*Bi2dChar)[500] = new char [5000][500];
  char **dev_Bi2dChar;

  ...//HERE I INPUT DATA TO Bi2dChar

  size_t host_orig_pitch = 500 * sizeof(char);
  size_t pitch;
  cudaMallocPitch((void**)&dev_Bi2dChar, &pitch, 500 * sizeof(char), 5000);
  cudaMemcpy2D(dev_Bi2dChar, pitch, Bi2dChar, host_orig_pitch, 500 * sizeof(char), 5000, cudaMemcpyHostToDevice);
  kernel <<< 1, 512 >>> (dev_Bi2dChar);
  free(Bi2dChar); cudaFree(dev_Bi2dChar);
}

我使用: nvcc.exe“-gencode=arch=compute_20,code=\"sm_20,compute_20\

谢谢你帮忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-19 06:30:47

cudaMemcpy2D实际上并不处理C中的二维数组(即双指针,**)。注意,文档表示它需要单个指针,而不是双指针。

一般来说,在主机和设备之间移动任意双指针C数组比单个指针数组要复杂得多。

如果你真的想处理双指针数组,那么在这个页面的右上角搜索"CUDA 2D数组“,你会发现如何做它的各种例子。(例如@talonmies 这里给出的答案)

通常,一种更简单的方法是将数组“扁平化”,这样它就可以被单个指针引用,即char[]而不是char[][],然后使用索引算法模拟二维访问。

您的扁平代码应该如下所示(您提供的代码是不可编译的、不完整的代码段,所以我的代码也是这样)

代码语言:javascript
运行
复制
#define XDIM 5000
#define YDIM 500

__global__ 
void kernel(char* BiExponent){
  for(int i=0; i<500; i++)
     printf("%c",BiExponent[(1*XDIM)+i]); // I want print line 1
}

int main(){
  char (*Bi2dChar)[YDIM] = new char [XDIM][YDIM];
  char *dev_Bi2dChar;

  ...//HERE I INPUT DATA TO Bi2dChar

  cudaMalloc((void**)&dev_Bi2dChar,XDIM*YDIM * sizeof(char));
  cudaMemcpy(dev_Bi2dChar, &(Bi2dChar[0][0]), host_orig_pitch, XDIM*YDIM * sizeof(char), cudaMemcpyHostToDevice);
  kernel <<< 1, 512 >>> (dev_Bi2dChar);
  free(Bi2dChar); cudaFree(dev_Bi2dChar);
}

如果您想要一个倾斜数组,您可以类似地创建它,但是仍然可以作为单个指针数组,而不是双指针数组来创建它。

票数 1
EN

Stack Overflow用户

发布于 2013-10-18 22:16:55

不能在库达内核中使用printf。原因是代码在GPU上执行,而不是在主机CPU上执行。

但是,您可以使用cuPrintf

我们如何使用cuPrintf()?

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19459788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档