gpt4 book ai didi

c++ - 使用 OpenMP 并行化 for 循环

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:30 25 4
gpt4 key购买 nike

我是 OpenMP 的新手。当我使用

并行化 for 循环时
  #pragma omp parallel for num_threads(4)
for(i=0;i<4;i++){
//some parallelizable code
}

是否保证每个线程都只取一个i的值?当num_threads不等于或不均分for循环的总次数时,一般如何在线程之间分配循环工作?有没有我可以使用的命令来指定每个线程只取 i 的一个值,或者每个线程取 i 的值的数量?

最佳答案

循环结构中的工作划分由时间表决定。如果不存在 schedule 子句,则使用 def-sched-var 计划,这是实现定义的。

您可以使用 schedule (static, 1),在您的情况下,它保证每个线程都将恰好获得一个值。

我强烈建议您查看 OpenMP specification , 表 2.5 和 2.7.1.1。

做出这种假设可能有合理的理由,但通常循环代码的正确性不应该依赖于此。我主要将其视为性能提示。

根据您的用例,您可能需要考虑任务或只是并行构造。如果您依赖循环的这些细节,请确保它在标准中有明确规定,而不是在您的特定实现中有效

关于c++ - 使用 OpenMP 并行化 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39443821/

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