Go1.1性能测试报告(和C差距在10%以内)

开发 测试
最近Go1.1正式发布, 根据官方的说法, Go1.1性能比Go1.0提升基本有30%-40%, 有时更多(当然也有不明显的情况).

最近Go1.1正式发布, 根据官方的说法, Go1.1性能比Go1.0提升基本有30%-40%, 有时更多(当然也有不明显的情况).

Go1.1的详细介绍: Go1.1新特性介绍(语言和库更完善/性能提高约30%).

这里是针对Go1.1和C语言的性能测试: 测试的重点是语言的性能, 当然也会受到标准库性能的影响.

测试环境

补充: i7-3770是4核心8线程.

gccgc版本:

 

  1. gcc -v  
  2. gcc version 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC)  
  3.  
  4. go version  
  5. go version go1.1 linux/amd64  

 

测试结果

 

  1. $GOROOT/test/bench/shootout/timing.sh  
  2. fasta -n 25000000 
  3.     gcc -m64 -O2 fasta.c              0.86u 0.00s 0.87r  
  4.     gc fasta                          0.85u 0.00s 0.86r  
  5.     gc_B fasta                        0.83u 0.00s 0.83r  
  6.  
  7. reverse-complement < output-of-fasta-25000000 
  8.     gcc -m64 -O2 reverse-complement.c 0.45u 0.05s 0.50r  
  9.     gc reverse-complement             0.60u 0.05s 0.65r  
  10.     gc_B reverse-complement           0.55u 0.04s 0.59r  
  11.  
  12. nbody -n 50000000 
  13.     gcc -m64 -O2 nbody.c -lm          5.51u 0.00s 5.52r  
  14.     gc nbody                          7.16u 0.00s 7.18r  
  15.     gc_B nbody                        7.12u 0.00s 7.14r  
  16.  
  17. binary-tree 15 # too slow to use 20 
  18.     gcc -m64 -O2 binary-tree.c -lm    0.31u 0.00s 0.31r  
  19.     gc binary-tree                    1.08u 0.00s 1.07r  
  20.     gc binary-tree-freelist           0.15u 0.00s 0.15r  
  21.  
  22. fannkuch 12 
  23.     gcc -m64 -O2 fannkuch.c           26.45u 0.00s 26.54r  
  24.     gc fannkuch                       35.99u 0.00s 36.08r  
  25.     gc fannkuch-parallel              73.40u 0.00s 18.58r  
  26.     gc_B fannkuch                     25.18u 0.00s 25.25r  
  27.  
  28. regex-dna 100000 
  29.     gcc -m64 -O2 regex-dna.c -lpcre   0.25u 0.00s 0.26r  
  30.     gc regex-dna                      1.65u 0.00s 1.66r  
  31.     gc regex-dna-parallel             1.72u 0.01s 0.67r  
  32.     gc_B regex-dna                    1.64u 0.00s 1.65r  
  33.  
  34. spectral-norm 5500 
  35.     gcc -m64 -O2 spectral-norm.c -lm  9.63u 0.00s 9.66r  
  36.     gc spectral-norm                  9.63u 0.00s 9.66r  
  37.     gc_B spectral-norm                9.63u 0.00s 9.66r  
  38.  
  39. k-nucleotide 1000000 
  40.     gcc -O2 k-nucleotide.c -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -lglib-2.0  2.62u 0.00s 2.63r  
  41.     gc k-nucleotide                   2.69u 0.01s 2.71r  
  42.     gc k-nucleotide-parallel          3.02u 0.00s 0.97r  
  43.     gc_B k-nucleotide                 2.66u 0.01s 2.68r  
  44.  
  45. mandelbrot 16000 
  46.     gcc -m64 -O2 mandelbrot.c        20.95u 0.00s 21.01r  
  47.     gc mandelbrot                    23.73u 0.00s 23.79r  
  48.     gc_B mandelbrot                  23.72u 0.00s 23.79r  
  49.  
  50. meteor 2098 
  51.     gcc -m64 -O2 meteor-contest.c     0.05u 0.00s 0.05r  
  52.     gc meteor-contest                 0.06u 0.00s 0.07r  
  53.     gc_B meteor-contest               0.06u 0.00s 0.06r  
  54.  
  55. pidigits 10000 
  56.     gcc -m64 -O2 pidigits.c -lgmp     0.77u 0.00s 0.77r  
  57.     gc pidigits                       1.45u 0.01s 1.44r  
  58.     gc_B pidigits                     1.45u 0.01s 1.43r  
  59.  
  60. threadring 50000000 
  61.     gcc -m64 -O2 threadring.c -lpthread     12.05u 261.20s 216.36r  
  62.     gc threadring                           6.61u 0.00s 6.63r  
  63.  
  64. chameneos 6000000 
  65.     gcc -m64 -O2 chameneosredux.c -lpthread 4.04u 21.08s 4.20r  
  66.     gc chameneosredux                       4.97u 0.00s 4.99r  

 

