矢量<矢量<int>的&GT;初始化时耗时太长</vector <int>

时间:2013-10-17 17:21:09

标签: c++ stdvector

我有一些用c ++编写的代码,这是一个简单的程序,可以找到具有3000多个顶点的图形的成对dmin。所有边都具有相同的权重1.所以我在所有顶点对上做BFS。

我的程序运行速度不够快,所以我使用Xcode 4.2.1的product-&gt;配置文件对我的代码进行了分析。 它称为“乐器”工具。过了一会儿,我想出了如何使用它。但我得到的是非常混乱。突出显示的行如何使用这么多时间?任何想法都受到高度赞赏。

我定义了: 矢量访问; 矢量&lt;矢量&gt; G; //邻接列表 enter image description here

2 个答案:

答案 0 :(得分:1)

仪器运行告诉你,[G [n] [i]]访问的绝大多数时间都是真的。

答案 1 :(得分:1)

声明中的绝大部分时间:(visited[G[n][i]] == false)将导致大量缓存未命中。

请注意G是一个3k * 3k的大矩阵,占用连续的虚拟内存空间,而visited是另一个3k阵列,在另一个位置占用另一个连续内存在虚拟内存空间。根据处理器缓存的容量,访问同一语句中的两个内存位置将导致大量缓存未命中。

要获得加速,请记住locality of reference重写程序。