[英]Using OpenMP to parallelize a for loop
我是OpenMP的新手。 当我使用并行化for
循环时
#pragma omp parallel for num_threads(4)
for(i=0;i<4;i++){
//some parallelizable code
}
是否保证每个线程都只取一个i
值? 当num_threads
不等于for循环的总次数或不平均分配for循环的总次数时,通常如何在线程之间分配循环工作? 是否可以使用命令指定每个线程仅使用i
一个值,或者每个线程使用i
的值个数?
循环结构中的工作划分由进度表决定。 如果不存在schedule
子句,则使用def-sched-var调度,它是实现定义的。
您可以使用schedule (static, 1)
,在您的情况下,它可以确保每个线程都将恰好获得一个值。
我强烈建议您看一下OpenMP规范 ,表2.5和2.7.1.1。
进行这种假设可能有正当的理由,但总的来说,循环代码的正确性不应该依赖于此。 首先,我会将其视为性能提示。
根据您的用例,您可能需要考虑任务或只是并行构造。 如果您将此类详细信息用于循环,请确保在标准中对循环进行了详细说明,而不仅仅是在您的特定实现中有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.