2012-02-25 93 views
1

我有一個C++程序,在使用OpenMP並行化循環方面效果很好。TBB數據對象是否可與OpenMP一起使用?

但是,還有一些代碼片段 - 那些使用隊列和優先級隊列等的代碼 - 只有在我聲明對它們的訪問權限很重要時才能並行工作。

另一種選擇是使用TBB數據對象,如concurrent_queue。但是,我可以將這些數據對象與OpenMP一起使用,而不使用任何TBB的其餘部分?

來源和鏈接讚賞。

謝謝!

更新

例如,是以下一種TBB和OpenMP的混合允許嗎?

concurrent_queue<int> queue; 
#pragma omp parallel for 
for(int i=0; i<1000; i++) 
    queue.push(i); 
+0

另一種選擇是cilk ++ – pyCthon 2012-02-26 01:45:57

+1

Thanks @pyCthon。它似乎沒有在我的倉庫中可用,所以我不喜歡使用它。不過,我會記住它的。 – Richard 2012-02-26 17:59:24

回答

3

爲了補充他人的答案,您正在尋找的信息也可以在TBB教程中找到(請參閱latest TBB documentation)。幾段摘錄:

英特爾®線程構建模塊與其他線程 包兼容。由於該庫不是爲了解決所有線程問題而設計的,因此它可以與其他線程包無縫地共存。

-

英特爾®線程構建模塊提供高併發容器 類。這些容器可以與原始的Windows *或Linux *線程一起使用,或者與基於任務的編程一起使用。

1

TBB旨在與openMP一起工作,在程序員手冊中列出了哪些工作原理。

您可以隨時將關鍵部分更改爲TBB互斥量,或將std :: mutex更改爲scoped_locks。

0

tbb中的所有併發數據結構和同步對象在OpenMP下都可以正常工作(任務也可以,但這可能有點愚蠢)。

+0

瑞克,你的答案既不包括來源也不包含鏈接。我記得TBB和OpenMP線程可以共存,但這會導致過度使用核心。這不僅愚蠢,而且不好的做法。 – Richard 2012-02-26 18:01:42

+0

我參與了一些數據結構的規範,並且對它們非常熟悉,請看我的配置文件。所有的concurrent_foo數據結構在tbb和openmp中都是線程安全的,鎖和原子類也可以使用。 如果您選擇查找,可以在TBB文檔中找到此信息。 – Rick 2012-02-27 01:44:44

+0

我一直認爲,關於stackoverflow的一個美麗的東西就是它將知識分散到許多來源中的方式集成到一個易於搜索的位置。你的個人資料不是一個明顯的信息來源,也不足以說明你的主張。我一直在瀏覽文檔,但還沒有找到明確或簡潔的答案。如果你知道它在哪裏,我邀請你在這裏發佈。 – Richard 2012-02-27 06:56:06

相關問題