优化速度 - C中的4维数组查找

Tia*_*ago 5 c arrays lookup performance

我有一个适应度函数,它根据位于4D数组上的数据对int数组上的值进行评分.分析器说这个功能占用了80%的CPU时间(需要数百万次).我似乎无法进一步优化它(如果它甚至可能).这是功能:

unsigned int lookup_array[26][26][26][26]; /* lookup_array is a global variable */

unsigned int get_i_score(unsigned int *input) {
register unsigned int i, score = 0;

for(i = len - 3; i--; ) 
    score += lookup_array[input[i]][input[i + 1]][input[i + 2]][input[i + 3]];

return(score)
}
Run Code Online (Sandbox Code Playgroud)

我试图将阵列扁平化为单一维度,但性能没有改善.这是在IA32 CPU上运行的.任何CPU特定的优化也很有帮助.谢谢

Nik*_*iki 9

数组项的范围是多少?如果您可以将数组基类型更改为unsigned short或unsigned char,则可能会减少缓存未命中次数,因为较大部分的数组适合缓存.


Tuo*_*nen 5

您的大部分时间可能都会进入缓存未命中状态.如果你可以优化它们,你可以获得巨大的性能提升.

  • 如果lookup_array中有很多零,则可以尝试使用树而不是数组.我想26来自人物az? (2认同)