2009年12月14日星期一

Re: [PerlChina] Re: CN Perl Advent Day 8: Prime Numbers

惭愧,我本该注意到这一点的。确实对 Haskell 来说太不公平了。

正好今天 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],
> 编译之后还是比 Perl 版要快一些的:
>
> flw@waker:~/study$ cat ttt.hs
> import System.Environment
>
> isPrime :: Integer -> [Integer] -> Bool

哈哈,这里用了 Haskell 的任意精度整数,太不公平了,哈哈!换成 Int 之后,可以快一倍以上(使用 Ubuntu 自带的 GHC 6.8.2):

$ 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),呵呵:

time ./prime 1000000 > /dev/null
real    0m0.757s
user    0m0.672s
sys     0m0.068s

确实只比 Interger 版的 Haskell 实现慢一点点,但比更为公平的 Int 版的 HS 实现要慢了 1.37 倍。

相信这个 Haskell 程序还有进一步优化的空间,比如使用 unboxed types ;) 在 Haskell
中工作的时候,我最直接的体会就是经常只需要一点点小改动,就能让速度有大幅提升 ;)

Cheers,
-agentzh

--

您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。



--

您收到此邮件是因为您订阅了 Google 网上论坛的“PerlChina Mongers 讨论组”论坛。
要向此网上论坛发帖,请发送电子邮件至 perlchina@googlegroups.com。
要取消订阅此网上论坛,请发送电子邮件至 perlchina+unsubscribe@googlegroups.com。
若有更多问题,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问此网上论坛。

没有评论: