小编Chr*_*oph的帖子

C++代码执行缓慢

我花了最后一周将一个递归的Branch&Cut算法从Matlab移植到C++,并希望看到解决方案时间显着减少,但是听起来令人难以置信,情况正好相反.现在我不是C++的专家,所以我下载了昏昏欲睡的探查器并试图找到潜在的瓶颈.我想问一下,我是否从中得出了正确的结论,或者我是否正在寻找一个完全错误的方向.

我让代码运行137秒,这就是分析器显示的内容(下面的许多其他条目,但它们并不重要):

在此输入图像描述

因此,如果我做对了,花了98秒来创建新对象,花了34秒来释放内存(即删除对象).

我将通过我的代码,看看我能做得更好的地方,但我也想问一下你是否对产生这种行为的频繁错误或坏习惯有任何暗示.我想到的一件事是我在代码中使用了很多临时的std :: vector来计算东西,所以这可能很慢.

为了防止你失明,我不会在看了一会之前发布我的代码,但如果我不能自己解决这个问题,我会回来的.

c++ performance profiler

3
推荐指数
1
解决办法
183
查看次数

C++函数调用非常慢

我编写了一个递归的Branch&Cut算法,现在正试图加快执行速度.我注意到了一些非常好奇的东西:有一次我调用一个函数来计算一些向量向量.使用clock(),我测量了在调用它的文件中以及在函数本身中花费的时间.可视化:

tic
foo(args);
time1 = toc
Run Code Online (Sandbox Code Playgroud)

void foo(args) {
  tic
  //do stuff
  time2 = toc
}
Run Code Online (Sandbox Code Playgroud)

我的问题是time1大约是time2的3倍,这对我来说毫无意义.实际函数有很多参数,如下:

void allcomb( std::vector<int> &Vin, 
              std::vector<int> &Vprev, 
              Graph F, 
              int t, 
              const int n, 
              const int numofdests, 
              int Time_hor,
              std::vector<int> &truckdest, 
              std::vector<int> &truck_dest_index, 
              std::vector<int> &descroflabel, 
              std::vector<int> &labelofdescr, 
              std::vector<std::vector<double> > &short_path_time,  
              std::vector<std::vector<double> > &short_path_fuel, 
              double eta, 
              std::vector<std::pair<int,int> >& next_hub,
              std::vector<std::pair<double,double> >& distanceto_next_hub, 
              std::vector<std::vector<int> >& Choices )
Run Code Online (Sandbox Code Playgroud)

我通过引用传递所有向量以避免复制它们,但也许我错过了什么?或者通常使用那么多参数调用函数通常很慢?此外,进入该功能使用的时间比退出该功能的时间长,这可能很重要.

如果您需要更多信息,请告诉我.谢谢和欢呼,Christoph


提升Graph对象是​​问题,感谢发现它:)运行时间降低了10倍,完美!

c++ performance function call

2
推荐指数
2
解决办法
1783
查看次数

标签 统计

c++ ×2

performance ×2

call ×1

function ×1

profiler ×1