Haskell GHC can';无法处理大型查找表
我需要使用三维的查找表。表本身有73x73x73(389017)个双精度值Haskell GHC can';无法处理大型查找表,haskell,ghc,Haskell,Ghc,我需要使用三维的查找表。表本身有73x73x73(389017)个双精度值 module Hammer.Texture.Table3D where import qualified Data.Vector as V import qualified Data.Vector.Unboxed as U import Data.Vector.Unboxed (Vector) table3D :: V.Vector (V.Vector (Vector Doubl
module Hammer.Texture.Table3D where
import qualified Data.Vector as V
import qualified Data.Vector.Unboxed as U
import Data.Vector.Unboxed (Vector)
table3D :: V.Vector (V.Vector (Vector Double))
table3D = V.fromList [table0, table1, ... table72]
table0 = V.fromList $ map U.fromList [
[1.973921e+01, 0.000000e+00, ... 0.000000e+00],
.....
[1.973921e+01, 0.000000e+00, ... 0.000000e+00]]
.....
table72 = V.fromList $ map U.fromList [
[1.973921e+01, 0.000000e+00, ... 0.000000e+00],
.....
[1.973921e+01, 0.000000e+00, ... 0.000000e+00]]
问题是GHC无法处理这种大小的向量Double或[Double],GHC编译需要花费大量时间(~2分钟),直到最后内存崩溃。GHC上似乎存在内存泄漏或某些错误,因为它适用于非常大的字符串([Char])
使用GHC创建“大型”查找表(双类型)有哪些解决方案(如果有的话)?我可以想到两种可能性:
您是否尝试过改用
Data.Array
或Data.Array.Repa
等数组?看起来你需要一个固定大小的容器,而不是一个。。。这是一个10MB的源文件,里面有整个文本表格?你为什么要这样做?我很确定,在运行时生成如此大的向量
s,从二进制文件中更有效地读取,不会有问题。尽管我承认,仅仅输入源代码是一种很好的方法,可以轻松远离IO
。。。为什么不硬编码字符串(而不是双精度)?(当然,read
)很难看,但可能运行得很好……我想您应该看看,在编译大常量时,它也有同样的问题。