gpt4 book ai didi

cuda - CUDA 在哪里为内核分配堆栈帧?

转载 作者:行者123 更新时间:2023-12-03 20:18:08 26 4
gpt4 key购买 nike

我的内核调用因“内存不足”而失败。它大量使用了堆栈帧,我想知道这是否是其失败的原因。

使用 --ptxas-options=-v 调用 nvcc 时,它会打印以下配置文件信息:

    150352 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info : Used 59 registers, 40 bytes cmem[0]

硬件:GTX480、sm20、1.5GB设备内存、48KB共享内存/多处理器。

我的问题是堆栈帧在哪里分配:在共享、全局内存、常量内存中,..?

我尝试了每块 1 个线程,以及每块 32 个线程。同样的“内存不足”。

另一个问题:如果寄存器总数不超过多处理器上可用寄存器的数量(我的卡为 32k),则只能增加驻留在一个多处理器的线程数。类似的东西是否适用于堆栈帧大小?

最佳答案

堆栈在本地内存中分配。按物理线程分配(GTX480:15 SM * 1536 线程/SM = 23040 线程)。您正在请求 150,352 字节/线程 => ~3.4 GB 的堆栈空间。如果大小那么高,CUDA 可能会减少每次启动的最大物理线程数。 CUDA 语言的设计并不是为了每个线程都有一个大的堆栈。

在寄存器方面,GTX480 每个线程限制为 63 个寄存器,每个 SM 限制为 32K 个寄存器。

关于cuda - CUDA 在哪里为内核分配堆栈帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7810740/

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