SIM                 DASCĂLU Cristian, 343C4                                   cristian.dascalu@cti.pub.ro                 ...
2   11.01.2011
Descrierea Proiectului    • SIM este un program serial bazat pe tehnici de      programare dinamică, care caută similarită...
Analiza Sumară4   11.01.2011
Abordări    • OpenMP    • Pthreads    • Optimizare serială5   11.01.2011
OpenMP    • Abordare: introducerea de directive OpenMP de      genul #pragma omp section sau #pragma omp      for acolo un...
Problema Principală    • Puţine zone de cod cu potenţial de paralelizare      datorită algoritmului (avem multe dependinţe...
Exemplu de Dependinţe    register long f; //f – este o variabilă globală (deci shared)    for ( i = m1 + 1; i <= mm; i++) ...
Problema Secundară    • Aplicarea directivelor OpenMP acolo unde este      posibil (banale iniţializări ...) nu rentează d...
Rezultate OpenMP     • Varianta paralelizată durează mai mult decât cea       serială datorită overhead-ului mare şi a    ...
Pthreads     • Adăugarea unei rutine de execuţie a instrucţiunilor       din “for-ul” cel mai din exterior din funcţia    ...
Problema Pthreads     • Dependenţa de date din for-ul exterior al porţiunii principale a       funcţiei:         for ( i =...
Rezultate Pthreads     • Partea de iniţializare.     • Overhead mare pentru 12000 de fire.     • Impărţirea celor 12000 de...
Optimizare Serială     • Problema identificată: predictibilitatea scăzută a       fluxului de instrucţiuni.     • Soluţia ...
Branch Miss Predictions15   11.01.2011
Varianta 1for (j = 1; j <= N; j++)                    for (...){                                           {  if ( (c = c ...
Rezultate Varianta 1Dar timpul total de execuţie este mai mare: aproximativ 105s faţă de 90s pe un Intel Celeron550 tactat...
ORDER(ss1, xx1, yy1, ss2, xx2, yy2)   Varianta 2{                                              short _ORDER_case;  if ( ss...
Rezultate Varianta 2Dar timpul total de execuţie rămâne în continuare mai mare: aproximativ 115s faţă de 90s peun Intel Ce...
Rezultate Finale     Varianta                      Optimizare                     Timp de rulare     Serial iniţial       ...
Concluzii     • Din păcate, datorită faptului că algoritmul are un       grad ridicat de dependinţe de date, părţile cu   ...
Referinţe     • http://www.google.com/codesearch/p?hl=en#yOs0oGPVNuU/MultiSource/           – Codul original al proiectulu...
Vă mulţumim pentru atenţie!                          Întrebări?23   11.01.2011
Upcoming SlideShare
Loading in …5
×

SIM Project: Optimizing a Benchmarking Tool

428 views
334 views

Published on

Prezentare a proiectului de semestru, ce a constat in incercarea de a paraleliza un tool de benchmarking, sustinuta in ianuarie 2011, in cadrul laboratorului final al materiei Arhitecturi si Prelucrari Paralele (Facultatea de Automatica si Calculatoare - Universitatea Politehnica Bucuresti).

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
428
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

SIM Project: Optimizing a Benchmarking Tool

  1. 1. SIM DASCĂLU Cristian, 343C4 cristian.dascalu@cti.pub.ro PETRE Vlad-Ştefan, 341C1 vlad@vladpetre.com ŞERBĂNESCU Vlad-Nicolae, 341C3 vlad.serbanescu@cti.pub.ro1 11.01.2011
  2. 2. 2 11.01.2011
  3. 3. Descrierea Proiectului • SIM este un program serial bazat pe tehnici de programare dinamică, care caută similarităţi locale între două şiruri de caractere sau în cadrul aceleaşi secvenţe, folosind ponderi afine. • Ca utilizare practică a acestui program, putem aminti compararea de secvenţe ADN sau rularea de benchmarkuri.3 11.01.2011
  4. 4. Analiza Sumară4 11.01.2011
  5. 5. Abordări • OpenMP • Pthreads • Optimizare serială5 11.01.2011
  6. 6. OpenMP • Abordare: introducerea de directive OpenMP de genul #pragma omp section sau #pragma omp for acolo unde este cazul.6 11.01.2011
  7. 7. Problema Principală • Puţine zone de cod cu potenţial de paralelizare datorită algoritmului (avem multe dependinţe de date în zonele de cod care rulează mult timp).7 11.01.2011
  8. 8. Exemplu de Dependinţe register long f; //f – este o variabilă globală (deci shared) for ( i = m1 + 1; i <= mm; i++) { // Notă: Am scos liniile de cod irelevante din acest exemplu f = - (q); //iniţializarea lui f limit = i + 1; for ( j = limit ; j <= nn ; j++ ) { f = f - r; //dacă ar fi doar asta, aş putea să paralelizez if ( f < c ) { f = c; //dar eu nu pot şti când se intră aici } myf = f; //utilizarea variabilei în buclă } } // În “for”-ul principal mai avem o dependinţă pe care o va prezenta colegul meu peste câteva momente.8 11.01.2011
  9. 9. Problema Secundară • Aplicarea directivelor OpenMP acolo unde este posibil (banale iniţializări ...) nu rentează datorită overhead-ului mare în lucrul cu threaduri comparativ cu câştigul computaţional.9 11.01.2011
  10. 10. Rezultate OpenMP • Varianta paralelizată durează mai mult decât cea serială datorită overhead-ului mare şi a posibilităţilor reduse de a folosi directive OpenMP.10 11.01.2011
  11. 11. Pthreads • Adăugarea unei rutine de execuţie a instrucţiunilor din “for-ul” cel mai din exterior din funcţia small_pass.11 11.01.2011
  12. 12. Problema Pthreads • Dependenţa de date din for-ul exterior al porţiunii principale a funcţiei: for ( i = m1 + 1; i <= mm; i++) { ... for ( j = limit ; j <= nn ; j++ ) { /* citire RR[j] */ ci = RR[j]; //RR[j] este global, iar ci este local ORDER(c, ci, cj, d, di, dj) ORDER(c, ci, cj, f, fi, fj) /* prelucrări ci */ RR[j] = ci; //scriere RR[j]!! } }12 11.01.2011
  13. 13. Rezultate Pthreads • Partea de iniţializare. • Overhead mare pentru 12000 de fire. • Impărţirea celor 12000 de fire pe bucăţi, asemănător OpenMP.13 11.01.2011
  14. 14. Optimizare Serială • Problema identificată: predictibilitatea scăzută a fluxului de instrucţiuni. • Soluţia abordată: binary lookup table sau ceva similar.14 11.01.2011
  15. 15. Branch Miss Predictions15 11.01.2011
  16. 16. Varianta 1for (j = 1; j <= N; j++) for (...){ { if ( (c = c - qr) > (e = e – r) ) ... e = c; if ((c = CC[j] - qr) > (d = DD[j] - r)) lookup_table[0] = c; d = c; lookup_table[1] = d; lookup_index = (c < d); c = lookup_table[lookup_index]; DIAG(i+I, j+J, c, s+va[B[j]]); ... if (c < d) c = d; } if (c < e) c = e; s = CC[j]; CC[j] = c; DD[j] = d;}16 11.01.2011
  17. 17. Rezultate Varianta 1Dar timpul total de execuţie este mai mare: aproximativ 105s faţă de 90s pe un Intel Celeron550 tactat la 2 GHz.17 11.01.2011
  18. 18. ORDER(ss1, xx1, yy1, ss2, xx2, yy2) Varianta 2{ short _ORDER_case; if ( ss1 < ss2 ) ORDER(ss1, xx1, yy1, ss2, xx2, yy2) { ss1 = ss2; xx1 = xx2; yy1 = yy2; } { _ORDER_case = (ss1 < ss2) | else ((ss1 == ss2 && xx1 < xx2) << 1) | ((ss1 == ss2 && xx1 == xx2 if ( ss1 == ss2 ) && yy1 < yy2) << 2); { if ( xx1 < xx2 ) switch (_ORDER_case) { { xx1 = xx2; yy1 = yy2; } case 1: ss1 = ss2; xx1 = xx2; yy1 = yy2; break; else case 2: xx1 = xx2; yy1 = yy2; if ( xx1 == xx2 && yy1 < yy2 ) break; case 4: yy1 = yy2; yy1 = yy2; break; } } }}18 11.01.2011
  19. 19. Rezultate Varianta 2Dar timpul total de execuţie rămâne în continuare mai mare: aproximativ 115s faţă de 90s peun Intel Celeron 550 tactat la 2 GHz.19 11.01.2011
  20. 20. Rezultate Finale Varianta Optimizare Timp de rulare Serial iniţial -g 1m20s Serial iniţial -O3 29s Serial optimizat -g 1m22s OpenMP -g 1m22s Pthreads -g 1m15s Notă: • S-au folosit două fişiere de intrare, fiecare având dimensiunea de 12 KB. • Testele au fost efectuate pe Cluster, pe IBM-Opteron cu rezervare de 4 sloturi.20 11.01.2011
  21. 21. Concluzii • Din păcate, datorită faptului că algoritmul are un grad ridicat de dependinţe de date, părţile cu adevărat importante din cod nu au putut fi paralelizate. • Structura codului serial nu permite intervenţii de profunzime. Iar pentru cele de suprafaţă, raportul dintre overhead-ul introdus şi timpul câştigat este nefavorabil.21 11.01.2011
  22. 22. Referinţe • http://www.google.com/codesearch/p?hl=en#yOs0oGPVNuU/MultiSource/ – Codul original al proiectului pe Google Code Search. • https://ncit-cluster.grid.pub.ro/trac/APP2010/wiki/SIM:/ – Documentaţia proiectului nostru. • https://svn-batch.grid.pub.ro/svn/APP2010/proiecte/SIM/ – Codul proiectului nostru. • http://en.wikibooks.org/wiki/Optimizing_C++ • http://www-graphics.stanford.edu/~seander/bithacks.html22 11.01.2011
  23. 23. Vă mulţumim pentru atenţie! Întrebări?23 11.01.2011

×