プログラムを並列化するために C で OpenMP を使用しています。私のプログラムには、計算された値を配列に挿入するセクションがあります。コードは次のようになります。
#pragma omp parallel for
for(i=0; i<bignumber; i++) {
arr[i] = mycalc(i);
}
私が学んだことから、このコードは配列でFalse Sharingの問題が発生すると思いますarr
。この問題を回避するために、次のようないくつかの方法を見つけました。
- 配列パディング
- チャンクによるスケジューリング
これら 2 つの方法では、プロセッサのキャッシュ サイズがどれくらい大きいかを知る必要があります。未知のシステムでプログラムを実行したいとします (キャッシュ サイズがどのくらいかわかりません)。キャッシュ サイズを知る必要のないこのコードの回避策はありますか? それとも、プログラムが実行されているシステムのキャッシュ サイズを読み取ることができる C コードでしょうか?