【发布时间】:2017-10-19 21:25:54
【问题描述】:
我有两组线程,一组由n个线程执行,另一组由m个线程执行。我想同时启动它们,但我得到的是,第 1 组首先启动,然后是第 2 组。
//group 1
#pragma omp parallel num_threads(n)
{
#pragma omp for
for (int i = 0; i < n; i++) {
function1(i);
}
}
//group 2
#pragma omp parallel num_threads(m)
{
#pragma omp for
for (int i = 0; i < m; i++) {
function2(i);
}
}
我得到的输出是:
function1 is called
function1 is called
function1 is called
...
n
function2 is called
...
m
我期望的输出(只是一个随机的例子):
function2 is called
function2 is called
function1 is called
function2 is called
function1 is called
...
【问题讨论】:
-
如果有某种结构可以让您指定要执行的许多事情并且同时完成所有这些事情,那么您可以使用某种并行循环。
-
这将在很大程度上取决于您的操作系统正在使用的调度程序的时间片,以及您是否使用多个内核以及许多您可能不想处理的事情。你应该问这个问题,你为什么要它这样做?
标签: c++ multithreading openmp