人的替代品

时间:2011-06-30 10:34:01

标签: c++ qt visual-c++ portability parallel-processing

my previous question我问过,我触及了微软提供的ppl.h中的parallel_for主题。
但是在我意识到通过使用它之后不久,一个使他的应用程序不可移植(如果我是对的,它是特定于Microsoft(ppl.h头))。
在我看来,这打破了C ++编程的一个非常重要的方面 - 可移植性,我只是不准备这样做 所以我的问题是:
1.我是否正确地说,使用ppl中的parallel_for会使您的代码不可移植(通过不可移植我的意思是它不能由其他编译器编译而不是来自MS的编译器)
2.我是否正确地说,如果在以后的阶段我想为我正在处理的应用程序提供UI(在Qt中完成),在我的代码中使用parallel_for将是一个障碍,这意味着要么我' ll用其他(便携式)替代方案替换parallel_for,否则我将无法在Qt和VS中执行UI? 3. ppl的(便携式)替代品是什么?

4 个答案:

答案 0 :(得分:15)

您可能需要考虑英特尔的Thread Building Blocks。与OpenMP不同,TBB实际上使用 C ++,而不是简单地在C ++编译器下编译(即:作为可以编译为C ++的C库)。它有许多你在PPL中看到的东西,但它是跨平台的。

还有Boost.Thread,它是C ++(尽管不如TBB那么直接),它是跨平台的。

答案 1 :(得分:5)

Casablanca项目上工作的人一直在制作PPL的可移植版本,称为PPLX。它是根据Apache 2.0许可证授权的。

他们之前曾表示他们正在与PPL团队紧密合作,以保持两个版本的同步功能和错误修正(参见this thread中的最后一篇文章)。

答案 2 :(得分:2)

无论您使用的是PPL还是TBB(或HPX)......非常相似的东西都将被标准化。例如,请参阅:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4411.pdf

答案 3 :(得分:0)

  

我是否正确地说使用   来自ppl的parallel_for会产生你的代码   不可移植(通过不可移植我的意思是   它不能被其他人编译   编译器而不是来自MS的那个

如果您切换平台本身,则无法移植。如果您想使用其他编译器,可以在Windows上移植。但是要知道PPL是并发运行时的一部分,它放在MSVCRT100.DLL中,你需要链接到它(或静态链接,在运行时不需要DLL)。我不确定如何使用其他编译器/链接器,但我相信它是可行的。

  

我是否正确地说,如果以后   阶段我想提供UI(完成   Qt)我正在研究的应用程序   在妈妈,使用parallel_for   我的代码将是一个阻碍   意味着要么我会替换   parallel_for与其他一些   (便携式)替代或我不会   能够在Qt中做UI并在VS中做核心

您可以使用PPL / VC ++和QT / other-compiler中的其他GUI对应编写核心框架。为此,只需创建一个使用PPL的DLL,您的GUI应用程序将使用该DLL。我相信你明白我的意思。这也减轻了您对可移植性的负担(在Windows上)。

  1. ppl的(便携式)替代品是什么?
  2. 很多,但我更喜欢在Windows / VC ++上使用PPL。您可以考虑使用英特尔的TBB。 OpenMP很麻烦,与TBB / ConcRT相比没有优势。