Due sezioni critiche prive di nome ('!$OMP CRITICAL') in parti distinte del programma condividono lo stesso lock globale, serializzando inutilmente thread che operano su dati del tutto indipendenti.
OPENMP_CRITICAL_COLLISION
→
Più thread OpenMP aggiornano contemporaneamente la stessa variabile senza averla inclusa nella clausola 'REDUCTION' o senza protezione ATOMIC/CRITICAL, provocando risultati numerici errati e non deterministici.
OPENMP_RACE_CONDITION
→
Ciascun thread secondario OpenMP ha uno stack limitato indipendente (default 2-4MB); variabili automatiche o array locali nei loop paralleli superano tale limite richiedendo l'impostazione 'export OMP_STACKSIZE=64M'.
OPENMP_STACK_OVERFLOW
→
La direttiva '!$OMP ATOMIC UPDATE' supporta solo forme di assegnazione elementari ('x = x + expr'); espressioni con chiamate di funzione non scalari generano errore di compilazione.
OPENMP_ATOMIC_UNSUPPORTED
→
Quando i risultati intermedi dei calcoli scendono sotto il limite minimo di precisione normalizzata, la CPU passa all'emulazione software dei denormali; si risolve attivando le modalità Flush-to-Zero (FTZ) e Denormals-are-Zero (DAZ).
IEEE_DENORMAL_SLOWDOWN
→
Invocare 'SQRT(x)' con x reale negativo produce errore di dominio o NaN; per abilitare la computazione nel piano complesso è indispensabile convertire l'argomento con 'SQRT(CMPLX(x, 0.0))'.
COMPLEX_DOMAIN_ERROR
→
Un denominatore calcolato assume il valore '0.0', scatenando l'interruzione immediata del kernel numerico quando sono attivi i trap matematici (-ffpe-trap=zero).
IEEE_DIVIDE_BY_ZERO
→
Si verifica durante calcoli intensivi quando un'operazione produce un numero superiore al valore massimo rappresentabile dal formato floating-point (es. 10^308 per REAL(8)), intercettato compilando con '-ffpe-trap=overflow,zero'.
IEEE_OVERFLOW_FPE
→