Я пытаюсь воспользоваться постоянной памятью, но мне трудно понять, как вкладывать массивы. У меня есть массив данных, который имеет значение для внутренних данных, но они различны для каждой записи. Поэтому, основываясь на следующем упрощенном коде, у меня есть две проблемы. Во-первых, я не знаю, как распределять данные, на которые указывают члены моей структуры данных. Во-вторых, поскольку я не могу использовать cudaGetSymbolAddress для постоянной памяти, я не уверен, могу ли я просто передать глобальный указатель (что нельзя сделать с простой __device__ памятью).
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);
}
Спасибо за любую помощь. : -)