我正在尝试在繁重的计算应用程序中优化这类事情:
说我有一个
double d[500][500][500][500];
至少从编译器的角度来看,以下是相当昂贵的
double d[x][y][j][k]
我想告诉编译器它是连续的内存,以方便计算偏移量。
在我的例子中,
我有这样的东西:
double n=0;
for (int i=0; i < someNumber; i++)
{
n+=d[x][i][j][k] /*(some other math calculations)*/;
}
所以我试图通过将它放在一个单独的函数中来优化它
void func( double*** const restrict dMatrix )
{
/* and do some calculations herel*/
}
没有太大帮助:(
有什么优化建议吗?
编辑
我无法重写代码使数组成为一维。我必须和这个多维的野兽一起工作:(
最佳答案
我怀疑问题不是偏移计算而是实际访问内存。当您声明一个 4 维数组并访问具有相邻索引的任何级别的元素时,除了最后一个内存地址实际上彼此相距很远,这会导致大量缓存未命中和显着减速。
关于c++ - 如何优化指针间接层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1404942/