2012-03-18 39 views
4

既然clang/llvm沒有計劃在短期內支持OpenMP,而且英特爾正在走TBB庫的道路。在OpenMP之上實現多線程科學庫還是值得的(我正在研究ccv:http://github.com/liuliu/ccv)?儘管所有的批評,我對OpenMP的經驗是相當高興的(它是超級簡單易用,性能增益是合理的)。但是,如果它是一種垂死的技術,C中更容易多線程的替代品是什麼? (不是pthread,而TBB是C++的東西)。謝謝!將時間投入OpenMP實施仍然值得嗎?

+0

「很開心」?你有沒有嘗試過早退出OpenMP關鍵部分?或者使用OpenMP不支持的任何其他語言功能,即使它會很有意義? – 2012-03-18 22:11:58

+1

如果你總是編程如下:for(i = 0; i <1000; i ++){a [i] = h [b [i]]; } :) – liuliu 2012-03-18 22:47:29

回答

0

新的C標準C11對線程有自己的支持,它遵循分解的pthreads模型。 (C++ 11具有相同的,BTW)這不能代替OpenMP的,但是,它的簡單解決並行循環和做減少等

有一個「新」的工具,是值得研究的,_Atomic 。古典的線程庫只會爲你提供互斥體來避免競爭,在某些數據擁塞的情況下,這種情況會非常嚴重。 _Atomic終於給出了一個低級語言接口,以便在大多數情況下處理器具有的功能,並且它允許您快速更新計數器或類似線程之間的內容,而無需比賽。

_Atomic和OpenMP應該沒有問題地合作。

3

OpenMP是活着的,很好,甚至將它擴展到manycore accellerator類型的東西。不幸的是,在Clang的優先列表中,併入OpenMP並不算高,但所有現有的編譯器廠商(Intel,gcc,pgi等)都不僅致力於現有實施,還致力於標準的持續發展。我不會爲此擔心;最終clang/llvm會出現。

+0

+1我也認爲OpenMP並不是一種垂死的技術,特別是對於Fortran和C來說,因爲沒有太多可行的選擇。 – Francesco 2012-03-19 07:50:43

1

如果你看C++11 feature support in clang list你會發現併發支持完全不存在。

因此,即使新的C++標準實際上提供了很好的併發性和多線程功能,但如果我們想保持平臺獨立性,我們目前還不能真正使用它。

因此,如果您有現有的OpenMP代碼,請不要冒汗;鐺簡單地不被支持,雖然這是可惜的,但僅僅因爲它而切換到另一種技術是沒有意義的。當然你可能使用TBB,但我會說,根據C++ 11併發性TBB只是一種過渡技術。

個人而言,我很樂意看到OpenMP的最後一個,但目前我們還沒有。