我很想知道在C++0x提供良好的并行构造的同时,使用OpenMP (假设您是一名C++程序员,因此可以链接到第三方库)的优点。
有没有人能帮我找个专业人士。还有缺点。在C++0x内置构造上使用OpenMP?
发布于 2011-01-12 03:20:03
我必须承认我还没有深入研究C++0x,但就我所见,它“仅仅”提供了一些用于泛型并行化的原语。
另一方面,OpenMP是一种相对较高级别的抽象,用于并行代码,其目的只有一个:通过跨多个CPU核心分配工作来提高性能(而不是提高UI响应性,或与异步通道通信)。
OpenMP让这一切变得非常简单,因为它提供了一种紧凑的语法,并自动完成了许多工作,例如,管理线程池和调度线程以均匀分配工作。在最好的情况下,这意味着将现有算法并行化就像将以下代码放入代码中一样简单(在适当的位置):
#pragma omp parallel for(当然,这通常会更复杂一些。)
然而,这样做的代价是双重的:
void f() {#杂注omp critical { return;}}
这是因为您不能过早地离开OpenMP“块”。令人沮丧的是,
yield命令,也没有fetch_and_add原语,也没有compare_and_swap或LL/CS。发布于 2011-01-12 03:19:17
对于与gcc一起的Open MP,libgomp是随gcc自己提供的,而不是第三方。这是我的理解,这是类似的其他编译器。
https://stackoverflow.com/questions/4661619
复制相似问题