Memory CUDA中常量内存的动态分配

Memory CUDA中常量内存的动态分配,memory,dynamic-data,cuda,constants,nvidia,Memory,Dynamic Data,Cuda,Constants,Nvidia,我试图利用恒定内存,但我很难弄清楚如何嵌套数组。我拥有的是一个数据数组,其中包含内部数据的计数,但每个条目的计数不同。基于下面的简化代码,我有两个问题。首先,我不知道如何分配数据结构成员指向的数据。第二,由于我不能将cudaGetSymbolAddress用于常量内存,所以我不确定是否可以只传递全局指针(这是普通设备内存无法做到的) 感谢您提供的任何帮助。:-) 为什么不使用所谓的“打包”数据表示法呢?这种方法允许您将所需的所有数据放入一维字节数组中。例如,如果您需要存储 struct data

我试图利用恒定内存,但我很难弄清楚如何嵌套数组。我拥有的是一个数据数组,其中包含内部数据的计数,但每个条目的计数不同。基于下面的简化代码,我有两个问题。首先,我不知道如何分配数据结构成员指向的数据。第二,由于我不能将cudaGetSymbolAddress用于常量内存,所以我不确定是否可以只传递全局指针(这是普通设备内存无法做到的)


感谢您提供的任何帮助。:-)

为什么不使用所谓的“打包”数据表示法呢?这种方法允许您将所需的所有数据放入一维字节数组中。例如,如果您需要存储

struct data
{
    int nFiles;
    int nNames;
    int* files;
    int* names;
}
您可以通过以下方式将此数据存储在阵列中:

[struct data (7*4=28 bytes)
    [int nFiles=3 (4 bytes)]
    [int nNames=2 (4 bytes)]
    [file0 (4 bytes)]
    [file1 (4 bytes)]
    [file2 (4 bytes)]
    [name0 (4 bytes)]
    [name1 (4 bytes)]
]

我认为恒定内存是64K,您无法使用
cudamaloc
动态分配它。它必须被声明为常数,比如

__constant__ data mydata[100];
同样,你也不需要释放它。此外,您不应该通过指针将引用传递给它,而应该将其作为全局变量访问。我试着做了一件类似的事情,但它给了我segfault(在devicemu中)。

不,你不能那样做

常量内存(最大64KB)只能在编译之前硬编码

但是,您可以动态分配纹理内存,该内存也缓存在设备上

__constant__ data mydata[100];