4

対称型マルチプロセッサ (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  }

だから私の質問は:

  1. 偽共有は主に、メモリが固定バイト数で構成されるチャンクを介してアクセスされ、各プロセスが独自のキャッシュを持っているという事実に由来します。このメモリのチャンクは、一緒に書き込まれ、読み取られます。私の理解は事実に近いですか?
  2. GPU のメモリ アクセス パターンはどうですか? すべてのストリーム プロセッサが 1 セットのキャッシュを共有していますか、それとも個別のキャッシュ セットを持っていますか? 偽共有は GPU コンピューティングでも懸念されますか?
4

1 に答える 1

3
  1. キャッシュラインが一緒に読み書きされるのではなく、CPU がバイトを書き込むと、キャッシュライン全体が無効になるということです。

  2. GPUに依存します。少なくとも一部の NVidia GPU では、(グローバル メモリの) L1 キャッシュが一貫していないため、他の問題が発生します。L1 を無効にすると、コヒーレントな L2 キャッシュで問題が発生する可能性があります。

于 2013-12-15T19:58:03.757 に答える