2012-08-05 288 views
-1

如果我有一個長度爲80億的char陣列。將它分成更小的陣列可以通過改進緩存來提高性能?基本上,我將迭代數組並進行一些比較。如果沒有,那麼使用具有這種長度的數組的最佳方式是什麼。數組和高速緩存

我正在讀取二進制形式的文件到一個數組中,並將在文件的不同部分執行二進制比較。

+0

更多關於mmap你可以添加你想要做更詳細,並且其中的數據從何而來?它正在生成,從磁盤讀取? _exactly_是您對數據進行的處理? – 2012-08-05 09:26:18

+0

@匿名我剛編輯的問題 – 2012-08-05 09:27:55

+0

永遠不要使用「億」這個詞。你的意思是10^9或10^12?如果只做一維連續讀取,將其分解爲較小的部分通常不會改進緩存。如果您談到緩存,非常重要的是使用的硬件體系結構。但是這裏也經常給出的建議是有效的:如果你不是這個領域的專家(看起來如此),讓編譯器爲你做。 – flolo 2012-08-05 09:30:14

回答

1

8 GB的數據量將不可避免地破壞數據的局部性,所以您必須以較小的方式管理您的內存,否則您的操作系統將執行虛擬內存的磁盤交換。

然而,有一種替代 - 所謂的mmap。從本質上講,這允許您將文件映射到虛擬內存空間,然後您的操作系統將執行訪問它的任務並將必要的頁面加載到RAM中,而對此文件的訪問只不過是簡單的內存尋址。

閱讀在http://en.wikipedia.org/wiki/Mmap

1

如果你打算這樣做一次,那就直接穿過它。編程工作可能不值得。

我假設你想這樣做一次又一次,這就是爲什麼你想優化它。它肯定會幫助你知道你的迭代和比較是否需要按順序完成等等。如果沒有一些問題的域名輸入,這裏很難給出一個通用的優化。

如果可以並行處理,而且你必須多次處理,我建議你看看MapReduce技術來解決這個問題。