我想编写一个在一个非常大的数组上运行的程序,并进行大量的随机访问读/写操作.我认为这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
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,它失败了segmentation fault:
$ ghc -O2 test.hs
$ ./test
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
这台机器有足够的内存用于阵列.这是输出free -h:
total used free shared buffers cached
Mem: 251G 150G 100G 672K 419M 141G
-/+ buffers/cache: 9.2G 242G
Swap: 255G 870M 255G
Run Code Online (Sandbox Code Playgroud)
是因为Haskell的vector包无法处理非常大的数组吗?我可以修改我的代码,以便它可以在大型阵列上工作而不会有太多的性能损失吗?
编辑:我的GHC版本是7.10.2.20150906,我的vector版本是0.11.0.0.这是在一台64位的linux机器上
> maxBound :: Int
9223372036854775807
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
327 次 |
| 最近记录: |