Answers:
引用的位置确实很重要,但是您不必担心太多 ...因为您没有绝对的控制权。
当使用OpenGL / DirectX时,通常对内存布局的控制有限,其余的将由驱动程序完成。例如,您可以尝试多种顶点缓冲区布局,例如使用交错的或非交错的顶点数据,并且取决于您的数据/驱动程序/ GPU性能的不同。剖析并选择最适合您的应用程序。
例如在GPU Gems Pipeline优化中,两次提到了引用位置,第一个是:
以相对顺序的方式访问顶点数据。现代GPU在获取顶点时会缓存内存访问。像在任何内存层次结构中一样,引用的空间局部性有助于最大程度地提高高速缓存中的命中率,从而减少带宽需求。
第二
针对T&L之后的顶点缓存进行优化。现代GPU有一个小的先进先出(FIFO)缓存,用于存储最近转换的顶点的结果。命中此缓存将保存所有转换和光照工作以及管道中较早完成的所有工作。要利用此缓存,必须使用索引基元,并且必须对顶点进行排序,以使网格上的参考局部最大化。有可用的工具(包括D3DX和NVTriStrip(NVIDIA 2003))可以帮助您完成此任务。
在我看来,这些建议遵循我在说的内容,并暗示您对内存布局没有绝对的控制权,但是您拥有的控制权(例如,每个VBO顶点的布局方式可能会对性能产生影响)。
如果您的应用程序性能受到影响,则应首先检测瓶颈,这可能不是参考数据的问题所在,但可能是因为有大量数据没有剔除,例如您没有执行平截头剔除。等等你可以在这里查看我关于这个问题的答案。
我认为您在使用OpenCL / CUDA时应该更加担心引用的局部性,因为您通常可以完全控制内存布局。