ppl

2011-06-30 47 views
13
的替代品

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

回答

14

你可能要考慮英特爾的Thread Building Blocks。與OpenMP不同,TBB實際上使用使用 C++,而不是簡單地在C++編譯器下編譯(即:作爲可以編譯爲C++的C庫)。它有許多你在PPL中看到的東西,但它是跨平臺的。

還有Boost.Thread,它是C++(雖然不像TBB那樣直接),它是跨平臺的。

+0

非常感謝你的回答。尼科爾,有沒有什麼「真正特別的」關於人際關係,這將使人們使用它,即TBB,犧牲便攜性? – smallB

+0

OpenMP不是一個庫,它最重要的是一個編譯器擴展。它在語言*中增加了並行性*。 –

+0

@smallB,在VC10上是的,它有助於調試。 VC10顯示並行任務和並行堆棧,與ConcRT很好地集成。 – Ajay

0

難道我說得對,利用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上)。

  1. 什麼是(便攜式)ppl替代品?

很多,但我更喜歡在Windows/VC++上使用PPL。您可以考慮使用英特爾的TBB。與TBB/ConcRT相比,OpenMP非常麻煩並且沒有優勢

5

Casablanca項目中工作的人員已經制作了一個名爲PPLX的便攜式PPL版本。它的許可證號爲Apache 2.0

他們之前曾表示他們正在與PPL團隊密切合作,以保持兩個版本的同步功能和bugfix明智(請參閱this thread中的最後一篇文章)。

+0

PPLX專注於支持任務。它不支持parallel_for或者parallel_ *匹配的任何東西。 –