簡體   English   中英

如何並行優化大數據操作

[英]How to optimize large data manipulation in parallel

我正在開發一個C / C ++應用程序來以通用方式處理大量數據(聚合/選擇/轉換)。 我正在使用AMD Phenom II X4 965黑色版,所以有不同的緩存。

我已經開發了ST和MT版本的功能來執行所有單一操作,毫不奇怪,在最好的情況下,MT版本比ST快2倍,即使使用4個內核。

鑒於我是使用100%可用資源的粉絲,我很生氣只有2倍,我想要4倍。
出於這個原因,我已經花了相當多的時間使用-pgvalgrind ,使用緩存模擬器和調用圖。 該程序正在按預期工作,並且內核正在共享輸入過程數據(即應用於數據的操作),並且當不同的線程加載要處理的數據(數百萬個實體或 )時,報告緩存未命中(如預期的那樣)。如果現在你知道我想要做什么:-))。 最后我使用了不同的編譯器,g ++和clang ++,- O3兩者,性能相同。

我的結論是,由於需要處理大量數據(GB數據),因此最終必須在CPU中加載數據,這是真正的等待時間。 我可以進一步改進我的軟件嗎? 我達到了極限嗎?

我在Linux x86-64,Ubuntu 11.10上使用C / C ++。 我全都耳朵! :-)

它是什么類型的應用程序? 你能告訴我們一些代碼嗎?

正如我評論的那樣,您可能已達到一些硬件限制,如RAM帶寬。 如果你這樣做,沒有軟件技巧可以改善它。

您可以使用MPI,OpenMP或OpenCL(在GPU上)進行調查,但如果不了解您的應用程序,我們將無法提供幫助。

如果使用GCC進行編譯並且如果您想幫助處理器緩存預取,請考慮小心使用和簡化__builtin_prefetch (但使用它太多或太糟糕會降低性能)。

暫無
暫無

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

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