gpt4 book ai didi

c - 使用 openmp 确保缓冲区访问是私有(private)的

转载 作者:行者123 更新时间:2023-11-30 14:49:14 25 4
gpt4 key购买 nike

假设我有以下功能:

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 是否仍然是私有(private)的,因为 ix 设置为是 pragma 部分中的私有(private)变量吗?如果不是,是否可以允许私有(private)缓冲区访问?

最佳答案

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

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

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

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

关于c - 使用 openmp 确保缓冲区访问是私有(private)的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49781536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com