c++ - 如何优化指针间接层

标签 c++ c performance optimization gcc

我正在尝试在繁重的计算应用程序中优化这类事情:

说我有一个

 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/

相关文章:

c++ - 将 std::vector<double> 从 C++ 包装到 C 以便在 Swift 中使用

c - 时间不正确,但代码似乎正确 :S (unexpected outcome)

javascript - 为 Codewars 练习优化 JavaScript

algorithm - 如何找到这个函数的 T(n)?

java - Hibernate SQL In 子句使 CPU 使用率达到 100%

c++ - 使用父窗口的控件打开新窗口

c++ - 指示 double 值尚未初始化的最佳方法是什么?

iphone - 如何在 iphone 中将 C++ 代码转换为 Objective C 代码?

c - 使用指针算术困惑

c - 如何理解在宏中有# 或## 的情况下重新扫描替换 token 序列以获得更多定义的标识符?