Arbeiten mit einer Reihe von Strukturen, die dynamisch zugewiesenen Daten sind nicht viel anders als die Arbeit mit einer Reihe von Grundtypen nicht enthalten eingebettete Zeiger auf.
Hier ist ein ausgearbeitetes Beispiel eine Reihe von Ihrer Struktur zeigt auf dem Host initialisiert wird, an das Gerät übertragen, auf dem Gerät modifed und an den Host zurückgegeben:
$ cat t690.cu
#include <iostream>
const int dsize = 5;
const int nTPB = 256;
typedef struct Octree
{
//data
unsigned pos_childs[8];
}octree_t;
__global__ void kernel(Octree *data, size_t n){
int idx=threadIdx.x+blockDim.x*blockIdx.x;
if (idx < n)
data[idx].pos_childs[4] = data[idx].pos_childs[3];
}
int main(){
Octree *h_data, *d_data;
h_data = new Octree[dsize];
cudaMalloc(&d_data, dsize*sizeof(Octree));
for (int i = 0; i < dsize; i++) {h_data[i].pos_childs[3] = i; h_data[i].pos_childs[4] = 0;}
cudaMemcpy(d_data, h_data, dsize*sizeof(Octree), cudaMemcpyHostToDevice);
kernel<<<(dsize+nTPB-1)/nTPB,nTPB>>>(d_data, dsize);
cudaMemcpy(h_data, d_data, dsize*sizeof(Octree), cudaMemcpyDeviceToHost);
for (int i = 0; i < dsize; i++) std::cout << h_data[i].pos_childs[4] << " ";
std::cout << std::endl;
return 0;
}
$ nvcc -o t690 t690.cu
$ cuda-memcheck ./t690
========= CUDA-MEMCHECK
0 1 2 3 4
========= ERROR SUMMARY: 0 errors
$
CUDA nicht C ist. – Olaf