gpt4 book ai didi

c - OpenMP 和 C99 数据

转载 作者:行者123 更新时间:2023-12-01 18:28:18 25 4
gpt4 key购买 nike

OpenMP 如何处理并行部分内声明的数据?在 C99 之前,我会使用 private() 子句来指定线程本地数据,例如

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

既然 C99 允许混合数据和代码,我更喜欢在使用变量之前声明它们。在循环范围内声明数据是否保证它是线程私有(private)的?例如,以下内容有效吗?

#pragma omp parallel for
for (int i=0; i<n; i++) {
int x=i;
}

我尝试添加 private(x) 以防万一,但我的编译器对象(可能是因为 x 尚未声明)。

最佳答案

某些变量(包括在并行构造中声明的变量)具有预先确定的数据共享属性(例如,您不能将它们声明为共享私有(private))。这些在 OMP3 标准第 2.9.1.1 节中定义。

在本例中,OpenMP Standard 3.0 ,2.9.1.1:(p78,第 12 行)“在构造内部的作用域中声明的具有自动存储持续时间的变量是私有(private)的。”我很确定 OpenMP 中一直都是这样。所以是的,在您的 C99 示例中,i 和 x 是私有(private)的;另一方面,我理解同一部分说如果 x 被声明为静态,它就会被共享。我认为在这方面,它或多或少符合您的期望。

关于c - OpenMP 和 C99 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4711322/

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