为了测试icc和clang的sort
函数性能,咱们仍是搬出10亿规模的随机数排序:git
github.com/xiexiexx/Pl…github
原本直接使用便可:算法
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
复制代码
固然,因为是随机输入,咱们须要屡次重复运行程序取平均,这个实验留给你们本身作吧。优化
使用高级优化编译以后顺利执行:spa
clang++ -O3 x.cpp
./a.out
复制代码
随便拿一次执行结果出来:
0.10993 minutes
0.229284 minutes
3.21184 minutes
复制代码
优化得很不错。
clang稳定,并且性能优化也很好,可是目前对并行算法支持不太好,有待增强。icc的确要增强稳定性了,并且优化性能也没能让人满意,目前对优点在于对并行排序的支持。