gpt4 book ai didi

c - 对每个线程都必须可见的变量的单一计算

转载 作者:行者123 更新时间:2023-12-04 12:33:31 24 4
gpt4 key购买 nike

我正在使用 openMP 计算一个项目。在这个项目中,我需要做一个计算,特别是:

gap = (DEFAULT_HEIGHT / nthreads);

其中 DEFAULT_HEIGHT 是常量,nthreads 是并行区域内的线程数。我的问题是我无法计算并行区域外的变量 gap 因为我需要在里面才能知道 nthreads 。但另一方面,我不想为每个线程计算 gap。而且我不能设置这样的代码:

if(tid==0){
gap = (DEFAULT_HEIGHT / nthreads);
}

因为我不知道每个线程的执行顺序,所以可能是线程 0 最后开始,而我所有其他需要 gap 的计算都是错误的(因为它会未设置)。那么,有没有一种方法可以只进行一次计算而不会出现这个问题?

谢谢

最佳答案

确保 gap 是一个共享变量并将其包含在 OpenMP single 指令中,类似于

#pragma omp single
{
gap = (DEFAULT_HEIGHT / nthreads);
}

只有一个线程会执行包含在single 指令中的代码,其他线程将在包含的代码块末尾等待。

另一种方法是将 gap 设为私有(private),让所有线程计算自己的值。这可能会更快,single 选项需要一些同步,这总是需要时间。如果您担心,请尝试两者并比较结果。 (我认为这就是 ComicSansMS 的建议。)

关于c - 对每个线程都必须可见的变量的单一计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21092814/

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