Próbuję skorzystać ze stałej pamięci, ale ciężko jest mi zastanowić się, jak zagnieździć tablice. To, co mam, to tablica danych, która liczy się dla danych wewnętrznych, ale są one różne dla każdego wpisu. Opierając się na następującym uproszczonym kodzie, mam dwa problemy. Najpierw nie wiem, jak przydzielić dane wskazywane przez członków mojej struktury danych. Po drugie, ponieważ nie mogę używać cudaGetSymbolAddress do stałej pamięci, nie jestem pewien, czy mogę po prostu przekazać globalny wskaźnik (którego nie można zrobić zwykłą pamięcią __device__).Dynamiczne przydzielanie stałej pamięci w CUDA
struct __align(16)__ data{
int nFiles;
int nNames;
int* files;
int* names;
};
__device__ __constant__ data *mydata;
__host__ void initMemory(...)
{
cudaMalloc((void **) &(mydata), sizeof(data)*dynamicsize);
for(int i=; i lessthan dynamicsize; i++)
{
cudaMemcpyToSymbol(mydata, &(nFiles[i]), sizeof(int), sizeof(data)*i, cudaMemcpyHostToDevice);
//...
//Problem 1: Allocate & Set mydata[i].files
}
}
__global__ void myKernel(data *constDataPtr)
{
//Problem 2: Access constDataPtr[n].files, etc
}
int main()
{
//...
myKernel grid, threads (mydata);
}
Dzięki za pomoc. :-)