[英]vector<vector<int>> takes too long initialize
我有一些用c ++編寫的代碼,它是一個簡單的程序,可以找到具有3000多個頂點的圖形的成對dmin。 所有邊都具有相同的權重1.所以我在所有頂點對上做BFS。
我的程序運行速度不夠快,所以我使用Xcode 4.2.1的product-> profile對我的代碼進行了分析。 它稱為“樂器”工具。 過了一會兒,我想出了如何使用它。 但我得到的是非常混亂。 突出顯示的行如何使用這么多時間? 任何想法都高度贊賞。
我定義了:矢量訪問; vector <vector> G; //鄰接列表
儀器運行告訴你,訪問[G [n] [i]]的絕大部分時間都是正確的。
在聲明中占絕大多數時間:( (visited[G[n][i]] == false)
將是由於大量緩存未命中。
請注意, G
是一個大的3k * 3k矩陣,占用連續的虛擬內存空間,而visited
是另一個3k陣列,它在虛擬內存空間的不同位置占用另一個連續內存。 根據處理器緩存的容量,訪問同一語句中的兩個內存位置將導致大量緩存未命中。
為了加速,重寫程序時要記住參考的位置 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.