CUDA动态分配和合并(计算能力> 2.0)

时间:2013-03-01 19:19:21

标签: cuda malloc dynamic-allocation

也许有人可以帮助我。我将在我的CUDA内核中使用动态分配,原因很简单,每个块都需要大量的全局内存作为暂存器,并且块的数量大约为4000.静态分配暂存器会有我的偏好,但由于内存大小限制,这根本不可能。我认为在这种情况下动态分配将是有用的,因为内存量现在只是活动块的数量,订购100-200。这一切都作为旁注,让你知道它也没有我的偏好,但在我看来,这是唯一的前进方向。

根据cuda c编程指南B.17部分提到的要点;

  

CUDA in-kernel malloc()函数至少从设备堆中分配大小字节,并返回指向已分配内存的指针,如果存在的内存不足以满足请求,则返回NULL。保证返回的指针与16字节边界对齐。

并根据F.4.2;

  

高速缓存行为128字节,并映射到设备存储器中的128字节对齐段。   在L1和L2中高速缓存的存储器访问由128字节存储器提供服务   事务,而只在L2中缓存的内存访问是由服务的   32字节的内存事务。因此,L2中的缓存可以减少过度获取   例如,在分散的内存访问的情况下。

和5.3.2;

  

驻留在全局内存中或由其中一个内存返回的变量的任何地址   来自驱动程序或运行时API的分配例程始终与至少256个字节对齐。

这是否意味着内核分配没有正确对齐warp到并行访问合并的连续浮点数和cudaMalloc()可能的动态分配?

0 个答案:

没有答案