投入OpenMP实施还是值得的吗?
由于clang / llvm没有计划在短期内支持OpenMP,而且英特尔正走在TBB库的道路上。 在OpenMP之上实现多线程科学库还是值得的(我正在研究ccv:http://github.com/liuliu/ccv)? 尽管所有的批评,我对OpenMP的经验是相当高兴的(它是超级简单易用,性能增益是合理的)。 但是,如果它是一种垂死的技术,C中更容易多线程的替代品是什么? (不是pthread,而TBB是C ++的东西)。 谢谢!
OpenMP是活着的,很好,甚至将它扩展到许多加速器类型的东西。 不幸的是,在Clang的优先列表中,并入OpenMP并不算高,但所有现有的编译器厂商(Intel,gcc,pgi等)都不仅致力于现有实施,还致力于标准的持续发展。 我不会为此担心; 最终clang / llvm会出现。
如果您查看clang列表中的C ++ 11功能支持,您会注意到并发支持完全不存在。
因此,即使新的C ++标准实际上为并发和多线程提供了很好的功能,但如果我们想保持平台独立性,我们目前还不能真正使用它。
因此,如果您有现有的OpenMP代码,请不要冒汗; 铛简单地不被支持,虽然这是可惜的,但仅仅因为它而切换到另一种技术是没有意义的。 当然,你可以使用TBB,但我想说的是,鉴于C ++ 11的并发性,TBB只是一种过渡技术。
就我个人而言,我很乐意看到OpenMP的最后一个,但目前我们还没有。
新的C标准C11对线程有自己的支持,它遵循分解的线程模型。 (C ++ 11具有相同的顺序,顺便说一句)但是,它无法取代OpenMP,因为它简单易行,可以解决并行循环和缩减等问题。
有一个“新”工具值得研究, _Atomic
。 古典的线程库只会为你提供互斥体来避免竞争,在某些数据拥塞的情况下,这种情况会非常严重。 _Atomic
终于给出了一个低级语言界面到处理器在大多数情况下,无论如何功能,它可以让你做柜台或类似的东西线程之间的快速更新,而比赛。
_Atomic
和OpenMP应该没有问题地合作。
上一篇: Is it still worth to invest time into OpenMP implementations?
下一篇: What are the differences between Intel TBB and Microsoft PPL?