在我的C++程序ubuntu上執行時,我有我在for循環訪問兩次大2D dynamic array
(約25948520)
。
到動態陣列的訪問是random
。
我的應用程序是時間所以,我想盡可能減少訪問二維數組的時間
有沒有什麼辦法可以減少隨機訪問動態數組,因爲它很大(每個數組元素都存儲int,bool ,char的向量)
其次,我不必迭代通過數組,因爲我知道確切的索引,我必須找到一定的值。性能改進
請提出一些替代方案來實現上述任務?
增加分頁內存是否會導致更好的性能?
在我的C++程序ubuntu上執行時,我有我在for循環訪問兩次大2D dynamic array
(約25948520)
。
到動態陣列的訪問是random
。
我的應用程序是時間所以,我想盡可能減少訪問二維數組的時間
有沒有什麼辦法可以減少隨機訪問動態數組,因爲它很大(每個數組元素都存儲int,bool ,char的向量)
其次,我不必迭代通過數組,因爲我知道確切的索引,我必須找到一定的值。性能改進
請提出一些替代方案來實現上述任務?
增加分頁內存是否會導致更好的性能?
由於您的數組很大並且您進行了隨機訪問,因此您將(大致)在每次訪問時都存在緩存未命中。除非您在訪問之前知道您將訪問的位置,否則無法避免這種情況。如果這樣做,則可以嘗試使用例如SSE預取內在(void _mm_prefetch (char const* p, int i)
)預取位置。
你可以嘗試的是在龐大的頁面上分配你的數組。這會降低您的TLB的預測值,從而減少TLB失誤。但是,巨大的頁面分配支持與操作系統有關。如果你正在使用linux,你可以閱讀如何在這裏使用巨大的頁面分配一個數組:http://linuxgazette.net/155/krishnakumar.html
那麼,你使用矢量>? –
如果沒有附加的基準,這類問題就毫無意義。 「我每秒得到x件東西,我怎麼能得到更多?」和「這段代碼每秒鐘處理x個東西,這個稍微不同的代碼每秒都會產生一些東西,爲什麼會有所不同?」 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * – delnan
@JerryYYRain我只有單一的字符向量。 – Xara