我需要动态执行cudaMalloc为动态扩展阵列分配内存,这个大小可以在很大范围内变化。此数组表示两个表上的连接操作的结果,因此它可以是零大小或达到最大数据量(如果表包含完全相似的数据)。
如果由于期望表的数据几乎相似而分配内存,我可以获得大量未完全使用的内存
那么,有没有办法用CUDA动态执行内存分配以提高内存使用率?
答案 0 :(得分:2)
无法动态扩展内核中以前分配的内存。你得到的最接近的是费米的'新'和'删除'。但是那些分配新的块,它们不会扩展你现有的块。但是,我没有看到尝试扩展内核中分配的内存的任何意义。只需分配内核可以预先使用的最大内存量。如果这意味着您没有足够的内存来完成之后的数据处理,那么无论如何,如果您能够动态扩展内存,程序将无法处理该情况。
此外,您将不断扩展分配的内存以保存新结果的方案需要在线程之间进行大量通信(因为所有线程都必须知道当前已找到多少结果)。相反,不要尝试创建没有间隙的结果集。让连接的结果存储在整个分配区域中,与线程索引对应的位置。然后,使用第二个内核或使用Thrust扫描结果以一起收集结果。