url: https://dazuozcy.github.io/posts/introdution-to-openmp-intel/#23-%E5%8F%AF%E6%80%95%E7%9A%84%E4%B8%9C%E8%A5%BF%E5%86%85%E5%AD%98%E6%A8%A1%E5%9E%8Batomicsflushpairwise%E5%90%8C%E6%AD%A5
视频:https://www.bilibili.com/video/BV1SW411s7ST/?spm_id_from=333.999.0.0&vd_source=7a1a0bc74158c6993c7355c5490fc600
关于 pairwise synchronization 的定义如下
一个例子,生产者-消费者模型的例子。
int main()
{
double* A, sum, runtime;
int flag = 0;
A = (double*)malloc(N * sizeof(double));
fill_rand(N, A); // producer: fill an array of data
sum = Sum_arrat(N, A); // consumer: sum the array
return 0;
}
将上述例子用OpenMP并行化,如下所示,这个改法有个极低概率的bug,就是flag = 1;的操作不算原子的。
int main()
{
double* A, sum, runtime;
int flag