Paralela programado normo OpenMP 6.0 publikigita

Post tri jaroj da evoluo, aro de OpenMP 6.0 (Malferma Multi-Processing) specifoj estis publikigita, difinante API-ojn kaj metodojn por apliki paralelajn programajn metodojn por C, C++ kaj Fortran-lingvoj sur multkernaj kaj hibridaj (CPU+GPU). /DSP) sistemoj kun komuna memoro kaj blokvektorizado (SIMD). Komenca subteno por elektitaj funkcioj de OpenMP 6.0 estas atendita esti inkluzivita en la eldonoj de LLVM/Clang 20 kaj GCC 15.

Gravaj ŝanĝoj en OpenMP 6.0:

  • La procezo de programado de taskoj estis simpligita, difinante sendependajn partojn de la programo, kiuj povas esti efektivigitaj paralele kun aliaj partoj.
    • Aldonita la kapablo plenumi taskojn en liber-agentaj fadenoj, kiuj ne estas ligitaj al grupoj de fadenoj (teamoj), kiuj efektivigas paralelajn regionojn (paralela regiono, bloko de kodo efektivigita en pluraj fadenoj).
    • Subteno estas disponigita por konservado de taskografo, kiu difinas dependecojn inter taskoj kaj la ordo en kiu taskoj estas efektivigitaj, por plibonigi la efikecon de posta ripeto.
    • Mekanismo por travideblaj taskoj estis efektivigita por simpligi dependecadministradon kaj aŭtomate kontroli la plenumon de infanaj taskoj.
  • Pligrandigita subteno por komputikaj aparatoj, kiuj povas esti uzataj por plenumi paralelajn taskojn (CPU, GPU, DSP, ktp.).
    • Aldonita nova tabelsintakso por permesi al la "workdistribute" direktivo esti uzata por dividi tabel-pretigon inter malsamaj laborunuoj.
    • Memoraj asignokontroloj estis plifortigitaj por faciligi administri variablojn por kiuj memoro estas dinamike asignita.
    • Subteno por atributoj kiuj determinas kiel datumoj estas distribuitaj inter aparatoj defaŭlte estis vastigita.
    • Simpligita skribkodo por nesinkrona transdono de datumoj al pliaj komputikaj aparatoj (GPUoj).
    • Plibonigita memoradministrado kaj ĝia ligado al komputikaj aparatoj.
    • Aldonita "groupprivate" direktivo por atribui memoron al grupo de fadenoj kurantaj sur specifa komputika aparato.
  • La programado de certaj specoj de buklotransformoj estis simpligita, kiel ekzemple kunfandado de multoblaj bukloj, ŝanĝante la ordon de nestitaj bukloj, kaj inversigante buklojn.
  • Nova indukta operacio estis aldonita por organizi paraleligon en bukloj de simplaj aritmetikaj kalkuloj kaj uzantoperacioj kiuj dependas de antaŭaj valoroj.
  • Aldonita plena subteno por paraleligo de programoj skribitaj uzante la C23-normojn (inkluzive de atributsintakso), Fortran 2023 kaj C++23. Aldonitaj novaj atributoj por C/C++.
  • Plifortigitaj stokado kaj memoradministradkapabloj. Novaj atributoj estis aldonitaj por kontroli kiel memoro devus esti asignita kaj uzata. Aldonita API por difini kaj pridemandi memorspacojn.
  • Trajtoj malrekomenditaj en la specifoj de OpenMP 5.0, 5.1, kaj 5.2 estis forigitaj.

fonto: opennet.ru

Aldoni komenton