首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++0x并行化构造与OpenMP

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

Stack Overflow用户
提问于 2011-01-12 03:14:44
回答 2查看 695关注 0票数 2

我很想知道在C++0x提供良好的并行构造的同时,使用OpenMP (假设您是一名C++程序员,因此可以链接到第三方库)的优点。

有没有人能帮我找个专业人士。还有缺点。在C++0x内置构造上使用OpenMP?

EN

回答 2

Stack Overflow用户

发布于 2011-01-12 03:20:03

我必须承认我还没有深入研究C++0x,但就我所见,它“仅仅”提供了一些用于泛型并行化的原语。

另一方面,OpenMP是一种相对较高级别的抽象,用于并行代码,其目的只有一个:通过跨多个CPU核心分配工作来提高性能(而不是提高UI响应性,或与异步通道通信)。

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

代码语言:javascript
运行
复制
#pragma omp parallel for

(当然,这通常会更复杂一些。)

然而,这样做的代价是双重的:

  • OpenMP是通过编译指示的方式实现的,与C++语法的集成很差。例如,以下看起来简单的代码是非法的:

void f() {#杂注omp critical { return;}}

这是因为您不能过早地离开OpenMP“块”。令人沮丧的是,

  • OpenMP致力于尽可能独立于平台。因此,它缺少一些有趣的原语。例如,OpenMP中没有yield命令,也没有fetch_and_add原语,也没有compare_and_swap或LL/CS。
票数 3
EN

Stack Overflow用户

发布于 2011-01-12 03:19:17

对于与gcc一起的Open MP,libgomp是随gcc自己提供的,而不是第三方。这是我的理解,这是类似的其他编译器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4661619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档