Go语言性能测试

大概在一年前,看到一个作者写了两篇文章,使用计算密集型的例子来比较了各个语言的性能(C# vs C++ 全局照明渲染性能比试C++/C#/F#/Java/JS/Lua/Python/Ruby渲染比试)。由于最近在使用Go,且想了解Go语言的性能,于是想起来这篇文章,并把文章中所提到的C++代码移植到了Go语言上。通过对几种语言实现的结果的比试,来了解Go目前的性能。

大概说一下作者所做的事。作者使用蒙地卡罗路径追踪来进行全局光照渲染。效果大致如下:

这个图片是512×512像素,每个像素点10000个采样。在实验中,考虑执行时间问题,只生成了256×256像素图片,每个像素点默认100次采样。

移植后的Go代码在这里。在基本上直译了C++代码之后,由于每个像素点之间是计算无关的,所以,我使用了goroutine来对每个像素点进行计算,以利用多核的计算能力。

本人的实验环境是Visual studio2010/.net framwork 4.0编译,Intel core2 P7570(2.26GHz主频)。VC++编译器选项参照了原作者,Go使用8g编译。结果如下:

语言 运行时长(秒) 比例
VC++(基准) 56.269 1.00x
C# 215.545 3.83x
JsChrome 247.231 4.39x
GO 325.000 5.78x
GO(goroutine) 172.000 3.06x

参照原作者,C++用OpenMP库可以取得极大提升,本文没有测试。可以看到,Go在单线程情况下性能还不尽如人意,在利用双核基础上,性能相对单线程有了接近一倍的提升。考虑到go进程调度和上下文切换的原因,goroutine的效果还是很不错的。

考虑到Go发布到现在才两年的时间,有着目前的性能还是可圈可点的。但是,Go语言还有很长的路要走,在编程范式相对稳定之后,我相信Go在性能方面会有较大优化。期待明年年初GO 1的正式发布!

标签

赞这篇文章

分享到

3个评论

  1. @秦续业 作者

    实际上,我已经设了环境变量了。
    使用goroutine优化之后,已经利用了双核的性能。

给作者留言