2012-03-20 82 views
1

我需要动态地执行cudaMalloc来为动态扩展数组分配内存,其大小可以在很大范围内变化。这个数组表示两个表上的联接操作的结果,所以它可以是零大小或达到最大数据量(在表中包含完全相似的数据的情况下)。如何动态创建cudaMalloc

如果我的表的数据几乎是类似分配内存由于期望,我能得到这不是在所有

所以使用的内存量巨大,有一些方法与CUDA进行动态内存分配使内存使用效率更高?

+0

我不明白这个问题。 cudaMalloc *是动态的,运行时内存分配。你是在问在内核中运行内存分配,还是其他的东西? – talonmies 2012-03-20 21:28:31

+0

你是否想知道cudaMalloc会自动为你的阵列预留额外的内存空间,你是否需要扩展它? – Bart 2012-03-20 21:46:47

+0

我的意思是在运行内核之前首先以最小的大小分配数组,但在内核运行时可以扩展(额外的内存分配) – dmdkv 2012-03-20 21:49:00

回答

2

无法在内核中动态扩展以前分配的内存。费米最接近的是'新'和'删除'。但是那些分配新的块,他们不扩展你现有的块。但是,我没有看到任何尝试在内核中扩展已分配内存的要点。只需预先分配内核可以使用的最大内存量。如果这意味着您没有足够的内存来完成后续的数据处理,那么无论如何,如果您能够动态扩展内存,程序将无法处理该情况。另外,如果您不断扩展分配的内存以保存新结果,则需要线程之间进行大量的通信(因为所有线程都必须知道当前找到了多少结果)。相反,不要尝试创建没有空白的结果集。让连接的结果存储在与线程索引对应的位置的整个分配区域中。然后,用第二个内核或Thrust扫描结果以将结果收集在一起。