使用CUDA编程我在尝试将一些数据从主机复制到gpu时遇到了问题。
我有3个这样的嵌套结构:
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;
}
即,每个100个细胞的20个矩阵的容器。
感谢您的时间。
安德烈
答案 0 :(得分:3)
简短的回答是“只是不要”。我说这有四个原因:
考虑使用线性内存和索引。它可以在主机和GPU之间移植,并且分配和复制开销约为基于指针的替代方案的1%。
如果你真的想要这样做,请留下评论,我会尝试挖掘一些旧的代码示例,这些示例显示了GPU上完整的愚蠢嵌套指针。