其实我有两个问题,第一个是,考虑到缓存,下面哪个代码更快?
int a[10000][10000];
for(int i = 0; i < 10000; i++){
for(int j = 0; j < 10000; j++){
a[i][j]++;
}
}
或者
int a[10000][10000];
for(int i = 0; i < 10000; i++){
for(int j = 0; j < 10000; j++){
a[j][i]++;
}
}
我猜第一个会快得多,因为缓存未命中要少得多。我的问题是,如果您使用的是 OpenMP,您将使用哪种技术来优化这样的嵌套循环?我的策略是将外部循环分成 4 个块并将它们分配给 4 个核心,有没有更好的方法(更友好的缓存)来做到这一点?
谢谢!鲍勃