了解GPU堆内存和驻留warp

时间:2012-10-31 02:53:54

标签: cuda

驻留warp的数量是否也受用户指定的堆大小的限制?

例如,如果每个线程需要分配1 MB内存并且堆是否设置为总共32 MB(我假设cudaLimitMallocHeapSize用于每个内核启动而不是每个线程的堆使用,则是那是对的吗?)。在设备上只允许一个warp是真的吗?

1 个答案:

答案 0 :(得分:1)

内核启动(或发布warp或块)不受堆大小的限制。相反,内核启动将失败,如果已发出的线程数(已达到每个线程的malloc,但不是相应的空闲时间)请求的每个线程分配次数无法满足。您可能希望参考CUDA C程序员指南的heap memory allocation section。该部分给出了每线程分配示例代码,您可以轻松修改该代码以向自己证明此行为。只需调整堆大小和启动的线程(或块)数,即可在达到堆限制时查看行为。是的,cudaLimitMallocHeapSize实际上用于整个设备上下文,因此它适用于相关调用cudaDeviceSetLimit()之后的所有内核启动。它不是每线程限制。另请注意,存在一些分配开销。将堆大小设置为128MB并不意味着所有128MB都可用于后续设备malloc操作。提及设备malloc操作仅在CC 2.0及更高版本上可能也是有用的。

相关问题