我很好奇可能是同一个可执行文件性能差异很大的原因。 有时,我运行它需要20秒,有时它是110。 使用标准选项在发布模式下使用MSVC编译源。
代码在这里:
vector<double> Un;
vector<double> Ucur;
double *pUn, *pUcur;
...
// time marching
for (old_time=time-logfreq, time+=dt; time <= end_time; time+=dt)
{
for (i=1, j=Un.size()-1, pUn=&Un[1], pUcur=&Ucur[1]; i < j; ++i, ++pUn, ++pUcur)
{
*pUcur = (*pUn)*(1.0-0.5*alpha*( *(pUn+1) - *(pUn-1) ));
}
Ucur[0] = (Un[0])*(1.0-0.5*alpha*( Un[1] - Un[j] ));
Ucur[j] = (Un[j])*(1.0-0.5*alpha*( Un[0] - Un[j-1] ));
Un = Ucur;
}
修改
很抱歉不提输入数据。 向量Un和Ucur初始化为2000个元素,值为0。 没有数据被读/写。没有与控制台交互。 当我说有时我运行它意味着我打开控制台,没有其他应用程序运行,禁用处理器限制。完成后我继续执行应用程序。 我想这与缓存或类似的东西有关,但我对低级别的东西并不擅长。
答案 0 :(得分:1)
我会猜测这是因为您正在从存储设备加载大量数据。如果存储设备存在很多争用,那么随着软件需要等待轮流进行加载,事情会运行得更慢。
答案 1 :(得分:0)
当我将此函数中的参数从地址切换到变量时,问题得以解决。
在我double &time, double &dt, double &end_time
之前
现在:double time, double dt, double end_time
这似乎是与记忆有关的问题......希望,它可以帮助任何人