正好今天 GHC 发布了 6.12.1,我又用新版测试了一下(之前用的是 GHC 6.10.4):
结论如下:
GHC 6.12.1 Integer 1.077s
GHC 6.12.1 Int 0.491s
Perl 5.8.5 1.532s
也就是说:
1, Haskell 要比 Perl 快
2, GHC 6.12.1 的性能果然又进了一步,比 GHC 6.10.4 要快一点点。
另外,前几天按照 tnt 分享的办法,装了一个开发版的 Perl,
发现比 RHEL 4 缺省的 Perl 5.8.5 要快 30%:
Perl 5.11.2 1.045
2009/12/15 agentzh <agentzh@gmail.com>
2009/12/10 flw <su2admin@gmail.com>:
> 在我的机器上,用下面这段 Haskell 代码[1],哈哈,这里用了 Haskell 的任意精度整数,太不公平了,哈哈!换成 Int 之后,可以快一倍以上(使用 Ubuntu 自带的 GHC 6.8.2):
> 编译之后还是比 Perl 版要快一些的:
>
> flw@waker:~/study$ cat ttt.hs
> import System.Environment
>
> isPrime :: Integer -> [Integer] -> Bool
$ time ./hsprime_int 1000000 > /dev/null
real 0m0.318s
user 0m0.284s
sys 0m0.008s
在 GHC 中 Int 被表示为堆中的两个 word 长度的数据。相比 Perl 中的 IV 也没有取巧,呵呵。
而原先使用 Integer 的版本在我的本上需要这么长时间:
$ time ./hsprime_integer 1000000 > /dev/null
real 0m0.678s
user 0m0.640s
sys 0m0.016s
为了完整性,顺便给出那个 Perl 实现在我本上的用时(Perl 使用 Ubuntu 自带的 5.10.0),呵呵:
real 0m0.757s
time ./prime 1000000 > /dev/null
user 0m0.672s
sys 0m0.068s
确实只比 Interger 版的 Haskell 实现慢一点点,但比更为公平的 Int 版的 HS 实现要慢了 1.37 倍。
相信这个 Haskell 程序还有进一步优化的空间,比如使用 unboxed types ;) 在 Haskell
中工作的时候,我最直接的体会就是经常只需要一点点小改动,就能让速度有大幅提升 ;)
Cheers,
-agentzh
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
--
您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
--
您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。
没有评论:
发表评论