gpt4 book ai didi

opengl - GPU 如何处理随机访问?

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

我阅读了一些关于如何在 opengl 4.3 计算着色器中实现光线追踪器的教程,这让我想到了一些困扰我一段时间的事情。 GPU 究竟是如何处理实现此类操作所需的大量随机访问读取的?每个流处理器都有自己的数据副本吗?似乎系统会因内存访问而变得非常拥挤,但这只是我自己的,可能是不正确的直觉。

最佳答案

流多处理器 (SM) 具有缓存,但它们相对较小,无助于真正的随机访问。
相反,GPU 正在尝试 屏蔽内存访问延迟 :也就是说,每个 SM 分配的执行线程比它拥有的内核多。在每个空闲时钟上,它都会调度一些在内存访问中未被阻塞的线程。当一个线程所需的数据不在 SM 缓存中时,该线程会暂停,直到该数据到达,让其他线程代替执行。
请注意,仅当计算量超过等待数据所花费的时间(例如,每像素照明计算)时,此屏蔽才有效。如果不是这种情况(例如,只是将大量 32 位浮点数相加),那么您可能会在内存总线带宽上遇到瓶颈,并且大多数情况下您的线程将停止等待它们的位到达。
可以帮助使用 SM 的相关内容是 数据局部性 .当多个线程访问附近的内存位置时,一个缓存行获取将带来多个线程所需的数据。例如,在对透视扭曲三角形进行纹理处理时,即使每个片段的纹理坐标可以是“随机的”,但附近的片段仍然可能从纹理中读取附近的纹素。因此,线程之间共享了许多公共(public)数据。
另一方面,光线追踪在数据局部性方面很糟糕。二次射线往往发散很多,并在几乎随机的位置撞击不同的表面。这使得很难将 SM 架构用于光线场景交叉或着色目的。

关于opengl - GPU 如何处理随机访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41411314/

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