gpt4 book ai didi

variables - OpenMP - for 循环中的变量声明

转载 作者:行者123 更新时间:2023-12-04 22:15:50 28 4
gpt4 key购买 nike

我正在尝试将普通代码改编为并行代码。当我创建一个 for 循环并行时,其中声明了一些变量,这些变量是私有(private)的还是共享的?

当我定义编译指示时,我应该将它们中的每一个都定义为私有(private)吗?

顺便说一句,最后一个问题。我也可以将 for-pragma 与迭代器的初始参数一起使用,对吗?喜欢 for(iter=xlist.begin() ; ... )
我使用最新版本的代码块和 mingw。

最佳答案

在并行区域内声明的任何内容(无论是否为循环)都是私有(private)的,@ejd 的注释中列出的异常(exception)情况除外。您不能在 #pragma 上将其列为私有(private)行,因为变量还不存在。

因此,例如在下面,即使使用 default(none)我们不需要指定 tid 的共享即使你可以;它在并行部分内,因此它对每个线程都是私有(private)的。 (还要注意,您实际上并不需要将 i 指定为私有(private),因为 omp for 的循环索引必然是私有(private)的。)

$ more foo.c
#include <stdio.h>
#include <omp.h>

int main(int argc, char *argv[]) {
int i;

#pragma omp parallel for default(none) private(i)
for(i=0;i<10;i++){
int tid = omp_get_thread_num();
printf("Thread %d gets iteration %d\n", tid, i);
}

return 0;
}
gpc-f103n084-$ !g
gcc -o foo foo.c -fopenmp
$ ./foo
Thread 1 gets iteration 2
Thread 1 gets iteration 3
Thread 3 gets iteration 6
Thread 3 gets iteration 7
Thread 0 gets iteration 0
Thread 0 gets iteration 1
Thread 4 gets iteration 8
Thread 4 gets iteration 9
Thread 2 gets iteration 4
Thread 2 gets iteration 5

关于variables - OpenMP - for 循环中的变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6271774/

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