Somilic wrote:Ok hvala,ali ne mogu da verujem da im je toliko tesko bilo da optimizuju Tower6 za vise jezgara,pa makar i 2,program je izasao ove godine a dvojezgarni procesori su vec dugo na trzistu.
Jedina stvar u programu Tower (govorim i o verziji 5 i verziji 6) koja nije "optimizovana" za viseprocesorski rad je
solver, odnosno resavanje sistema jednacina.
Da bi nesto bilo "optimizovano" za viseprocesorski rad nije dovoljno ukljuciti neki prekdac u kompajleru programskog jezika pa ce se sve urediti automatski. Kljucna rec u svemu ovome je - PARALELIZAM. Da bi se na viseprocesorskoj masini moglo dobiti ubrzanje, odnosno da bi se mogla upotrebiti oba procesora (ili tri ili cetiri ili koliko god), program treba da se napise tako da odredjeni posao koji treba da izvrsi podeli na dva, tri ili cetiri medjusobno POTPUNO NEZAVISNA posla, koji ce se onda izvrsavati nezavisno, svaki na po jednom procesoru - paralelno.
Termin - "potpuno nezavisni poslovi" oznacava da rezultat posla A ni na koji nacin ne utice na obavljanje posla B, odnosno da je potpuno svejedno kojim redosledom ce se ta dva posla izvrsavati. Postoji i druga strana medalje - deljenje jednog posla na vise paralelnih poslova i njihovo upucivanje na paralelno izvrsavanje izaziva takozvani 'overhead', odnosno izvesni neizbezni gubitak zbog kreiranja i pokretanja zasebnih 'niti' ('thread') u kojima ce se odvijati izvrsavanje svakog od poslova. Najprostije receno, na dvoprocesorskoj masini, izvrsavanje ovako napisanog paralelizovanog posla nece biti 2 puta brze - ubrzanje ce UVEK biti manje od toga - sto je posao manji, 'overhead' ce imati znacajniji udeo u ukupnom vremenu izvrsavanja pa ce dobitak u brzini biti manji. Sa druge strane, na jednoprocesorskoj masini, zbog uvodjenja paralelizma brzina ce se smanjiti u odnosu na sekvencijalno izvrsavanje posla.
Ovo neminovno dovodi do toga da je u ovoj fazi neophodno u programu imati dva razlicita koda za jednu te istu stvar - jedan koji je paralelizovan i jedan koji je obican. U protivnom, dobice se usporenje na jednoprocesorskim masinama.
Jako je tesko pronaci u programu neki posao koji ispunjava sledece kriterijume:
1) da traje dovoljno dugo da bi dobitak zbog paralelizacije daleko prevazisao gubitak zbog 'overhead'-a i opravdao znacajno usloznjavanje (komplikovanje) koda
2) da moze da se podeli na niz POTPUNO NEZAVISNIH poslova.
Kao jedan jedini kandidat javlja se resavanje sistema jednacina. Solveri sa kojima radi program Tower 6 su sekvencijalni solveri - odnosno resavaju sistem jednacina takvim metodama kod kojih se mora voditi racuna o redosledu izvodjenja operacija i kod kojih se rezultat jedne operacije koristi kao ulazni podatak za neku drugu operaciju.
Veoma aktuelni paralelni solveri su potpuno razliciti od sekvencijalnih - njihove metode resavanja se medjusobno potpuno razlikuju i nemoguce je od jednog solvera na bilo koji nacin napraviti drugi. Princip rada im je potpuno drugaciji, na primer kao razlika izmedju benzinskog i dizel motora.
Napraviti solver za resavanje sistema sa velikim brojem jednacina (pod velikim brojem mislim na broj veci od 500 hilhada) je posao koji visestruko prevazilazi nase mogucnosti. To je veoma ozbiljna stvar sa kojom mogu da se uhvate u kostac timovi profesionalnih specijalizovanih matematicara-programera. Pravljenje kvalitetnog paralelnog solvera je jos za za red velicine zahtevniji posao od toga.
Mi sada na celu stvar gledamo ovako: usko grlo programa vise nije kapacitet ili vreme resavanja solvera. Sa solverom velikog kapaciteta iz Tower-a 6 modeli od stotinak hiljada cvorova mogu biti proracunati i za manje od pola sata. Usko grlo programa predstavlja skladistenje tolike kolicine podataka - rezultata za toliki broj cvorova i elemenata. Apsurd je da programom moze da se napravi model od 200 hiljada cvorova, i da se proracuna za manje od 90 minuta a da program ne moze da obezbedi dovoljno memorije za obicno skladistenje rezultata - zbog ogranicenja Windows-a od 2 gigabajta po procesu.
Sta bi dobili paralelizacijom - proracun od 90 minuta bio bi smanjen na recimo 60 minuta i to je sve. Mislimo da je to previse mala korist u odnosu na potreban trud.
Mi treba da razmisljamo o prelasku na 64-bitnu platformu koja ce da omoguci da se prevazidje memorijska barijera od 2 gigabajta. Tada ce se moci napraviti model koji ce Tower resavati i preko dva sata, pa ce onda mozda biti pozeljno da se poradi na tome da se to vreme skrati - uvodjenjem paralelnog solvera.