gpt4 book ai didi

c++ - 加速 3 维数组上的许多访问

转载 作者:行者123 更新时间:2023-11-30 03:58:44 27 4
gpt4 key购买 nike

在作为 QThread 子级的 class Simulation 中,我实现了一个函数,其中我需要访问一个 array 大约 1e9 次.

array 是一个 3 维 array (26x13x23),它被实现为 1 维 array。此 array 的值由该 classinline member function 读取,实现如下:

double getValue(int x, int y, int z) {return array[x*Ly*Lz + y*Lz + z;}

在另一个成员函数中是一个循环,它运行了大约 1e9 次。 xyz 的值随机变化。这大约需要 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/

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