【问题标题】:Assuring that buffer access is private using openmp使用 openmp 确保缓冲区访问是私有的
【发布时间】:2018-04-11 17:50:22
【问题描述】:

假设我有以下功能:

void fun (){

#pragma omp parallel private(i, x, d0, d1)
    {
        #pragma omp for
        for (i = 0; i < n; i++) {

            d0 = calc_dist();
            d1 = calc_dist();
            x = ((d0 < d1) ? 0 : 1);
            buffer1[i] = x;

            #pragma omp atomic update
            group_size[x] += 1;


        } 

    }
}

我想知道访问 buffer1 buffer1[i] = x 是否仍然是私有的,因为 ix 在 pragma 部分中被设置为私有变量?如果没有,是否可以允许缓冲区访问私有?

【问题讨论】:

    标签: c parallel-processing openmp


    【解决方案1】:

    您对buffer1[i] = x; 的访问示例很好。它之所以有效,是因为在工作共享循环中,没有两个线程会得到相同的i,因此没有两个线程会访问相同的内存。

    请注意,从技术上讲,buffer1[i] 不是私有的,私有仅适用于变量。 buffer1 是一个共享变量

    不得在循环内以任何方式访问buffer1 的任何其他元素。例如。 不要foo = buffer1[i-1]之类的事情。

    这一切都适用于常规 C 数组或指针,但不能有任何别名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-29
      • 2012-12-08
      • 1970-01-01
      相关资源
      最近更新 更多