gpt4 book ai didi

haskell - 当向量非常大但在内存限制下时,Haskell 为什么会出现段错误?

转载 作者:行者123 更新时间:2023-12-03 14:23:38 24 4
gpt4 key购买 nike

我想编写一个在一个非常大的数组上运行的程序,并执行大量随机访问读/写操作。我想 vector是在 Haskell 中最合适的方式,所以我写了一个简单的程序来测试它的性能:

import Data.Int
import qualified Data.Vector.Unboxed.Mutable as UM

n = 1000000000

main = do
a <- UM.new n
UM.read a 42 :: IO Int32

但是,当我运行它时,它失败了 segmentation fault :
$ ghc -O2 test.hs
$ ./test
Segmentation fault (core dumped)

这台机器有足够的内存用于阵列。这是 free -h 的输出:
             total       used       free     shared    buffers     cached
Mem: 251G 150G 100G 672K 419M 141G
-/+ buffers/cache: 9.2G 242G
Swap: 255G 870M 255G

是因为 Haskell 的 vector包不能处理非常大的数组?我可以修改我的代码以便它可以在大型阵列上工作而不会造成太多的性能损失吗?

编辑 : 我的 GHC 版本是 7.10.2.20150906,我的 vector版本是 0.11.0.0。这是在 64 位 linux 机器上,带有
> maxBound :: Int
9223372036854775807

最佳答案

这是due to a bug in primitive这显然已在最近发布的原语 0.6.1.0 中得到修复。我建议您相应地为您的项目添加原语的下限。

关于haskell - 当向量非常大但在内存限制下时,Haskell 为什么会出现段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32645089/

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