在作为 QThread
子级的 class Simulation
中,我实现了一个函数,其中我需要访问一个 array
大约 1e9 次.
array
是一个 3 维 array
(26x13x23),它被实现为 1 维 array
。此 array
的值由该 class
的 inline member function
读取,实现如下:
double getValue(int x, int y, int z) {return array[x*Ly*Lz + y*Lz + z;}
在另一个成员函数
中是一个循环,它运行了大约 1e9 次。 x
、y
和z
的值随机变化。
这大约需要 5 到 6 秒。
有没有可能加快对这样的数组
的访问或我可以使用的替代方法?
最佳答案
是的,我相信是
如果每个索引均匀采样,并且可以重新排列索引,那么您应该使变化最快的索引(Z?)具有最大的维度,而变化最慢的索引具有最小的维度
对于现代 CPU(大型 L3 缓存、预取器、大型缓存行),必须使代码支持线性访问
和 x*Ly*Lz + y*Lz + z
最好改为 x*Lyz + y*Lz + z
或 (x *Ly + y)*Lz + z
,你省了一次乘法
关于c++ - 加速 3 维数组上的许多访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27276444/