Puncte:1

Sincronizarea firelor de execuție în aplicații cu mai multe fire

drapel er
PBH

Eu folosesc SIESTĂ pachet dft pe un sistem CentOS 8 (core) cu un procesor XEON cu 16 nuclee, 32 fire cu OpenMPI versiunea 4.1.1 pentru toate calculele.

  1. Deoarece am 32 de fire, folosesc 28 dintre ele pentru a face un calcul SIESTA (care consumă o cantitate bună de memorie ~60%) și le păstrez libere pe restul de 4.

  2. Cu toate acestea, dacă încep să folosesc 2 sau 3 dintre firele rămase pentru o altă aplicație (care are o utilizare neglijabilă a memoriei), menținând calculul SIESTA la 28 de fire, văd că viteza de calcul SIESTA este scăzută cu aproximativ 50-60 %.

  3. Am verificat utilizarea procesorului și văd că un fir rămâne aproape inactiv când se utilizează sistemul în scenariul 2.

Există vreo modalitate de a diagnostica și de a rezolva această problemă? Se întâmplă acest lucru din cauza unei erori de programare a procesului? Se poate folosi un fel de pachet de legare a proceselor sau de programare a lucrărilor pentru a îmbunătăți acest lucru?

Puncte:1
drapel cn

Utilizarea procesorului ca un procent simplu nu poate transmite complexitatea unui procesor și memorie cu mai multe nuclee, fire multiple, unități de execuție multiple. Aproape sigur CPU este de fapt blocat pe memorie sau cache. Iar procesele care au datele lor se vor lupta pentru unitățile de execuție.


Acest procesor are doar 16 nuclee. Tratându-l ca și cum ar avea 32 va degrada la un moment dat performanța grav, așa cum ați descoperit. Chiar și cu SMT 2. Poate că puteți obține numărul de fire la 125% din nuclee (20), dar 175% (28) îl împinge. Mai ales cu alte lucruri care rulează. Înapoi firele.

Asigurați-vă că calculați munca utilă efectuată pe fir pe secundă. Experimentează, schimbând câte o variabilă. Poate încercați procesoare cu diferite configurații de cache și număr de nuclee, dacă aveți acces la acestea.


Măsurați cât de blocat sunteți cu contoarele de monitorizare a performanței. Nu va funcționa într-un VM, dar merită încercat pe Linux. De la Gregg pe care l-am legat mai devreme:

perf stat -a -- somn 10

Viteza maximă teoretică pe Xeons este de 4 sau 5 instrucțiuni pe ciclu. Nu veți obține asta, dar < 1.0 IPC este în plus blocat în memorie.


Cu siguranță înțelegeți codul aplicației și punctele fierbinți. Ce funcții petrec cea mai mare parte a timpului pe procesor? Ce cod de asamblare este afectat cel mai tare? Ce unități de execuție de pe procesorul dvs. lucrează cel mai mult pentru a procesa aceste operațiuni?

Grafice de flacără sunt bune pentru vizualizarea funcțiilor CPU. Ați menționat EL 8, care are scule flamegraph ambalate.

yum install perf js-d3-flame-graph
# la nivel de sistem, 99 Hz, timp de 60 de secunde
perf script flamegraph -a -F 99 sleep 60 

O înțelegere la nivel de dezvoltator a programului este necesară pentru a interpreta pe deplin rezultatele. Cu simboluri sau cod sursă, rapoartele perf pot fi adnotate într-o experiență de tip debugger.

PBH avatar
drapel er
PBH
Salut, multumesc pentru raspuns. Am verificat și IPC-ul meu a fost 0,97, așa că se pare că sistemul este blocat în memorie. Cu toate acestea, am doar acest sistem și nu pot verifica în altă parte. Voi verifica modificările IPC variind numărul de nuclee utilizate odată ce calculul curent de rulare se termină (probabil ar dura peste o săptămână).
PBH avatar
drapel er
PBH
Care este părerea dvs. despre instrumentul `taskset`. Ar face vreo diferență dacă aș lega calculele SIESTA la un set de nuclee și celălalt program la un nucleu separat? Ar permite asta nucleului dat să funcționeze cu un singur tip de sarcină de lucru?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.