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