A fost publicat standardul de programare paralelă OpenMP 6.0

După trei ani de dezvoltare, a fost publicat setul de specificații OpenMP 6.0 (Open Multi-Processing), care definesc API-ul și modalitățile de aplicare a metodelor de programare paralelă pentru limbajele C, C++ și Fortran pe sisteme multicore și hibride (CPU+GPU/DSP) cu memorie comună și blocuri de vectorizare (SIMD). Se așteaptă ca suportul inițial pentru anumite funcționalități OpenMP 6.0 să fie inclus în versiunile LLVM/Clang 20 și GCC 15.

Principalele modificări în OpenMP 6.0:

  • A fost simplificat procesul de programare a sarcinilor (task), care definesc părțile independente ale programului, ce pot fi executate în paralel cu alte părți.
    • A fost adăugată posibilitatea de a execuția sarcinilor în fire agent liber, nelegate de grupuri de fire (teams), care execută regiuni paralele (parallel region, bloc de cod executat în mai multe fire).
    • A fost asigurat suportul pentru salvarea graficului de sarcini (taskgraph), care definește dependențele între sarcini și ordinea execuției acestora, pentru a spori eficiența reproducerii ulterioare.
    • A fost realizat un mecanism de sarcini transparente („transparent tasks”) pentru a facilita gestionarea dependențelor și controlul automat al execuției sarcinilor fiice.
  • A fost extins suportul pentru dispozitivele de calcul care pot fi utilizate pentru a executa sarcini paralele (CPU, GPU, DSP etc.).
    • A fost adăugat un nou sintaxă pentru matrice, permițând utilizarea directivei „workdistribute” pentru a împărți prelucrarea matricei între diferite unități de lucru.
    • S-au extins capacitățile de gestionare a alocării memoriei, simplificând gestionarea variabilelor pentru care memoria este alocată dinamic.
    • A fost extins suportul pentru atribute care definesc distribuția datelor între dispozitivele implicit.
    • A fost simplificată scrierea codului pentru transmiterea asynchronă a datelor către dispozitivele de calcul suplimentare (GPU).
    • A fost îmbunătățită gestionarea memoriei și legarea acesteia la dispozitivele de calcul.
    • A fost adăugată directiva „groupprivate” pentru a fixa memoria pentru un grup de fire care sunt executate pe un anumit dispozitiv de calcul.
  • A fost simplificat programarea unor tipuri de transformări ale buclelor, cum ar fi combinarea mai multor bucle, schimbarea ordinii buclelor încrucișate și inversarea buclelor.
  • A fost adăugată o nouă operațiune de inducție (induction) pentru organizarea paralelizării în cicluri de calcul aritmetic simplu și operații utilizator care depind de valori anterioare.
  • A fost adăugată o susținere completă pentru paralelizarea programelor scrise conform standardelor C23 (inclusiv sintaxa atributelor), Fortran 2023 și C++23. Au fost adăugate atribute noi pentru C/C++.
  • Capacitățile de gestionare a stocării și memoriei au fost extinse. Au fost adăugate atribute noi pentru controlul modului în care trebuie să fie alocată și utilizată memoria. A fost adăugat un API pentru a determina și a solicita spațiile de memorie (memory space).
  • Au fost eliminate posibilitățile declarate ca fiind depășite în specificațiile OpenMP 5.0, 5.1 și 5.2.

Sursa: opennet.ro

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster