如何动态生成cudamaloc

如何动态生成cudamaloc,cuda,Cuda,我需要动态执行cudaMalloc来为动态扩展的数组分配内存,数组的大小可以在很大范围内变化。此数组表示两个表上的联接操作的结果,因此它可以是零大小,也可以达到最大数据量(当表包含完全相似的数据时) 如果由于期望表的数据几乎相似而分配内存,我可以得到大量根本没有使用的内存 那么,是否有某种方法可以使用CUDA动态执行内存分配以提高内存使用效率?没有方法动态扩展内核中以前分配的内存。最接近的是费米上的“新建”和“删除”。但是那些分配新的块,它们不会扩展您现有的块。但是,我认为在内核中扩展分配的内存

我需要动态执行cudaMalloc来为动态扩展的数组分配内存,数组的大小可以在很大范围内变化。此数组表示两个表上的联接操作的结果,因此它可以是零大小,也可以达到最大数据量(当表包含完全相似的数据时)

如果由于期望表的数据几乎相似而分配内存,我可以得到大量根本没有使用的内存


那么,是否有某种方法可以使用CUDA动态执行内存分配以提高内存使用效率?

没有方法动态扩展内核中以前分配的内存。最接近的是费米上的“新建”和“删除”。但是那些分配新的块,它们不会扩展您现有的块。但是,我认为在内核中扩展分配的内存没有任何意义。只需预先分配内核可以使用的最大内存量。如果这意味着您没有足够的内存来完成之后的数据处理,那么如果您能够动态扩展内存,那么程序无论如何也无法处理这种情况


此外,如果您要不断扩展分配的内存以保存新结果,则需要线程之间进行大量通信(因为所有线程都必须知道当前已找到多少个结果)。相反,不要试图创建一个没有间隙的结果集。让您的联接结果存储在整个分配的区域中,存储在与线程索引对应的位置。然后,用第二个内核或推力扫描结果,将结果收集在一起。

我不理解这个问题。Cudamaloc是动态的运行时内存分配。你是在问在运行的内核中进行内存分配还是其他什么?你是否希望Cudamaloc自动为你的数组保留额外的内存位,如果你需要扩展它的话?我的意思是,在运行内核之前,数组首先以最小的大小分配,但它可以扩展(额外内存分配)在内核运行时