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

标签 c++ multithreading qt qthread

在作为 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/

相关文章:

多线程可以在单处理器系统上实现吗?

Python 线程和 GIL

c++ - 使用 QSettings 存储 qt 应用程序的设置

qt - QPushButton 问题

java - 如何诊断 Windows Vista 中的 Java JNI EXCEPTION_ACCESS_VIOLATION 错误

c++ - 为什么在这种情况下不能访问基类的成员函数?

c++ - QT:如何退出应用程序并关闭用户界面

c++ - 使用 printf 和 cout 获得不同的输出 - C++

java - 为什么线程执行在下一行执行之前完成

multithreading - 停止 QRunnable 导致主窗口无法关闭