Changes between Version 2 and Version 3 of SolarSim


Ignore:
Timestamp:
Jan 15, 2010, 3:42:00 PM (14 years ago)
Author:
mion
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SolarSim

    v2 v3  
    1111 * 12 Nov 2009 - 14 Ian 2010
    1212{{{
    13 - Status proiect:
    14 ...
     13- Documentare:
     14 Problema nbody, si modelul matematic al sistemului solar.
    1515
    16 - ToDo:
    17 ...
     16- Implementare seriala a algoritmului in C:
     17 La fiecare pas din simulare, se calculeaza interactiunile intre particule folosind legea atractiei gravitationale
     18 a lui Newton si apoi se modifica pozitiile si vitezele particulelor folosind ecuatiile miscarii ale lui Galilei.
     19 Este necesar un interval de timp mic intre pasii de simulare, pentru a mentine precizia simularii, deci un numar
     20 mare de pasi de simulare.
     21
     22- Implementare interfata grafica minimala in JAVA:
     23 Este necesara pentru a verifica daca orbitele obtinute ale planetelor sunt conforme cu realitatea. Am folosit ca
     24 date de start pozitia si viteza pamantului la periheliu. Precizia algoritmului serial este ok.
     25
     26- Paralelizarea algoritmului folosind instructiuni SSE
     27 Deoarece procesoarele pe care rulam sunt Intel Xeon, folosim Intel Compiler si SSE intrinsics. Pentru precizie
     28 float, operatiile cu vectori se executa de trei ori mai repede, iar pentru double, de doua ori. Asta din cauza ca
     29 registrele pentru SSE sunt de 128 de biti, si un vector float incape intr-un singur registru, iar un vector double
     30 incape in doua registre.
     31
     32- Prelucrarea datelor de intrare
     33 Pentru a vedea imbunatatiri de timp la algoritmul folosind OpenMP, avem nevoie de mai multe particule. Calculam
     34 un nou set de valori de intrare pornind de la datele extrase din Astronomer's Almanach(sursa-US Naval Observatory)
     35 Este nevoie sa convertim datele din elemente orbitale de tip kepler in coordonate carteziene. Documentare si apoi
     36 scrierea unui script in matlab care sa produca datele de intrare.
     37
     38- Prima paralelizare a algoritmului folosind OpenMP
     39 Am paralelizat fiecare bucla for cu #pragma omp parallel for. Rezultatele sunt mai proaste decat la alg serial.
     40
     41- A doua varianta de paralelizare a algoritmului
     42 Folosim paradigma bag of tasks. La inceput, master-ul calculeaza task-urile care sunt de forma unor perechi (i,j)
     43 si astfel se inlocuiesc cele doua bucle for i for j de la calculul acceleratiilor cu o singura bucla. Fiecare
     44 thread calculeaza local acceleratiile, iar apoi se face o operatie de reducere. Astfel sunt eliminate regiunile
     45 critice. Obtinem load balancing mai bun, dar performantele lasa de dorit comparativ cu varianta seriala. Incepem sa
     46 lucram si la interfata 3d folosind Java bindings for OpenGL (jogl).
     47
     48- A treia varianta de paralelizare a algoritmului
     49 Suspectam ca problema este ca la fiecare pas al simularii, se pornesc si se opresc threadurile de prea multe ori,
     50 asa ca modificam algoritmul astfel incat threadurile sa porneasca o singura data, la inceputul simularii, si sa se
     51 opreasca la final. Apare necesitatea unei bariere la sfarsitul fiecarui pas de simulare. Performantele tot nu sunt
     52 multumitoare. Incercam sa generam aleator un numar mare de particule. Se vede ca penalizarile nu mai sunt la fel de
     53 mari, dar pentru un numar mare de particule, trebuie scazut intervalul de timp DT intre doi pasi de simulare, iar
     54 metoda aleasa pierde semnificativ din precizie.
     55
     56- Concluzii
     57 Algoritmul se poate paraleliza folosind instructiuni vectoriale, dar overheadul introdus de management-ul threadurilor
     58 nu justifica folosirea OpenMP. Acest lucru se datoreaza faptului ca numarul de instructiuni pe care un thread openmp
     59 le executa in o iteratie a unei bucle este comparativ sau chiar mai mic decat numarul de operatii necesare management
     60 -ului threadului.
     61
     62- Methoda Sochacki
     63 Documentare si implementare in java a algoritmului pentru metoda Sochacki. Metoda integreaza ecuatiile diferentiale
     64 ale pozitiilor si vitezelor particulelor, obtinand polinoame de ordin arbitrar de mare. Am rulat teste pentru 2body
     65 problem: sistemul soare-pamant. Am vazut ca polinoamele aproximeaza corect functia pe durata unei revolutii a pamantului
     66 in jurul soarelui.
     67
     68- TODO
     69 Regenerarea polinoamelor periodic pentru a mari intervalul de precizie a metodei Sochacki. Implementarea algoritmului in
     70 C si reluarea procesului de optimizare.
    1871}}}