gpt4 book ai didi

cuda - cuda 4.0 如何支持递归

转载 作者:行者123 更新时间:2023-12-04 22:32:06 26 4
gpt4 key购买 nike

我想知道,cuda 4.0 是否支持使用本地内存或共享内存进行递归?我必须自己维护一个使用全局内存的堆栈,因为系统级递归无法支持我的程序(可能递归级别太多)。当递归变得更深时,线程停止工作。
所以我真的很想知道默认递归在CUDA中是如何工作的,它是否使用共享内存的本地内存?谢谢!

最佳答案

使用递归需要使用 ABI,它要求架构 >= sm_20。 ABI 有一个函数调用约定,其中包括使用堆栈帧。堆栈帧分配在本地内存中(“本地”表示“线程本地”,即线程私有(private)的存储)。有关 CUDA 内存空间的基本信息,请参阅 CUDA C 编程指南。此外,您可能想看看这个先前的问题:Where does CUDA allocate the stack frame for kernels?

对于深度递归函数,可能会超出默认堆栈大小。例如,在我当前的系统上,默认堆栈大小是 1024 字节。您可以通过 CUDA API 函数 cudaDeviceGetLimit() 检索当前堆栈大小.您可以通过 CUDA API 函数 cudaDeviceSetLimit() 调整堆栈大小:

cudaError_t stat;
size_t myStackSize = [your preferred stack size];
stat = cudaDeviceSetLimit (cudaLimitStackSize, myStackSize);

请注意,堆栈帧所需的内存总量为 至少 每个线程的大小乘以内核启动中指定的线程数。由于分配粒度,它通常可能更大。因此,增加堆栈大小会很快耗尽内存,并且您可能会发现深度递归函数需要的本地内存比在 GPU 上分配的要多。

虽然现代 GPU 支持递归,但由于函数调用开销,它的使用可能导致代码性能相当低,因此您可能需要检查您正在实现的算法的迭代版本是否可能更适合 GPU .

关于cuda - cuda 4.0 如何支持递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19013156/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com