Programación con CUDA Me enfrenta un problema al intentar copiar algunos datos del host a gpu.¿Cómo realizar copias profundas de struct con CUDA?
tengo 3 estructura anidada como estos:
typedef struct {
char data[128];
short length;
} Cell;
typedef struct {
Cell* elements;
int height;
int width;
} Matrix;
typedef struct {
Matrix* tables;
int count;
} Container;
Así Container
"incluye" algunos Matrix
elementos, que a su vez incluye algunos elementos Cell
.
Supongamos que asignar dinámicamente la memoria del host de esta manera:
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;
}
Es decir, un contenedor de 20 Matriz de 100 celdas cada uno.
- ¿Cómo podría ahora copiar estos datos en la memoria del dispositivo usando cudaMemCpy()?
- ¿Hay alguna buena manera de realizar una copia profunda de "struct of struct" de host a dispositivo?
Gracias por su tiempo.
Andrea
He leído mucho sobre el uso de la memoria lineal y el aplanamiento de matrices. En realidad, administro los 'elementos' del campo en la estructura' Matrix' como memoria lineal, mientras que la representación de alto nivel sería 2D. Yo trataría de linealizar/aplanar la estructura 3 también, pero ¿cómo podría hacer esto? ¿No sería demasiado difícil administrar todos los índices? De todos modos, gracias por su ayuda, ¡no se moleste en buscar un código antiguo! – Andrea