作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在他的博客文章 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]
foldl
与
foldl'
,我认为我对此无能为力。 GHC 版本在 45+ 秒内找到答案,无论我使用哪个后端,而 C 版本仅使用 1.5 秒!
-O2
标志,ghc 现在生成非常快的代码。
最佳答案
我的问题是为什么 GHC 在这种特殊情况下会产生如此缓慢的代码。答案是使用优化标志,-O
, -O2
等。通过使用它,我看到执行时间从 45+ 秒下降到 0.6 秒,提高了约 80 倍。
关于haskell - 在 haskell 中生成冰雹序列比在 c 中慢一个数量级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6674955/
所以在我的程序的主体中有一个部分,我在其中调用冰雹函数来回答打印语句中的问题。它不是打印一次序列,而是打印两次,我不知道为什么或如何修复它。有没有办法解决这个问题并从函数 next(n) 中删除打印语
冰雹问题涉及取x,如果它是偶数,则将其除以二。如果是奇数,则乘以 3 再加 1。继续下去,您将得到重复的 4, 2, 1, 4, 2, 1...我在创建循环并让它将解决方案打印到输入 #1-#200
我正在尝试在 Spark 集群上运行一个基本脚本,该脚本接收一个文件,将其转换并以不同的格式输出。目前的 Spark 集群由 1 个主节点和 1 个从节点组成,两者都运行在同一节点上。完整的命令是:
我是一名优秀的程序员,十分优秀!