Ich versuche, den konstanten Speicher auszunutzen, aber es fällt mir schwer herauszufinden, wie man Arrays verschachtelt. Was ich habe, ist ein Array von Daten, die für interne Daten zählt, aber diese sind für jeden Eintrag unterschiedlich. Basierend auf dem folgenden vereinfachten Code habe ich zwei Probleme. Erstens weiß ich nicht, wie ich die Daten zuordnen soll, auf die die Mitglieder meiner Datenstruktur verweisen. Zweitens, da ich cudaGetSymbolAddress nicht für konstanten Speicher verwenden kann, bin ich nicht sicher, ob ich den globalen Zeiger übergeben kann (was Sie nicht mit einfachem __device__ Speicher tun können).Dynamische Zuweisung von konstantem Speicher in 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);
}
Danke für jede Hilfe angeboten. :-)