假设我有两个功能:
Fun1();
Fun2();
这些函数是独立的,如果我可以并行运行它们(即,在一个线程上运行Fun1
而在另一个线程上运行Fun2
,则任务将得到改进。我正在使用Visual Studio 2012 - 所以打开MP 2.0 。
是否有直接方式(没有任何并行区域线程数测试或 for loop dodginess)来实现这一目标? OpenMP是否提供此类功能?
我尝试将parallel
和task
指令作为开始的地方,但我发现大部分文献都是incomprehensible并且找不到任何示例......
答案 0 :(得分:5)
C ++ 11:
std::thread thread1(Fun1);
Fun2(); // runs on main thread
thread1.join(); // wait for completion
如果您没有C ++ 11,可以将std::thread
替换为boost::thread
并执行相同操作。
答案 1 :(得分:4)
您可以使用sections
工作共享结构:
#pragma omp parallel sections
{
#pragma omp section
Fun1();
#pragma omp section
Fun2();
}
引自OpenMP 2.0 specifications(第2.4.2节):
sections指令标识了非迭代式工作共享 构造,指定要分割的一组构造 在团队中的线程之间。每个部分由一个线程执行一次 团队。
答案 2 :(得分:0)
是的,为什么不在它们周围使用本机线程或一些包装器?据我所知,Open MP比简单的线程运行工具更强大。当然,您可以将某个标志变量标记为共享或私有,并在并行编译指示内部检查它,或者使用schedule指令获取适当的结果(不记得所有OMP功能),但是......
看起来你真的不需要Open MP。