実際に 2 つの質問があります。1 つ目は、キャッシュを考慮すると、次のコードのどちらが高速かということです。
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 つのコアに割り当てることです。それを行うためのより良い方法 (よりキャッシュに優しい) はありますか?
ありがとう!ボブ