gpt4 book ai didi

c++ - 指针在 OpenMP 并行部分中是私有(private)的吗?

转载 作者:可可西里 更新时间:2023-11-01 16:37:05 26 4
gpt4 key购买 nike

我已将 OpenMP 添加到现有代码库中,以便并行化 for 循环。在 parallel for 区域的范围内创建了几个变量,包括一个指针:

#pragma omp parallel for
for (int i = 0; i < n; i++){
[....]
Model *lm;
lm->myfunc();
lm->anotherfunc();
[....]
}

在生成的输出文件中,我注意到不一致,可能是由竞争条件引起的。我最终通过使用 omp critical 解决了竞争条件。不过,我的问题仍然存在:lm 是每个线程私有(private)的,还是共享的?

最佳答案

是的,在 OpenMP 区域内声明的所有变量都是私有(private)的。这包括指针。

每个线程都有自己的指针拷贝。

它可以让你做这样的事情:

int threads = 8;
int size_per_thread = 10000000;

int *ptr = new int[size_per_thread * threads];

#pragma omp parallel num_threads(threads)
{
int id = omp_get_thread_num();
int *my_ptr = ptr + size_per_thread * id;

// Do work on "my_ptr".
}

关于c++ - 指针在 OpenMP 并行部分中是私有(private)的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7735332/

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