5
我需要在3維中使用查找表。該表本身具有73x73x73(389017)的雙精度值。GHC無法處理大型查找表
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不能處理這個尺寸矢量的雙重或[雙]中,GHC編譯需要花費大量的時間(約2分鐘),直至最後,存儲器鼓起。 GHC似乎存在內存泄漏或者一些錯誤,因爲它對於非常大的字符串([Char])工作正常。
什麼解決方案(如果有的話)可用於創建使用GHC的「大型」查找表(雙類型)?
您是否嘗試過使用類似'Data.Array'或'Data.Array.Repa'的數組?它看起來像你需要一個固定大小的容器,而不是一個矢量 –
因此,這是一個10MB的源文件,其中的文本形式的整個表格呢?你爲什麼要這樣做?我很確定,在運行時生成如此大的'Vector'並不是一個問題,從二進制文件中讀取效率更高。雖然我承認只要在源代碼中加入是一種很容易遠離「IO」的好方法。 – leftaroundabout
如果運行良好的字符串......爲什麼不硬編碼字符串(不是雙打)? (然後'讀',當然),是醜陋的,但也許運行良好... – josejuan