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. |