gpt4 book ai didi

haskell - GHC 无法处理大型查找表

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

我需要使用 3 个维度的查找表。表本身有 73x73x73 (389017) 个 double 值。

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 无法处理这种大小的 Vector Double 或 [Double],GHC 编译需要很多时间(约 2 分钟),直到最后,内存爆炸。 GHC 上似乎存在内存泄漏或某些错误,因为它适用于非常大的字符串([Char])。

哪些解决方案(如果有)可用于使用 GHC 创建“大型”查找表(双类型)?

最佳答案

我能想到两种可能:

  • 将向量序列化为文件,并在程序启动时反序列化它们(如果您希望在首次使用查找表而不是程序启动时发生这种情况,可以使用 unsafeInterleaveIO)。
  • 如果查找表真的像您的伪代码所暗示的那样稀疏,请考虑使用稀疏数据结构——例如Data.Map甚至只是一个普通的函数。如有必要,您可以使用此稀疏数据结构来生成您的向量(再次在运行时)。
  • 关于haskell - GHC 无法处理大型查找表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17775372/

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