J'essaie de tirer parti de la mémoire constante, mais j'ai du mal à comprendre comment imbriquer des tableaux. Ce que j'ai est un tableau de données qui a des comptes pour les données internes, mais ceux-ci sont différents pour chaque entrée. Donc, basé sur le code simplifié suivant, j'ai deux problèmes. D'abord je ne sais pas comment allouer les données pointées par les membres de ma structure de données. Deuxièmement, puisque je ne peux pas utiliser cudaGetSymbolAddress pour la mémoire constante, je ne suis pas sûr de pouvoir passer le pointeur global (ce que vous ne pouvez pas faire avec la simple mémoire __device__).Allocation dynamique de la mémoire constante dans 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);
}
Merci pour toute aide offerte. :-)