据我所知,在对称多处理器(SMP)系统中,由于每个内核中的各个缓存可能会出现错误共享,代码如下:http://software.intel.com/en-us/articles/avoiding-and-identifying-false-sharing-among-threads
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 }
所以我的问题是:
答案 0 :(得分:3)
并不是一起读取或写入缓存行,而是如果任何CPU写入任何字节,它会使整个缓存行无效。
取决于GPU。至少对于某些NVidia GPU,L1缓存(全局内存)并不一致,因此您还有其他问题。如果禁用L1,则可以解决L2缓存中存在问题的问题。