0
我在Win7和Linux Ubuntu 16上测试了一些简单的基准测试计算,以比较计时和被怀疑,Win似乎比Linux快得多。Linux vs Windows性能
Win和Linux x64都支持同一台机器,同样的cpu时钟设置。我使用VC2010,在Win上使用-O2(最大速度)优化,在Linux上使用-O3使用gcc5。 Win的结果为2375ms,Linux的结果为2800ms。 Linux甚至使用-Ofast优化。无论如何,gcc和g ++都给出了相同的结果。
我对此行为的解释是,VC和Win运行时对x86/64进行了极其优化。
有人可能会提出一个建议,为什么会发生这种情况?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>
#define Pk 41
#define Lmz 101
#define Mmz 101
#define Nmz 101
// input data
float US[Pk][Lmz][Mmz][Nmz], VS[Pk][Lmz][Mmz][Nmz], HS[Pk][Lmz][Mmz][Nmz], QS[Pk][Lmz][Mmz][Nmz], TS[Pk][Lmz][Mmz][Nmz];
float F_X[Mmz][Nmz];
float Zmz[Nmz];
// output data
float Q[Pk][Lmz][Mmz][Nmz];
void Init() {
int h, k, j, i;
for (h = 0; h < Pk; h++)
for (k = 0; k < Lmz; k++)
for (j = 0; j < Mmz; j++)
for (i = 0; i < Nmz; i++) {
US[h][k][j][i] = 1+sin((float)i*j+i-k-h);
VS[h][k][j][i] = 2+cos((float)3*i*h-j+h*k);
HS[h][k][j][i] = 3+sin((float)2*i*k+j*h);
QS[h][k][j][i] = 4+cos((float)i+j+k+h+10);
TS[h][k][j][i] = 5+sin((float)(j+i)*k-h);
}
for (j = 0; j < Mmz; j++)
for (i = 0; i < Nmz; i++)
F_X[j][i] = sin((float)i*j-i+123);
for (i = 0; i < Nmz; i++)
Zmz[i] = cos((float)2*i);
}
void Calc() {
int h, k, j, i;
float Rs = 0, a = 0, Tp = 0, Tv = 0;
for(h = 0; h < Pk; h++)
{
for(k = 0; k < Lmz; k++)
{
for(j = 0; j < Mmz; j++)
{
for(i = 0; i < Nmz; i++)
{
a = (1.23 + US[h][k][j][i]/0.321) * Rs * VS[h][k][j][i];
Tp = TS[h][k][j][i] * pow(1000./HS[h][k][j][i], 2./7.);
Tv = Tp * (1. + 0.6078 * QS[h][k][j][i]);
Q[h][k][j][i] = a - (0.5 * Tv + (1. - Zmz[k]) * 9.8 * F_X[j][i]/0.321);
}
}
}
}
}
int main() {
int h, k, j, i;
clock_t timer;
Init();
timer = clock();
Calc();
printf("\ncalc time \t%f\n\n", (float)(clock() - timer));
return 0;
}
太少的数据来得出任何结论。你的测试是一个非常简单的测试,只有三秒钟才能完成。您也正在使用不同的编译器。 – klutt
您正在测量函数'sin','cos','pow'的不同实现的速度。与编译器几乎没有任何关系。与OS无关。 – Ivan
发布的代码不干净地编译!使用:'gcc -c -ggdb -Wall -Wextra -Wconversion -pedantic -std = gnu11'编译器输出超过40个警告。 – user3629249