対称型マルチプロセッサ (SMP) システムでは、次のコードについて、各コアの個別のキャッシュが原因で誤った共有が発生する可能性があることを理解しています: http://software.intel.com/en-us/articles/avoiding-and-identifying -false-共有間スレッド
01 double sum=0.0, sum_local[NUM_THREADS];
02 #pragma omp parallel num_threads(NUM_THREADS)
03 {
04 int me = omp_get_thread_num();
05 sum_local[me] = 0.0;
06
07 #pragma omp for
08 for (i = 0; i < N; i++)
09 sum_local[me] += x[i] * y[i];
10
11 #pragma omp atomic
12 sum += sum_local[me];
13 }
だから私の質問は:
- 偽共有は主に、メモリが固定バイト数で構成されるチャンクを介してアクセスされ、各プロセスが独自のキャッシュを持っているという事実に由来します。このメモリのチャンクは、一緒に書き込まれ、読み取られます。私の理解は事実に近いですか?
- GPU のメモリ アクセス パターンはどうですか? すべてのストリーム プロセッサが 1 セットのキャッシュを共有していますか、それとも個別のキャッシュ セットを持っていますか? 偽共有は GPU コンピューティングでも懸念されますか?