[英]How to optimize large data manipulation in parallel
我正在開發一個C / C ++應用程序來以通用方式處理大量數據(聚合/選擇/轉換)。 我正在使用AMD Phenom II X4 965黑色版,所以有不同的緩存。
我已經開發了ST和MT版本的功能來執行所有單一操作,毫不奇怪,在最好的情況下,MT版本比ST快2倍,即使使用4個內核。
鑒於我是使用100%可用資源的粉絲,我很生氣只有2倍,我想要4倍。
出於這個原因,我已經花了相當多的時間使用-pg和valgrind ,使用緩存模擬器和調用圖。 該程序正在按預期工作,並且內核正在共享輸入過程數據(即應用於數據的操作),並且當不同的線程加載要處理的數據(數百萬個實體或行 )時,報告緩存未命中(如預期的那樣)。如果現在你知道我想要做什么:-))。 最后我使用了不同的編譯器,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.