Potrzebuję użyć tabeli odnośników w 3 wymiarach. Sama tabela ma podwójne wartości 73x73x73 (389017).GHC nie obsługuje dużych tabel wyszukiwania
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]]
Problemem jest to, że GHC nie może obsłużyć tej wielkości wektorowych Double or [Double], kompilacja GHC zajmuje dużo czasu (~ 2 min), aż wreszcie pamięć wysadza. Wygląda na to, że istnieje wyciek pamięci w GHC lub jakiś błąd, ponieważ działa dobrze dla bardzo dużego ciągu ([Char]).
Jakie rozwiązania, jeśli istnieją, są dostępne do tworzenia "dużych" tabel wyszukiwania (typu Double) przy użyciu GHC?
Czy próbowałeś używać tablic typu 'Data.Array' lub' Data.Array.Repa'? Wygląda na to, że potrzebujesz pojemnika o stałym rozmiarze, a nie wektora. –
Więc ... to jest plik źródłowy o wielkości 10 MB z całą tabelą w postaci tekstowej? Dlaczego zrobiłbyś to w ten sposób? Jestem pewien, że generowanie dużych plików 'Vector' w czasie wykonywania nie byłoby problemem, o wiele bardziej wydajnym czytaniem z pliku binarnego. Chociaż przyznaję, że samo umieszczenie źródła jest dobrym sposobem na łatwe uniknięcie 'IO'. – leftaroundabout
Jeśli działa dobrze z ciągiem ... dlaczego nie ciągi kodów (nie podwajają)? (następnie "czytaj", oczywiście), jest brzydki, ale może działa dobrze ... – josejuan