Hozzászólások
Üdv!
Érdekelne, hogy létezik-e olyan megoldás, amellyel a tömörített fájlrendszerhez hasonlóan tömörített memóriát lehet létrehozni?
A problémám az, hogy Matlabbal dolgozok, és írtózatosan nagy tenzorokkal (8 dimenzió, dimenziónként 10 elem, összesen: 10^8). Egyhez kb. 1 GB memória kellene, de nekem ebből több lenne... Ha kimentem mat fileba a változót (memóriában tárolt formáját lemezre írom), akkor közel 20MB méretűre tudom egy sima zippel tömöríteni, ami elég jó.
Ha létre tudnék hozni olyan memóriapartíciót, amit tudok tömöríteni, és meg tudom mondani egy programnak, hogy ott dolgozzon, akkor ez megoldaná a problémámat. Ha kicsit lassabb lesz a program nem baj, futhat egy éjszaka, csak a mostani swappeléssel kb. 1 hónapig futna.
Ötlet?
Köszi,
Zoli
- A hozzászóláshoz be kell jelentkezni
Hi!
Letezzik egy WOLK (Working Overloaded Linux Kernel), ami egy kernelpatch-set. Abban van egy ilyen opcio. Meg persze kulon is biztosan letezik a compressed mem. patch. A WOLK doksiaban szerintem benne van, hogy a benne szereplo patchek honnan valok, de ha nem, a pontos nevuk biztosan, ami alapjan meg tudod keresni Google-lel.
TBS::Antiemes
- A hozzászóláshoz be kell jelentkezni
[quote:d3151eaf0b="petres"]Üdv!
Érdekelne, hogy létezik-e olyan megoldás, amellyel a tömörített fájlrendszerhez hasonlóan tömörített memóriát lehet létrehozni?
A problémám az, hogy Matlabbal dolgozok, és írtózatosan nagy tenzorokkal (8 dimenzió, dimenziónként 10 elem, összesen: 10^8). Egyhez kb. 1 GB memória kellene, de nekem ebből több lenne... Ha kimentem mat fileba a változót (memóriában tárolt formáját lemezre írom), akkor közel 20MB méretűre tudom egy sima zippel tömöríteni, ami elég jó.
Ha létre tudnék hozni olyan memóriapartíciót, amit tudok tömöríteni, és meg tudom mondani egy programnak, hogy ott dolgozzon, akkor ez megoldaná a problémámat. Ha kicsit lassabb lesz a program nem baj, futhat egy éjszaka, csak a mostani swappeléssel kb. 1 hónapig futna.
Ötlet?
Köszi,
Zoli
Kisse erdekes felvetes... :-) Amugy mit ertesz "memoriaparticio" alatt? A geped, a memoriat homogennek latja, nem tudsz 'mountolni', 'particionalni' benne.
Vagy esetleg, egy olyan RAMDISK-re gondoltal, amire a swapfile-t tenned???
No, az egesz tomoritett filerendszerrel az a problema, hogy ha irni is akarod akkor nagyon megdolgoztatod a rendszert. Egy masik nagy problema, hogy egy tomoritett file-rendszerben nagyon nehez seek-elni. Visszafele altalaban egyaltalan nem, legfoljebb csak elore... Ezenkivul, ha a matlab-od memoriaba dolgozik, akkor (valoszinuleg) semmi tamogatast nem nyujt ahhoz, hogy file-rendszeren tarold a memstamp-et (valoszinu teljes random elerest hasznal)... Szoval egyaltalan nem biztos, hogy elobb vegeznel, mint a disk-swappel :-)
Amugy mi a bajod az egy honapos futasi idovel?? S kulonben is par tizezer forint 1G memoria :-)
Zsiraf
- A hozzászóláshoz be kell jelentkezni
Tenzor fronton nem vagyok annyira otthon, igy a jo megoldas fugghet az elvegzendo algebrai manipulacioktol. Elso blikkre az en javaslatom inkabb egy tomoritett lemezparticio lenne.
Eloszor csinalni kellene egy ures particiot, pl. a Debianban van valami cloop nevu compressed filerendszer
En ezen a particion hoznam letre a swapfile-t, igy a Matlab nyugodtan swappelhet, a kiirt adat meg tomoritve lesz.
Az altalad leirt tomoritesi elkepzelessel az lehet a problema, hogy ha sok a memoriahivatkozas (legtobb numerikus problemanal ez fennall), akkor sok tomoritesi muvelet tortenik, igy nagyon elszallhat a progi futasideje (ergo nem egy napig tart, hanem haromig....). Az en verziomban a tomoritesi muveletek a swappeleshez kapcsolodnak. Ez akkor elonyos, ha a matrixmuveletek blokkosan hajtodnak vegre (jol sejtem, hogy matrixmuveletek dominaljak a vegrehajtast?), igy viszonylag keves lesz a lemezmuvelet.
Andrei
- A hozzászóláshoz be kell jelentkezni
A memoria tomoritese IMHO nem lesz hatekony (persze proba szerencse), kulonosen ha az elemeket folyamatosan el is akarod erni. A memoria tomoritese altalanos megoldas es nem hasznalhat fel olyan informaciokat, aminek te a birtokaban vagy. Inkabb keress valamilyen sajat megoldast, amivel hatekonyabban tudod reprezentalni azokat a tenzorokat.
Hint:
multidimensional sparse {array|matrix} representation
efficient compression for multidimensional {array|matrix}
http://csdl.computer.org/comp/trans/tc/2003/12/t1640abs.htm
http://www.mathworks.com/support/solutions/data/29781.shtml
handler
- A hozzászóláshoz be kell jelentkezni
[quote:c89b6e8a79="handler"]A memoria tomoritese IMHO nem lesz hatekony (persze proba szerencse), kulonosen ha az elemeket folyamatosan el is akarod erni. A memoria tomoritese altalanos megoldas es nem hasznalhat fel olyan informaciokat, aminek te a birtokaban vagy. Inkabb keress valamilyen sajat megoldast, amivel hatekonyabban tudod reprezentalni azokat a tenzorokat.
Hint:
multidimensional sparse {array|matrix} representation
efficient compression for multidimensional {array|matrix}
http://csdl.computer.org/comp/trans/tc/2003/12/t1640abs.htm
http://www.mathworks.com/support/solutions/data/29781.shtml
handler
Ez igaz lenne alapbol, de lathattad, hogy a tenzort tartalmazo mat file elegge jol tomoritheto volt (a redundancia kihasznalhato akarmit tarolsz). Gyorsan csinaltam egy probat. Egy 35000x35000-es ritka matrixot exportaltam 12 megas mat allomanyba (az altalam ismert legtomorebb matrixtarolasban 11.5 megat foglalt). Tomoritve (rar) 2 megas lett. Ez megerheti, ha nagyon nincs hely, mert pl. 160000x160000-es hasonszoru matrix 2Gb-ot foglal, egy 500000x500000-es pedig 20-30 gigat is megehet. Persze rohadt sokaig fog tartani barmilyen muveletet vegezni vele, ha nem figyel az ember, de nem eleve elvetelt az elkepzeles.
Azok a tarolasi formak, amikrol irtal (vagy ahhoz hasonlok), mar eleve reszei a Matlabnak v. Mathematicanak.
Andrei
- A hozzászóláshoz be kell jelentkezni
Koszi a segitseget. Az alapveto problema az, hogy nem tudok spare matrixot, tenzort hasznalni, ugyanis az csak akkor jo, ha sok a 0 erteku elem. Nekem nem ez van, mindegyik double, igy ezek alapbol kiesnek.
A muveletek tekinteben pedig alapvetoen matrix szorzas, transzponalt stb. ilyen muveleteket akarok vegrehajtani. Ezek a Matlabban Fortranban vannak megirva, nem tudom, hogy ezek mennyire blokkosak, mennyire optimalis a memoriakezeles. Bar azert gondolom, mert az utobbi idoben elegge odafigyelnek erre.
Udv,
Zoli
- A hozzászóláshoz be kell jelentkezni
Andrei:
http://www.mathworks.com/support/solutions/data/29781.shtml
"There are currently _no functions_ in MATLAB to create and manipulate multidimensional sparse arrays"
Erdemes lenne megvizsgalni az adataidat, miert lehet olyan jol tomoriteni. Lehet, hogy nem nulla erdekekkel van tele, de sok ugyanolyan biztosan
akad benne.
- A hozzászóláshoz be kell jelentkezni
[quote:b0cee9c3a8="handler"]Andrei:
http://www.mathworks.com/support/solutions/data/29781.shtml
"There are currently _no functions_ in MATLAB to create and manipulate multidimensional sparse arrays"
Ooops na ezt nem tudtam.....
Ha viszont a tenzor nem ritka, akkor marad a jo oreg out-of-core megoldas. Szepen feldarabolod a tenzort blokkokra es hasznalod valamelyik matrixszorzo algoritmust, figyelve arra, hogy keves iras olvasas legyen. Ez hasonlo problemanak tunik, mint az in-core szorzas (csak lentebb zajlik a memoriahierarchiaban), ugyhogy hasznalhatod a kurrens megoldasok barmelyiket, a memoriaban levo reszek szorzasara meg ott a BLAS. Szerintem ezt meg Matlabbal is ossze lehet hozni 1-2 nap alatt max. A lemezre irt allomanyokat meg on-the-fly tomoritheted valami konyvtarral v. scripttel.
Ez egy szep, erdekes problema ...... :-)))))
Andrei
- A hozzászóláshoz be kell jelentkezni