0

実際に 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 つのコアに割り当てることです。それを行うためのより良い方法 (よりキャッシュに優しい) はありますか?

ありがとう!ボブ

4

1 に答える 1