go c java 性能测试_Go1.1性能测试报告(和C差距在10%以内)

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

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

测试环境

硬件配置: Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz; 16GB内存

操作系统: CentOS6.3 x86_64

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

gcc和gc版本:

gcc -v

gcc version4.4.720120313(Red Hat4.4.7-3) (GCC)

go version

go version go1.1linux/amd64

测试结果

$GOROOT/test/bench/shootout/timing.sh

fasta -n25000000

gcc -m64 -O2 fasta.c0.86u0.00s0.87r

gc fasta0.85u0.00s0.86r

gc_B fasta0.83u0.00s0.83r

reverse-complement 

gcc -m64 -O2 reverse-complement.c0.45u0.05s0.50r

gc reverse-complement0.60u0.05s0.65r

gc_B reverse-complement0.55u0.04s0.59r

nbody -n50000000

gcc -m64 -O2 nbody.c -lm5.51u0.00s5.52r

gc nbody7.16u0.00s7.18r

gc_B nbody7.12u0.00s7.14r

binary-tree15# too slow to use20

gcc -m64 -O2 binary-tree.c -lm0.31u0.00s0.31r

gc binary-tree1.08u0.00s1.07r

gc binary-tree-freelist0.15u0.00s0.15r

fannkuch12

gcc -m64 -O2 fannkuch.c26.45u0.00s26.54r

gc fannkuch35.99u0.00s36.08r

gc fannkuch-parallel73.40u0.00s18.58r

gc_B fannkuch25.18u0.00s25.25r

regex-dna100000

gcc -m64 -O2 regex-dna.c -lpcre0.25u0.00s0.26r

gc regex-dna1.65u0.00s1.66r

gc regex-dna-parallel1.72u0.01s0.67r

gc_B regex-dna1.64u0.00s1.65r

spectral-norm5500

gcc -m64 -O2 spectral-norm.c -lm9.63u0.00s9.66r

gc spectral-norm9.63u0.00s9.66r

gc_B spectral-norm9.63u0.00s9.66r

k-nucleotide1000000

gcc -O2 k-nucleotide.c -I/usr/include/glib-2.0-I/usr/lib64/glib-2.0/include -lglib-2.02.62u0.00s2.63r

gc k-nucleotide2.69u0.01s2.71r

gc k-nucleotide-parallel3.02u0.00s0.97r

gc_B k-nucleotide2.66u0.01s2.68r

mandelbrot16000

gcc -m64 -O2 mandelbrot.c20.95u0.00s21.01r

gc mandelbrot23.73u0.00s23.79r

gc_B mandelbrot23.72u0.00s23.79r

meteor2098

gcc -m64 -O2 meteor-contest.c0.05u0.00s0.05r

gc meteor-contest0.06u0.00s0.07r

gc_B meteor-contest0.06u0.00s0.06r

pidigits10000

gcc -m64 -O2 pidigits.c -lgmp0.77u0.00s0.77r

gc pidigits1.45u0.01s1.44r

gc_B pidigits1.45u0.01s1.43r

threadring50000000

gcc -m64 -O2 threadring.c -lpthread12.05u261.20s216.36r

gc threadring6.61u0.00s6.63r

chameneos6000000

gcc -m64 -O2 chameneosredux.c -lpthread4.04u21.08s4.20r

gc chameneosredux4.97u0.00s4.99r

测试结果说明

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

go tool 6g -h

usage: 6g [options] file.go...

-+    compiling runtime

-%    debug non-staticinitializers

-Aforbootstrapping, allow'any'type

-B    disable bounds checking

...

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

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

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

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

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

关于 BenchmarksGame 的测试差异

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

Benchmark      Time Memory   Code

fasta3×3×      ±

spectral-norm4×3×      ±

binary-trees13×4×      ±

regex-dna †26×    ±1/4

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

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

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

官方的测试结论

# Sep26,2012

#64-bit ints, plus significantly better floating-point code.

# Interesting details:

#   Generally something in the0-10% slower range, some (binary tree) more

#   Floating-point noticeably faster:

#       nbody -25%

#       mandelbrot -37% relative to Go1.

#   Other:

#       regex-dna +47%

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

【编辑推荐】

【责任编辑:小林 TEL:(010)68476606】

点赞 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值