2010-10-04 70 views
4

有些人可以推薦使用C++進行並行化的方法,這時要處理的數據非常龐大。我一直在閱讀關於openMP和英特爾的TBB以用C++進行並行化,但還沒有嘗試過。這些對於並行數據處理更好?任何其他圖書館/方法?什麼是大數據處理推薦的C++並行庫

+2

如果數據的類型正確,您可以考慮使用CUDA/GPU。 – 2010-10-04 15:45:29

+2

不一定:當你有很多相對的計算時,GPU計算就會發光,相對較少的數據I/O,因爲將數據傳輸到GPU的成本可能很高。 – 2010-10-04 17:24:57

+0

@Dirk:當你對所有的數據進行相同的操作時,它也會工作得很好,如果每個數據單元都應該遵循它自己的邏輯,那麼它將不起作用。 – 2010-10-04 18:56:37

回答

5

「大」和「數據處理」涵蓋了很多地方,沒有更多信息很難給出明智的答案。

如果數據處理是「令人尷尬的並行」 - 如果涉及到做大量和大量完全相互獨立的計算 - 那麼就會有一百萬個事情能夠起作用,而這只是一個尋找某種事情的問題匹配您的代碼和背景。

如果它不是令人尷尬的並行,但幾乎如此 - 計算需要大量的數據,但只是將其提取爲數字 - 只有少數幾種選擇。

如果計算結果比這更緊密 - 需要處理器在大塊數據上串聯工作,那麼您可能會遇到備用數據庫 - 編譯器的OpenMP功能,如果它可以在單機(也有TBB,但通常用於數字處理的OpenMP更快更容易)或MPI(如果它需要同時使用多臺機器)。你提到了C++; Boost有一個非常漂亮的MPI層。

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

+0

有趣的觀點在這裏,感謝您的投入。 – 2010-10-11 12:42:05

5

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

如果您擁有真正龐大的數據集,您可能需要將負載分散到多臺機器上 - 然後像Open MPI這樣的庫用於MPI並行編程。 Open MPI有一個C++接口,但是現在您也面臨一個網絡組件以及一些計算機沒有的管理問題。

+0

我正在試驗openMP作爲單臺機器上的第一步,會在多臺機器上嘗試MPI。 – 2010-10-11 12:40:53

3

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