L'Allocation dynamique de la mémoire Constante dans CUDA

Je suis en train de prendre avantage de la constante de mémoire, mais je vais avoir un moment difficile de déterminer 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, autour de l'simplifiée suivante de code, j'ai deux problèmes. D'abord je ne sais pas comment répartir les données pointées par les membres de ma structure de données. Deuxièmement, étant donné que je ne peux pas utiliser cudaGetSymbolAddress constant de mémoire, je ne suis pas sûr si je peux juste passer le pointeur global (vous ne pouvez pas faire avec la plaine __device__ la mémoire).


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. 🙂

OriginalL'auteur Ben | 2008-11-07