gpt4 book ai didi

c - 当索引设置为私有(private)时,如何确保访问缓冲区是私有(private)的

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

假设我有以下使用 openmp 的函数:

void fun (){

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

d0 = calc_dist();
d1 = calc_dist();
x = ((d0 < d1) ? 0 : 1);

for (m = 0; m < 2; ++m)
{
buffer1[m] = i*x + m;
}


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


}

}
}

如您所见,我将变量m设为私有(private)。在这种情况下,我想知道 buffer1[m] = i*x + m 行中 buffer1 的更新是否也是私有(private)的,因为 m code> 是私有(private)的,或者它实际上由所有线程原子更新

最佳答案

不,您的代码不正确。

buffer1 是共享的,正如我在您的其他问题中强烈强调的那样。您必须确保每个线程仅在 buffer1 的独占索引上工作。拥有私有(private) m 并不重要,因为多个私有(private) m 实例可以并且将会具有相同的值。

您必须以其他方式保护对 buffer1 的访问,这可以通过 atomic 指令或使用 ordered 指令 来完成。您需要走哪条路取决于您的具体算法。

关于c - 当索引设置为私有(private)时,如何确保访问缓冲区是私有(private)的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49796509/

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