C ++ 0x并行化构造与OpenMP

时间:2011-01-11 19:14:44

标签: comparison c++11 openmp

我很想知道使用OpenMP的优势(并因此连接到第三方库,假设您是C ++程序员),而C ++ 0x提供了良好的并行结构。

有人能为我提供专业人士吗?和利弊。在C ++ 0x内置构造中使用OpenMP?

2 个答案:

答案 0 :(得分:3)

我不得不承认我还没有深入研究过C ++ 0x,但据我所知,“仅仅”提供了一些通用并行化的原语。

另一方面,OpenMP是一个相对高级的抽象,可以将代码并行化,只有一个目的:通过在多个CPU核心之间分配工作来提高性能(而不是提高UI响应能力,或者与异步通道进行通信)

OpenMP使这一点变得非常简单,因为它提供了一种紧凑的语法并且自动执行很多操作,例如:管理线程池和调度线程以均匀分​​配工作。在最好的情况下,这意味着并行化现有算法就像将以下内容放入代码一样简单(在适当的位置):

#pragma omp parallel for

(当然它通常有点复杂。)

然而,这需要付出双重代价:

  • OpenMP是通过编译指示实现的,并且与C ++语法集成得很差。例如,以下直截了当的代码是非法的:

    void f() {
        #pragma omp critical
        {
            return;
        }
    }
    

    那是因为你不能过早地离开OpenMP“块”。相当糟糕。

  • OpenMP力求尽可能与平台无关。因此,它缺少一些有趣的原语。例如,OpenMP中没有yield命令,没有fetch_and_add原语,也没有compare_and_swap或LL / CS。

答案 1 :(得分:1)

对于使用gcc的Open MP,libgomp自带gcc并且不是第三方。我的理解是,这与其他编译器类似。