簡體   English   中英

什么是推薦的大數據處理C ++並行化庫

[英]What are the recommended C++ parallelization libraries for large data processing

有些人可以推薦在C ++中進行並行化的方法,當要執行的數據非常龐大時。 我一直在閱讀有關openMP和英特爾TBB在C ++中進行並行化的內容,但尚未對它們進行過實驗。 哪些對並行數據處理更好? 還有其他圖書館/方法嗎?

OpenMP和Intel TBB都可供本地使用,因為它們有助於編寫多線程應用程序。

如果您擁有真正龐大的數據集,則可能需要在多台計算機上拆分負載 - 然后使用Open MPI等庫來進行MPI並行編程。 Open MPI有一個C ++接口,但您現在還面臨一個網絡組件和一台計算機沒有的管理問題。

“大”和“數據處理”在這里涵蓋了很多,如果沒有更多的信息,很難給出明智的答案。

如果數據處理是“令人尷尬的並行” - 如果它涉及進行大量和完全獨立的計算 - 那么就有一百萬個可以工作的東西,而這只是找到與你的代碼相匹配的東西的問題。背景。

如果它不是令人尷尬的並行,但幾乎是如此 - 計算需要大量的數據,但只是將它提煉成一小撮數字 - 那里的數量更少,但仍有很多選擇。

如果計算比這更緊密耦合 - 你需要處理器在大塊數據上串聯工作,那么你可能會遇到備用數據庫 - 編譯器的OpenMP功能,如果它可以在一台機器上運行(那里有) TBB,但通常用於數字運算OpenMP更快更容易)或MPI如果它同時需要多台機器。 你提到過C ++; Boost有一個非常好的MPI層。

但是考慮使用哪個庫進行並行化可能首先考慮問題的錯誤結束。 在許多情況下,您不一定需要直接處理這些圖層。 如果數字運算涉及大量的線性代數(例如),那么PLASMA(用於多核機器 - http://icl.cs.utk.edu/plasma/ )或PetSC,它支持分布式存儲器,例如,多個計算機( http://www.mcs.anl.gov/petsc/petsc-as/ )是不錯的選擇,可以完全隱藏並行實現的實際細節。 其他類型的技術也有其他庫。 最好考慮一下您需要做什么樣的分析,並查看現有工具包是否具有您需要的並行化數量。 只有當你確定答案是肯定的,你才會開始擔心如何推出自己的答案。

MPI在單個本地計算機上也很有用。 它將在多個內核/ CPU之間運行一個作業,雖然這可能是一種過度殺手,但與線程相比,它確實意味着您可以將作業移動到沒有更改的集群。 大多數MPI實現還優化本地作業以使用共享內存而不是TCP來進行數據連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM