my previous question我問過了,我觸及了Microsoft提供的ppl.h中的parallel_for主題。
但不久之後,我意識到通過使用它使得他的應用程序不可移植(如果我是正確的,它是特定於Microsoft(ppl.h頭文件))。
在我看來,這打破了在C++編程中的非常重要的方面 - 可移植性,我只是沒有準備去做。
所以我的問題是:
1.我說得對,使用parallel_for時從PPL使你的代碼不可移植(由不可移植我的意思是它不能被其他編譯器比MS一編譯)
2.我正確地說,如果在後期階段,我想爲我正在編寫的應用程序提供UI(在Qt中完成),那麼在我的代碼中使用parallel_for將是一個阻礙,這意味着要麼將parallel_for一些其他(便攜式)替代品或我將無法在Qt和核心VS做UI?
3.什麼是(便攜式)ppl的替代品?ppl
ppl
回答
你可能要考慮英特爾的Thread Building Blocks。與OpenMP不同,TBB實際上使用使用 C++,而不是簡單地在C++編譯器下編譯(即:作爲可以編譯爲C++的C庫)。它有許多你在PPL中看到的東西,但它是跨平臺的。
還有Boost.Thread,它是C++(雖然不像TBB那樣直接),它是跨平臺的。
難道我說得對,利用PPL parallel_for時使你的代碼 不可移植(由不可移植我的意思是 它不能被其他 編譯器比MS一編譯)
不可移植如果你切換平臺本身。如果你想使用其他編譯器,可以在Windows上移植。但是要知道PPL是併發運行時的一部分,併發運行時放置在MSVCRT100.DLL中,並且需要鏈接到此(或靜態鏈接,不需要運行時DLL)。我不確定其他編譯器/鏈接器如何實現,但我相信這是可行的。
難道我說得對,如果在以後 階段,我想提供UI(在 Qt的完成)對我的工作 在momment的應用, 使用parallel_for時我的代碼將是一個阻塞其 將意味着,要麼我會與其他一些 (便攜式)替代更換 parallel_for時或我不會 能夠做到UI在Qt和芯VS
你可以寫你的核心 - 使用PPL/VC++的框架,以及o與QT /其他編譯器中的GUI相對應。爲此,只需製作一個使用PPL的DLL,並且您的GUI應用程序將使用該DLL。我相信你明白我的意思。這也減輕了您的頭腦對可移植性的負擔(在Windows上)。
- 什麼是(便攜式)ppl替代品?
很多,但我更喜歡在Windows/VC++上使用PPL。您可以考慮使用英特爾的TBB。與TBB/ConcRT相比,OpenMP非常麻煩並且沒有優勢
在Casablanca項目中工作的人員已經制作了一個名爲PPLX的便攜式PPL版本。它的許可證號爲Apache 2.0。
他們之前曾表示他們正在與PPL團隊密切合作,以保持兩個版本的同步功能和bugfix明智(請參閱this thread中的最後一篇文章)。
PPLX專注於支持任務。它不支持parallel_for或者parallel_ *匹配的任何東西。 –
無論您使用PPL還是TBB(或HPX)......非常相似的東西都將被標準化。例如見:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4411.pdf
- 1. Cloog-ppl出錯
- 2. GCC 4.7.2需要ppl?
- 3. PPL和Intel媒體SDK
- 4. gcc 4.6.2安裝cloog和ppl
- 5. Windows std :: thread在內部使用PPL嗎?
- 6. C++ PPL - 初始化可組合
- 7. PPL - 許可證和鏈接信息
- 8. concurrent_vector不在parallel_for(PPL)中工作
- 9. 在下面的代碼中使用PPL
- 10. 是那些獲得了10個PPL
- 11. PPL when_all與不同類型的任務?
- 12. 使用PPL和操作符new override
- 13. VC10 PPL或準備STL線程
- 14. VC++ PPL,分配調度到task_group
- 15. C#TPL比C++ PPL更快嗎?
- 16. PPL任務構建的目的是什麼?
- 17. gcc-4.7.2的先決條件:ppl-0.11未能找到gmp-4.3.2
- 18. 如何重構大量使用PPL的代碼。 C++
- 19. 微軟PPL庫:concurrent_vector push_back數據只有一次
- 20. 在GCC 4.6.2安裝中的cloog和ppl錯誤(graphite-ppl.c)
- 21. PPL - 如何配置本機線程的數量?
- 22. OpenNMT混亂使用`Optim.updateLearningRate`的:`valid_loss`作爲`ppl`精氨酸
- 23. PPL task_group安排工作並清理累積的資源
- 24. 線程ID與PPL和並行內存分配
- 25. 與PPL的SIMD對齊問題可組合
- 26. 並行模式庫(PPL)中的COM STA模型?
- 27. C++ PPL - lambda表達式和數據共享
- 28. 在Windows 8 metro應用程序中同步兩個ppl任務
- 29. 如何將PPL線程數設置爲1?
- 30. PPL任務 - 用於桌面應用程序的UI線程中的延續
非常感謝你的回答。尼科爾,有沒有什麼「真正特別的」關於人際關係,這將使人們使用它,即TBB,犧牲便攜性? – smallB
OpenMP不是一個庫,它最重要的是一個編譯器擴展。它在語言*中增加了並行性*。 –
@smallB,在VC10上是的,它有助於調試。 VC10顯示並行任務和並行堆棧,與ConcRT很好地集成。 – Ajay