我正在构建一个在CUDA中提供不同算法的工具包。但是,其中许多算法都使用将由所有线程使用的静态常量全局数据,例如:
static __device__ __constant__ real buf[MAX_NB];
我的问题是,如果我在库中包含所有.cuh文件,那么当实例化库时,所有这些内存都将在设备上分配,即使用户可能只想使用其中一种算法。这有什么办法吗?我是否必须使用典型的动态分配内存?
我希望所有线程都可以在运行时使用最快的常量内存。有什么想法吗?
谢谢!
答案 0 :(得分:1)
.cu文件中的所有常量内存在启动时分配(生成并运行.cubin时,每个.cu属于不同的模块)!因此,要使用许多使用常量内存的不同内核,必须将它们分成.cu文件,以免得到const内存溢出。通常的最大值是64kb。资料来源:http://forums.nvidia.com/index.php?showtopic=185993
答案 1 :(得分:0)
你看过纹理记忆吗?我认为这很棘手,但它可以非常快,可以动态分配。
如果你不能使用纹理,我一直在集思广益,我唯一能想到的就是常量是分配一个常量数组......有些数量希望小于/全部/常数/ all /的标题,但足够大,可以满足任何人在最大用例中需要的内容。然后,您可以根据不同的需要将不同的值加载到此数组中。
(我假设您已经确认为整个库分配常量内存是个问题。是否空间不足,或者初始化时间长,或者是什么?)