190 likes | 344 Views
Využitie Grid-indexu pri opráciach s maticami. Autor : Martin Katuščák Vedúci : RNDr. Peter Gurský, PhD. Konzultant : RNDr. Martin Šumák. Date : 16.04.2012. Ciele práce . Navrhnúť spôsob uloženia ve ľ kých riedkých matíc pomocou grid indexu
E N D
Využitie Grid-indexu pri opráciach s maticami • Autor : Martin Katuščák • Vedúci : RNDr. Peter Gurský, PhD. • Konzultant : RNDr. Martin Šumák Date : 16.04.2012
Ciele práce • Navrhnúť spôsob uloženia veľkých riedkých matíc pomocou grid indexu • Navrhnúť algoritmus násobenia matíc nad grid indexom • Navrhnuté riešenie naimplementovať a otestovať nad umelými aj reálnymi dátami
Vektorová reprezentácia • int size= 10 • double [ ] data = {1,1,1,1,1} • int [ ] index = {0,2,5,6,9} • int used = 5
Výroba Grid Index Matice • Potrebujeme poznať všetky prvky matice kým ju vytvoríme • Použitie externého triedenia
Rozdiely • Štandardné uloženie riedkej matice • Inštancie len v RAM • Problém násobiť 2 veľké matice • Závislosť na dostupnej RAM • Grid Matica • Dáta matice uložené v súbore • Možnosť násobiť akékoľvek veľké matice • Rýchlosť závisí od priepustnosti disku
Paralelnénásobene grid index matice • Násobenie celých Grid index okien, miesto jednotlivých riadkov a stĺpcov • Použitie viacerých synchrónnych vláken na rozdelenie ľavej matice
Paralelný algoritmus násobenia matíc okno multiplyWindowArrays(Matica A, Matica B, int rw, int cw){ poradieOknaRiadku = 0; poradieOknaStĺpca = 0; oknoRiadku = A.getPointsFromOneWindow(rw, poradieOknaRiadku); oknoStĺpca = B.getPointsFtomOneWindow(poradieOknaStlpca, cw); Pokiaľ nie je prečítaný celý rw riadok matice A a cw stĺpec matice B { riadkyOknaA = getSplitRows(oknoRiadku,A.isTranspone); stlpceOknaB = getSplitColumns(oknoStlpca, B.isTranspone); Pre každý riadok r z riadkyOknaA { Pre každý stĺpec s z stĺpceOknaB { Pre každú spoločnú nenulovú pozíciu p riadka r a stĺpca s { výsledok[r,s] = výsledok[r,s] + r[p] * s[p]; }}} Ak boli použité všetky prvky z oknaRiadku oknoRiadku = A.getPointsFromOneWindow(rw, ++poradieOknaRiadku); Ak boli použité všetky prvku z oknoStĺpca oknoStĺpca = B.getPointsFromOneWindow(++poradieOknaStlpca, cw); ) Vráť výsledok; }
Testy • Procesor AMD FX8350, 8 jadier, 8 vláken 4200MHz • RAM 8GB DDR3 A-DATA 1800MHz • Systémový disk SSD OCZ Vertex 4 • Pracovný disk Seagate 1000GB, 7200 ot. • OS Windows 8 64bit • compuscience-linky • Počet riadkov : 102 794 524 • Počet stĺpcov : 102 794 524 • Počet nenulových bodov : 2 064 137 • Hustota : 0.0001 % • ml1m_user-item-rating • Počet riadkov : 6040 • Počet stĺpcov : 3952 • Počet nenulových bodov : 1 000 209 • Hustota : 4.2 % • Cora-all: • Počet riadkov : 27 214 • Počet stĺpcov : 17 923 • Počet nenulových bodov : 114 123 • Hustota : 0.2 %
Literatúra • Raghu Ramakrishnan, Johannes Gehrke: Database Managment Systems, 2007 • Yannis Manolopoulos, Alexander Apostolos, N.Papadopoulos, Yanis Theodoridis: R-Trees: Theory and Applications, Springer-Verlag London Limited 2006 • Bin Dong, Xiugiao Li, Li Ruan: Exploring Storage Optimization to Accelerate parallel Out-of-core Matrix Product