不同编译器下系统开方运算性能测试(已更新Linux版测试)

前两天看到一篇文章提到了用MagicNumber来做神奇的导数开方运算,于是我打算试一试测试系统的函数的性能

 

#include "stdafx.h"
#include <math.h>
#include <time.h>

#define MAX_SIZE 100000000
double data[MAX_SIZE];

void test() {
	for (int i = 0; i < MAX_SIZE; i++) {
		data[i] = sqrt(i);
	}
}

int main()
{
	int t1 = clock();
	test();
	printf("%ld ms", clock() - t1);
	getchar();

	for (int i = 0; i < MAX_SIZE - 1; i++) {
		data[i] = data[i + 1];
	}

    return 0;
}

以上这段简短的程序就是我写的来测试性能的代码。注意:后面的的重写这个数组是为了防止编译器优化把计算的循环给优化掉

 

测试机器是我的笔记本

  • CPU:Intel i73517U  @2.7GHz
  • 内存:16G DDR3L 1600Mhz

性能测试的时候为了准确使用了Intel的性能调试工具,没有使用程序输出的数值。编译全部是windows平台,gcc使用mingw环境。都是debug模式开O2优化,x64代码。

 

VS 2015:557.943ms

CLang 3.7:605.040ms

icc 16.0:762.681ms

gcc 5.2.0:1269ms

 


附加测试:Linux上的性能测试。有朋友说我的测试都是Windows平台,Linux平台下面g++可能性能会更好,于是我有做了另一个测试

测试机器是我的一台服务器

  • CPU Xeon E5-2603 x2 @ 1.80 GHz
  • 内存:16G

由于服务器上没有Intel的性能调试工具的授权,所以使用系统函数来测试时间。系统是Ubuntu

 

CLang 3.4 :1020.149ms

gcc 4.8.4:1355.673ms

所以可以看出来在Linux系统下面gcc的性能有所提升,但是仍然比不了clang