0
其實我有兩個問題,第一個問題是,考慮緩存,下列哪個代碼更快?C和OpenMP中的嵌套循環優化
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個內核中,有沒有更好的方法來實現它?
謝謝! Bob
您可以在您的平臺上進行測試。但我認爲,第一快。另外,問題:數組元素必須是int嗎?也許,足夠短或字符?通過減少元素大小,您將減少內存流量。 – maxihatop