2012-12-29 84 views
7

對於多線程編程,考慮到與HPC應用程序(MPI)的組合,哪一個更好,我們可以說,就功能而言,英特爾®TBB(線程構建模塊)與pthread相媲美嗎?我只在開放mp方面有經驗,但我聽說TBB和Pthread提供了比開放mp更好的線程控制,但TBB或TBB + OpenMP可以提供與pthread相比相似的功能嗎?pthread vs intel TBB及其與OpenMP的關係?

回答

4

pthread是OS基礎結構之上的薄包裝。它允許你創建一個具有給定線程主函數的線程,以及一些同步原語(互斥信號量等)。在Linux下,pthread在clone(2)系統調用之上實現。 Windows下的equivilant被稱爲CreateThread。所有其他線程的東西都建立在這個基礎之上。

Intel TBB是較高級別的,它給出了parallel_forparallel_reduce以及類似於OpenMP的類似更高級別的構造,但實現爲不是語言擴展的庫。

OpenMPI仍然是更高級別的多機分佈式基礎架構,但它非常老式,笨拙。

我的建議是先學習pthread庫,直到完全理解它爲止,然後再查看更高級別的庫。

+0

OpenMPI是消息傳遞接口的特定實現。 –

2

TBB允許您在本機線程功能之上編寫可移植代碼,因此它使代碼在不同的操作系統體系結構上更具可移植性。我不認爲它比pthread更「高效」。

我沒有親自使用過開放式MP,但過去我曾與開發人員一起使用過開放式MP(作爲他們使用的處理器的技術專家),而且它對於某些事情似乎工作得很好,但是其他人比開發自己的代碼更難在開放mp中使用。這完全取決於你在做什麼。 openmp當然有一個好處,就是你可以在沒有openmp選項的情況下重新編譯代碼,而代碼只是按照你期望的那樣直接工作[當然不能傳播]。

使用程序線程方法,您可以更精確地控制線程上發生了什麼,是的。但是這也意味着更多的工作...