既然clang/llvm沒有計劃在短期內支持OpenMP,而且英特爾正在走TBB庫的道路。在OpenMP之上實現多線程科學庫還是值得的(我正在研究ccv:http://github.com/liuliu/ccv)?儘管所有的批評,我對OpenMP的經驗是相當高興的(它是超級簡單易用,性能增益是合理的)。但是,如果它是一種垂死的技術,C中更容易多線程的替代品是什麼? (不是pthread,而TBB是C++的東西)。謝謝!將時間投入OpenMP實施仍然值得嗎?
回答
新的C標準C11對線程有自己的支持,它遵循分解的pthreads模型。 (C++ 11具有相同的,BTW)這不能代替OpenMP的,但是,它的簡單解決並行循環和做減少等
有一個「新」的工具,是值得研究的,_Atomic
。古典的線程庫只會爲你提供互斥體來避免競爭,在某些數據擁塞的情況下,這種情況會非常嚴重。 _Atomic
終於給出了一個低級語言接口,以便在大多數情況下處理器具有的功能,並且它允許您快速更新計數器或類似線程之間的內容,而無需比賽。
_Atomic
和OpenMP應該沒有問題地合作。
OpenMP是活着的,很好,甚至將它擴展到manycore accellerator類型的東西。不幸的是,在Clang的優先列表中,併入OpenMP並不算高,但所有現有的編譯器廠商(Intel,gcc,pgi等)都不僅致力於現有實施,還致力於標準的持續發展。我不會爲此擔心;最終clang/llvm會出現。
+1我也認爲OpenMP並不是一種垂死的技術,特別是對於Fortran和C來說,因爲沒有太多可行的選擇。 – Francesco 2012-03-19 07:50:43
如果你看C++11 feature support in clang list你會發現併發支持完全不存在。
因此,即使新的C++標準實際上提供了很好的併發性和多線程功能,但如果我們想保持平臺獨立性,我們目前還不能真正使用它。
因此,如果您有現有的OpenMP代碼,請不要冒汗;鐺簡單地不被支持,雖然這是可惜的,但僅僅因爲它而切換到另一種技術是沒有意義的。當然你可能使用TBB,但我會說,根據C++ 11併發性TBB只是一種過渡技術。
個人而言,我很樂意看到OpenMP的最後一個,但目前我們還沒有。
- 1. NSProtocolChecker - 仍然實施?
- 2. 它仍然值得支持ios 3.1嗎?
- 3. Adobe Flex仍然值得學習嗎?
- 4. 實施實時投票系統
- 5. OpenMP - Easy Loop,但仍然無限?
- 6. 如何根據投票後的投票和時間實施項目排序?
- 7. Pybrain實施投擲錯誤
- 8. 按位操作仍然實用嗎?
- 9. 移動JavaScript的性能仍然值得使用eval嗎?
- 10. 期望腳本仍然值得學習嗎?
- 11. 實施RawComparator真的快得多嗎?
- 12. 加入validateRequest = false,但仍然得到
- 13. 是COBOL仍然值得我們學習
- 14. CKEditor添加html實體以嵌入CSS。 CSS仍然有效嗎?
- 15. SQL語句定義,正確實施,仍然說它是豆類
- 16. Starling值得爲我的AS3 MMO實施嗎?
- 17. 將RewriteEngine關閉; ErrorDocument仍然工作嗎?
- 18. 實施依賴注入時,應該注入異常嗎?
- 19. 批+ Oracle,禁用響應,但仍然得到執行時間
- 20. 爲什麼「無法投射類型值」錯誤仍然存在?
- 21. 主塔仍值得學習嗎?
- 22. Facebook仍然返回時間戳格式
- 23. 線程仍然需要很長時間
- 24. 值得花時間學習Qt(C++)嗎?
- 25. 實施CORS時未獲得響應
- 26. 將子類投射到基類後,類型仍然是子類
- 27. ConnectionResult.SUCCESS,但仍然得到GooglePlayServicesNotAvailableException
- 28. 如何實施投票確認系統?
- 29. 仍然支持CollectionBase類嗎?
- 30. .net仍然使用ADO.net嗎?
「很開心」?你有沒有嘗試過早退出OpenMP關鍵部分?或者使用OpenMP不支持的任何其他語言功能,即使它會很有意義? – 2012-03-18 22:11:58
如果你總是編程如下:for(i = 0; i <1000; i ++){a [i] = h [b [i]]; } :) – liuliu 2012-03-18 22:47:29