使用OpenMP实现多线程,不仅是用在循环处理上【转】

提到使用 OpenMP 实现多线程编程,相对比叫便捷,很多兄弟一定已经很熟悉了。一般的用法都是把 OpenMP 用在 for等 循环上,论坛上好多 OpenMP 在这上的用法也有好多的解释了,我也不班门弄斧了。
 
for 等循环如果要用在 OpenMP 上,一般的限制还是比较多的,比如循环不同序列间的数据或逻辑依赖不能过强,必须可以将其分解为或转化为互相独立的关系。此外,有时候虽然看是做到互相独立,但代价很大,比如加了很多的锁,多线程的效果不是很好。这就导致了对 OpenMP 的使用受到了比较大的限制。一般以我的经验,当 for 循环处理大的矩阵、数组等时,用 OpenMP 比较合适,但如果涉及到了很多的逻辑判断,就不是很理想。
 
从上面可以看出, for 等循环不总是适合使用 OpenMP 。但是不是除了循环, OpenMP 就没有用武之地了呢?当然不是,还可以用 OpenMP section ,如下图说示,原先线性执行的程序被分成了并行的三段:
#pragma omp parallel sections
{
    #pragma omp section
{
   Function1
}
 
    #pragma omp section
{
   Function2
}
 
    #pragma omp section
{
   Function3
}
}
 
这里就给大家讲一个我遇到的使用 Section 的实例:某段程序执行非常繁重的初始化操作,不同部分之间依赖性不大。那么使用了上述 OpenMP 之后,终于并行了,大大加快了初始化进程。

你可能感兴趣的:(多线程,编程,function,parallel)