gpt4 book ai didi

haskell - 在 haskell 中生成冰雹序列比在 c 中慢一个数量级

转载 作者:行者123 更新时间:2023-12-03 14:46:43 27 4
gpt4 key购买 nike

在他的博客文章 The Glasgow Haskell Compiler and LLVM , David Terei 使用了一个生成冰雹序列的示例来比较 GHC 与 C 的性能。我决定自己运行它,结果令人难以置信:GHC 版本慢了一个数量级以上。代码很无辜:

import Data.Word

collatzLen :: Int -> Word32 -> Int
collatzLen c 1 = c
collatzLen c n | n `mod` 2 == 0 = collatzLen (c+1) $ n `div` 2
| otherwise = collatzLen (c+1) $ 3*n+1

pmax x n = x `max` (collatzLen 1 n, n)

main = print . solve $ 1000000
where solve xs = foldl pmax (1,1) [2..xs-1]

除了替换 foldlfoldl' ,我认为我对此无能为力。 GHC 版本在 45+ 秒内找到答案,无论我使用哪个后端,而 C 版本仅使用 1.5 秒!

我的设置是 Haskell 平台 2011.2.0.1 (32bit) + OS X 10.6.6 vs. gcc 4.2.1。 David 在他的帖子中使用了 GHC 6.13。这是 GHC 7.0.3 的已知错误吗?或者我一定错过了一些非常明显的东西。

编辑:原来我确实错过了一些明显的东西。只需使用 -O2标志,ghc 现在生成非常快的代码。

最佳答案

我的问题是为什么 GHC 在这种特殊情况下会产生如此缓慢的代码。答案是使用优化标志,-O , -O2等。通过使用它,我看到执行时间从 45+ 秒下降到 0.6 秒,提高了约 80 倍。

关于haskell - 在 haskell 中生成冰雹序列比在 c 中慢一个数量级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6674955/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com