我在这个论坛是新的,所以原谅我,如果我不要求在第一时间正确的问题。 我认为这是没有必要在这里提供的代码,因为我觉得它无关的代码和问题可能更普遍。
我已经写了,并内置在NetBeans 7.1.2在Windows XP中使用的MinGW(G ++)一个C ++项目。 两者的调试版本和发行版本,做工精细,并提供了计算的所需的输出。 但是,如果我在NetBeans的内部端子“运行”的项目(项目任一),I可以测量微秒115和130之间的计算时间。 如果我在Windows命令提示符下执行exe文件,我衡量微秒500和3000之间的计算时间。 (因为复位,并且由CPU分频在一个2.2GHz的英特尔Core 2 Duo具有2 GB的RAM。我通过读取CPU时钟的数目测量时间蜱)。
我试图在另一台计算机相同的(包括建设项目),也是2.2 GHz和16 GB的RAM和Windows7。 该程序运行快一点,但是模式是一样的。 同样如此,当我运行从NetBeans中,但在外部终端(也窗口终端)的项目。 它适用于两个版本,调试和发行版本。
其中计算(不是最关键的时间)是一个快速傅立叶变换,并取决于FFTW( http://www.fftw.org/ )“libfftw3-3.dll”库。 内的NetBeans其位置是已知的,在Windows命令提示,该DLL必须是在相同的目录中的可执行文件。
那么,究竟是一个程序运行如此之快在NetBeans的内部终端窗口不是在Windows命令提示符窗口?
难道有事情做在加载时库的动态链接?
然而,所述计算步骤中,实际上在窗户需要更长的时间命令比在NetBeans的终端不存在于DLL(2支COMLEX数的乘法)依赖于功能提示。
最耗时和在程序的关键计算是的类型的复数两个数组的乘法fftw_complex
其是double[2]
for(int i = 0; i < n; ++i) {
double k1 = x[i][0] * (y[i][0] - y[i][1]);
double k2 = (y[i][1] * -1) * (x[i][0] + x[i][1]);
double k3 = y[i][0] * (x[i][1] - x[i][0]);
result[i][0] = k1 - k2;
result[i][1] = k1 + k3;
}
x
和y
是复数的两个阵列,其中[i][0]
保持实部和[i][1]
保持虚部。 result
是相同类型的预先分配的阵列。
当该程序在NetBeans的内部端子时,执行该循环花费长度513的阵列大约5微秒,而是100微秒当我运行在Windows命令提示程序。 我找不到在由sehe回答所有真正有用的建议作出解释。
请让我知道,如果你认为它是与实际的代码,然后我会提供一些。
我已经找了类似的问题,但找不到任何。 任何提示或指向其他问题,并且我可能会错过答案是赞赏。 干杯。