在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的(便携式)替代品是什么?
答案 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上)。
很多,但我更喜欢在Windows / VC ++上使用PPL。您可以考虑使用英特尔的TBB。 OpenMP很麻烦,与TBB / ConcRT相比没有优势。