GPU如何处理随机访问?

时间:2016-12-31 19:56:16

标签: opengl random-access compute-shader

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

1 个答案:

答案 0 :(得分:2)

流多处理器(SM)具有缓存,但它们相对较小,无法帮助真正的随机访问。

相反,GPU背后的一个想法是掩盖内存访问延迟:即每个SM被分配多个线程来执行,而不是核心。每个空闲时钟都会调度一些未在内存访问时阻塞的线程。当线程所需的数据不在SM缓存中时,线程会停止,直到数据到达并选择另一个线程执行。

请注意,这里的工作假设是你做了一些繁重的计算。如果您所做的只是对大量数据进行轻微计算,例如只是总结了很多32位浮点数,那么很可能瓶颈在内存总线带宽上,并且大多数情况下你的线程会停止等待它们的位到达。< / p>

在实践中,虽然你对数据做了一些繁重的计算。例如。你得到输入法线和材料参数,然后对它们进行大量的光照计算。在这里,当一些线程进行计算时,其他线程等待它们的数据到达。