测试结果说明

其中gc_B是开了-B选项, 选项的说明如下:

 

  1. go tool 6g -h  
  2. usage: 6g [options] file.go...  
  3.   -+    compiling runtime  
  4.   -%    debug non-static initializers  
  5.   -A    for bootstrapping, allow 'any' type  
  6.   -B    disable bounds checking  
  7. ...  

 

应该就是禁用了Go的slice下标越界检测等特性.

测试的结果显示Go的性能已经和C语言已经非常接近了, 有极个别的甚至比C还好(binary-tree).

根据$GOROOT/test/bench/shootout/timing.log的数据, gccgo 的优化应该更好一点.

不过gccgo的标准库比gc性能可能要差一些(因此有些测试性能比gc差一些).

我电脑没有安装gccgo, 因此只有gcc/gc/gc_B三个测试结果.

关于 BenchmarksGame 的测试差异

http://benchmarksgame.alioth.debian.org/u64q/go.php

BenchmarksGame的测试结果中, 有几个Go的性能很差:

 

  1. Benchmark      Time Memory   Code  
  2. fasta           3×    3×      ±  
  3. spectral-norm   4×    3×      ±  
  4. binary-trees   13×    4×      ±  
  5. regex-dna †    26×    ±      1/4 

 

其中 spectral-normbinary-trees 的 C 版本都开了 #pragma omp 优化(这已经不是C语言级别的比较了).

而 Go 的 binary-trees 启动了很多 goroutine, Go并发的版本和C的非并发版本比较肯定也是不合理的.

其中regex的测试主要是Go的regex标准库和C的高度优化的pcre比较. 目前Go的regex库还有待进一步的优化.

关于其他的各个程序, 实现和$GOROOT/test/bench/shootout都是有一定的差异的.

官方的测试结论

http://go.googlecode.com/hg/test/bench/shootout/timing.log:

 

  1. # Sep 262012 
  2. 64-bit ints, plus significantly better floating-point code.  
  3. # Interesting details:  
  4. #   Generally something in the 0-10% slower range, some (binary tree) more  
  5. #   Floating-point noticeably faster:  
  6. #       nbody -25%  
  7. #       mandelbrot -37% relative to Go 1.  
  8. #   Other:  
  9. #       regex-dna +47%  

 

Go已经和C差距在10%以内, 有特殊场景性能甚至更好.

原文链接:http://my.oschina.net/chai2010/blog/130859

责任编辑:林师授 来源: chai2010的博客
相关推荐

2013-05-15 09:37:00

GoGo1.1性能测试

2013-05-22 09:38:03

GoGo语言Go性能

2010-04-21 17:21:21

Ubuntu Live

2010-01-12 17:12:21

千兆骨干交换机

2010-07-02 14:21:02

Exchange 20

2012-02-27 16:04:28

戴尔

2021-05-07 14:45:07

SpeedtestStarlink网速测试

2010-04-27 13:25:05

H3C S12518交换机测试报告

2017-09-01 11:35:37

C++语言编译器

2011-01-28 10:46:45

MeeGo Core 上网本版MeeGo

2009-10-09 16:10:56

服务器测试报告存储型服务器

2010-01-13 15:39:55

以太网交换机

2013-04-01 10:22:21

GoGo 1.1

2017-12-27 16:17:48

中国电信

2010-01-13 14:19:05

千兆接入交换机

2009-02-17 20:25:54

湖北国税虚拟化应用测试报告

2016-05-17 14:15:57

2022-08-11 16:37:55

单元测试代码

2016-09-21 10:18:26

阿里Dubbo性能测试

2009-04-02 15:38:49

点赞
收藏

51CTO技术栈公众号