2014-06-23 83 views
-1

在我的C++程序ubuntu上執行時,我有我在for循環訪問兩次大2D dynamic array(約25948520)
到動態陣列的訪問是random
我的應用程序是時間所以,我想盡可能減少訪問二維數組的時間
有沒有什麼辦法可以減少隨機訪問動態數組,因爲它很大(每個數組元素都存儲int,bool ,char的向量)
其次,我不必迭代通過數組,因爲我知道確切的索引,我必須找到一定的值。性能改進

請提出一些替代方案來實現上述任務?

增加分頁內存是否會導致更好的性能?

+0

那麼,你使用矢量>? –

+2

如果沒有附加的基準,這類問題就毫無意義。 「我每秒得到x件東西,我怎麼能得到更多?」和「這段代碼每秒鐘處理x個東西,這個稍微不同的代碼每秒都會產生一些東西,爲什麼會有所不同?」 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * – delnan

+0

@JerryYYRain我只有單一的字符向量。 – Xara

回答

1

由於您的數組很大並且您進行了隨機訪問,因此您將(大致)在每次訪問時都存在緩存未命中。除非您在訪問之前知道您將訪問的位置,否則無法避免這種情況。如果這樣做,則可以嘗試使用例如SSE預取內在(void _mm_prefetch (char const* p, int i))預取位置。

你可以嘗試的是在龐大的頁面上分配你的數組。這會降低您的TLB的預測值,從而減少TLB失誤。但是,巨大的頁面分配支持與操作系統有關。如果你正在使用linux,你可以閱讀如何在這裏使用巨大的頁面分配一個數組:http://linuxgazette.net/155/krishnakumar.html

+0

你能否提供一個例子來說明如何將數組分配給大頁面? – Xara

+1

@Zara:添加了指向教程的鏈接。但是,所有巨大的頁面內容都依賴於操作系統。 – gexicide