将字符映射表从主机内存复制到 CUDA 中的设备

标签 c arrays memory cuda malloc

不确定如何将其从主机内存复制到设备内存,已经研究了一段时间但没有取得任何进展,任何大大小小的帮助将不胜感激。

 unsigned char map[256] = {

   8,0,2,0,0,0,0,0,0,0,2,0,2,0,0,0,
   0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,
   0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,
   0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,
   0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,
   0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,
   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
   0,2,0,0,0,1,0,0,0,0,0,0,0,1,0,0,
   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
   0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,
   0,1,1,1,0,0,0,0,0,0,0,0,3,0,0,0,
   0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
   0,0,0,1,0,0,0,5,0,0,0,3,0,0,0,0,
   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
 };

会和这个类似吗?

cudaMalloc(&d_n, sizeof(int));

  cudaMemcpy(d_n, &h_n, sizeof(int), cudaMemcpyHostToDevice);

  kernel <<<16,16>>>(d_n);

  cudaThreadSynchronize();

  cudaMemcpy(&h_n, d_n, sizeof(int), cudaMemcpyDeviceToHost);  

  cudaFree(d_n);

最佳答案

如果您的代码中存在段错误,这可能是由于以下错误造成的:

  1. 您正在使用 sizeof(int) 复制无符号字符数组。

  2. h_n 您的数组名为“map”吗? unsigned char[] 是一个指针,您可以直接在 cudaMemcpy 方法中使用它。

    cudaMemcpy(d_n, map, 256 * sizeof(unsigned char), cudaMemcpyHostToDevice);

应该可以。

关于将字符映射表从主机内存复制到 CUDA 中的设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36425733/

相关文章:

c++ - C++中删除对象和new关键字

c - 当 switch 语句中有两个连续的 break 时会发生什么?

java - 如何最有效地将二进制文件中的特定字节转换为字符串

memory - 为什么从 Memory & I\O 获取数据很昂贵?

memory - 如何正确设置页目录项的权限?

javascript - 从复选框数组中插入多个值,并以逗号分隔

c - 为什么 MAP_GROWSDOWN 映射不增长?

检查 POSIX 共享内存对象大小

c - 微基准测试显示进程切换比线程切换更快;怎么了?

Java - 如何解决这个二维数组沙漏?