我是openMP的新手。我正在尝试看看事情是如何运作的。我想平均分配循环迭代,以便我的输出为0 1 2 3 4 5 6 7 8 9 10.不是11 22 33或1 3 2 1 3 2 4 5等我也是尝试减少,但我认为这不是这种情况的正确方法。
#pragma omp parallel private(nt, id) num_threads(2)
{
nt = omp_get_num_threads();
id = omp_get_thread_num();
//#pragma omp parallel for schedule(static)
//#pragma omp atomic
for (int i = 0; i < 10; i++) {
std::cout << i;
}
std::cout << std::endl;
}
答案 0 :(得分:2)
在并行区域内,您必须使用
#pragma omp parallel
{
...
#pragma omp for
for (...) {
....
}
}
#pragma omp parallel for
是parallel
和for
的组合结构,如果您已经在并行区域内,则该结构不正确。
请注意,订单本质上是非确定性的。您可以使用和ordered
子句序列化,但这通常会违背并行处理的目的。另请参阅此question/answer。
另请注意,并行写入流会产生乱码输出。如果必须,请使用#pragma omp critical
保护输出。