Paralelizare automată

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În calculul paralelizării automate, sau autoparallelizzazione, se referă la conversia automată de către compilatori de cod secvențial de cod în mai multe fire sau vector, sau ambele, pentru a utiliza simultan toată unitatea de calcul a procesorului multi-core .

Prin urmare, această operațiune servește la creșterea performanței în ceea ce privește conversia codului în formă paralelizată, eliminând sarcina asupra programatorului de a lua în considerare toate variabilele implicate în paralelizarea manuală. În timp ce această tehnică este în curs de dezvoltare de un deceniu, paralelizarea automată completă rămâne una dintre cele mai complexe sarcini pe care un parser sau o mașină virtuală va trebui să le îndeplinească vreodată .

Descriere

Această tehnică se concentrează în special pe bucle , deoarece acestea ocupă CPU pentru o lungă perioadă de timp și efectuează operațiuni care pot fi adesea efectuate în paralel . Paralelizarea automată, în acest caz, încearcă să împartă două cicluri pentru a le lansa rulând simultan pe două procesoare.

Tehnici

Compilatorul analizează de obicei codul în două treceri pentru a răspunde la următoarele întrebări:

  • Este sigur să paralelizăm bucla? Răspunsul la această întrebare necesită o analiză aprofundată a dependenței .
  • Este paralelizarea eficientă în reducerea timpilor de execuție ? Răspunsul la această întrebare necesită un model de analiză a priori destul de complicat al comportamentului codului luat în considerare.

O primă analiză a compilatorului efectuează verificarea dependenței, pentru a înțelege ce buclă poate fi separată de celelalte și executată independent. Una dintre variabilele dificile de luat în considerare în acest stadiu este partajarea primară a memoriei .

A doua scanare încearcă să înțeleagă în schimb ce cicluri este de fapt util să se separe. Crearea unui thread creează inevitabil niște cheltuieli generale , o pierdere de timp care, dacă bucla se dovedește a fi prea scurtă, poate reduce semnificativ timpul de execuție global. Această fază este foarte complexă de realizat a priori, deoarece este dificil de știut cât va dura ciclul înainte de a fi efectiv realizat. În schimb, sarcina este ușurată pentru mașinile virtuale, deoarece acestea se pot baza pe istoricul trecut al comportamentului codului.

Elemente conexe