gpt4 book ai didi

CUDA:为什么每个 block 超过 8 个线程有好处?

转载 作者:行者123 更新时间:2023-12-04 22:14:55 25 4
gpt4 key购买 nike

我是一名数学家,使用 CUDA 进行一些数值积分。我的理解是每个 Nvidia 流式多处理器都有 8 个 CUDA 内核。所以对我来说,每个块使用超过 8 个线程似乎没有任何好处。但是,当我运行我的代码时,通过使用每块 32 个线程而不是每块 8 个线程,我获得了巨大的性能提升。

我还注意到使用超过 12 个块有巨大的 yield (即使我的卡只有 12 个流式多处理器)。

是否有一个原因?

最佳答案

talonmies 和 chaohuang 在评论中提供了很好的信息,你应该调查一下(不知道为什么这些不是答案,但这是他们的要求)。无论如何,我将提供一个简短的部分答案来解释您可能没有考虑的事情。

假设您有 8 个控制线程和 8 个处理器。如果所有 8 个线程中的所有指令都是仅占用一个周期的片上指令,那么所有 8 个线程都将在 n 周期内完成(假设每个线程的 n 总指令数)。

现在假设每个控制线程由 n 指令组成,其中一小部分 r 是片外存储器指令,例如需要 100 个周期才能完成。这 8 个线程现在需要 [(1 - r) + 100r]n 周期才能完成。如果是 r=0.1 ,这大约是前一种情况的 11 倍。

现在假设我们有 16 个线程。当第一批 8 个线程在慢速操作上被阻塞时,其他线程可以执行;片内指令可以执行,片外指令可以启动。因此,不需要 2[(1 - r) + 100r]n 循环来完成所有线程,您可能只需要比 [(1 - r) + 100r]n 多一点。本质上,因为您有一些空间可以将等待线程与其他线程重叠,所以您可以免费添加更多线程。

这就是 GPU 模型的强大之处:大规模并行以克服长延迟。做一点点的工作需要很长时间,但做更多的工作却没有更多的时间。请注意,当算术强度(与上述公式中的 r 相关)很高时,占用率 - 与您准备隐藏延迟的工作量(在线程中)相关 - 对于峰值性能并不是那么重要。您可以使用 CUDA 占用计算器来查看我针对不同场景所描述的效果。

关于CUDA:为什么每个 block 超过 8 个线程有好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11284783/

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