clang与icc:标准库排序性能对比

为了测试icc和clang的sort函数性能,咱们仍是搬出10亿规模的随机数排序:git

github.com/xiexiexx/Pl…github

icc篇

原本直接使用便可:算法

icpc billionsort.cpp
./a.out
复制代码

但是执行以后会出现:性能优化

0.0535384 minutes
Segmentation fault: 11
复制代码

也就是真正开始使用向量的时候出错,事实上它返回的向量长度是18446744073635809792而不是咱们输入的1000000000,实际上这个结果是-1000000000转化成无符号数的结果。这是一个bug,并且是在O2级别以上优化才会出现的问题,因此只能使用:bash

icpc -O1 billionsort.cpp
./a.out
复制代码

却是能运行出结果,可是这样无法比较clang的性能。函数

因此,咱们考虑将billionsort.cpp中的1000000000改为2000000000,也就是20亿个数的排序,重命名为x.cpp,再使用高级优化:性能

icpc -O3 x.cpp
./a.out
复制代码

此次却是不出错了,随便拿一次运行结果看看:测试

0.108003 minutes
0.309677 minutes
3.27189 minutes
复制代码

固然,因为是随机输入,咱们须要屡次重复运行程序取平均,这个实验留给你们本身作吧。优化

clang篇

使用高级优化编译以后顺利执行:spa

clang++ -O3 x.cpp
./a.out
复制代码

随便拿一次执行结果出来:

0.10993 minutes
0.229284 minutes
3.21184 minutes
复制代码

优化得很不错。

总结

clang稳定,并且性能优化也很好,可是目前对并行算法支持不太好,有待增强。icc的确要增强稳定性了,并且优化性能也没能让人满意,目前对优点在于对并行排序的支持。

相关文章
相关标签/搜索