使用CUDA编程时,我在尝试将一些数据从主机复制到GPU时遇到了问题。
我有三个嵌套的结构体,如下:
typedef struct {
char data[128];
short length;
} Cell;
typedef struct {
Cell* elements;
int height;
int width;
} Matrix;
typedef struct {
Matrix* tables;
int count;
} Container;
因此,Container
包含一些Matrix
元素,而这些元素又包含一些Cell
元素。
假设我以以下方式动态分配主机内存:
Container c;
c.tables = malloc(20 * sizeof(Matrix));
for(int i = 0;i<20;i++){
Matrix m;
m.elements = malloc(100 * sizeof(Cell));
c.tables[i] = m;
}
也就是说,一个包含20个矩阵,每个矩阵有100个元素的容器。
- 我该如何使用cudaMemCpy()将这些数据复制到设备内存中?
- 有没有好的方法可以在主机和设备之间执行“结构体的结构体”的深度复制?
感谢您的时间。
安德烈亚
Matrix
结构体中的elements
字段作为线性内存进行管理,而高级表示形式将是2D的。 我也想尝试将3个结构体线性化/展平,但是如何做到这一点呢?管理所有索引不会太困难吗?无论如何,感谢您的帮助,不必费心寻找旧代码! - Andrea