【发布时间】:2010-05-01 10:53:31
【问题描述】:
我正在处理具有以下特征的二维数组:
const int cols = 500;
const int rows = 100;
int arr[rows][cols];
我通过以下方式访问数组 arr 来做一些工作:
for(int k = 0; k < T; ++k) { // for each trainee
myscore[k] = 0;
for(int i = 0; i < cols; ++i) { // for each sample
for(int j = 0; j < rows; ++j) { // for each expert
myscore[k] += delta(i, anotherArray[k][i], arr[j][i]);
}
}
}
所以我担心数组 'arr' 而不是另一个。我需要使它对缓存更友好,并提高速度。我在想也许可以转置数组,但我不知道该怎么做。我的实现结果只适用于方阵。我如何使它适用于非方阵?
另外,将二维数组映射到一维数组会提高性能吗?如果是这样,我该怎么做?最后,关于我如何优化它的任何其他建议......我已经没有想法了,但我知道 arr[j][i] 是我需要进行更改的地方,因为我正在访问列列而不是逐行,因此根本不适合缓存。
谢谢, 赫里斯托
【问题讨论】:
-
示例矩阵是非正方形的。是不是像发布的那样坏了?你能把
rows和cols放在循环条件中,这样我们就可以看到发生了什么? -
对此感到抱歉。我编辑了它
标签: c++ arrays 2d optimization