CUDA使用cudaMemcpy复制多个结构数组
CUDA Copying multiple arrays of structs with cudaMemcpy
假设一个结构X有一些基元和一个Y结构数组:
typedef struct
{
int a;
Y** y;
} X;
X的实例X1在主机上初始化,然后通过cudaMemcpy复制到设备内存上的X的实例X2。
这对X中的所有基元(如int a)都很有效,但cudaMemcpy似乎会将任何双指针扁平化为单指针,从而在访问X中的结构数组(如y)的任何地方都会导致越界异常。
在这种情况下,我是否应该使用另一个memcpy函数,如cudaMemcpy2D或cudaMemcpyArrayToArray?
我们非常感谢您的建议。谢谢
编辑
复制一个结构数组的自然方法(如"如果它只是C,我会这么做")是对数组进行cudaMalloc,然后对每个元素进行单独初始化,例如:
X** h_x;
X** d_x;
int num_x;
cudaMalloc((void**)&d_x, sizeof(X)*num_x);
int i=0;
for(;i<num_x;i++)
{
cudaMalloc((void**)d_x[i], sizeof(X));
cudaMemcpy(&d_x[i], &h_x[i], sizeof(X), cudaMemcpyHostToDevice);
}
然而,for的cudaMalloc会产生崩溃。我承认我还不适应在Cuda函数中使用指针,所以也许我把cudaMalloc和cudaMemcpy参数搞砸了?
cudaMemcpy
、cudaMemcpy2D
和cudaMemcpyArrayToArray
都从主机中的连续内存区域复制到设备上的连续内存区。
您必须将所有数据复制到发送到设备的中间连续缓冲区中。
相关文章:
- C++将文本文件中的数据读取到结构数组中
- JSON转换为nlohmann JSON-lib中的结构数组
- 需要帮助将结构数组传递给函数
- 在 64 位边界上对齐C++结构数组?
- 带有枚举方向/类型的气泡排序结构数组
- 在C++中访问结构数组中的数据
- 从指向结构数组的指针中提取元素
- 如何制作一个地图,其中的值是C++中的结构数组
- 如何在函数中显示结构数组
- 包含作为成员C++函数的结构数组
- 如何修复函数中的 fstream 文件输入以将正确的信息存储在结构数组中?
- std::transform 将一个结构数组复制到另一个结构数组
- 将非托管结构数组封送到托管数组
- 显示结构数组
- 结构数组中所有类似字段的总和
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- 在 glsl opengl 中将嵌套结构数组作为统一传递
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 如何将字符串字符与结构数组进行比较?
- C++结构数组