OpenMathLib / OpenMathLib/OpenBLAS
Denormal floats handling
Nessuno ha ancora preso questa issue.
- Lingua principale
- C
- Stelle
- 7.6k
- Fork
- 1.7k
- Merge medio
- 1g 3h
- PR unite (30g)
- 42
Descrizione
Dear @xianyi and everyone!
Is there a way to forbid denormals in the OpenBLAS?
I tried to execute the following code (MSVC2015) before calling any OpenBLAS routines:
unsigned int current_word = 0;
_controlfp_s(¤t_word, _DN_FLUSH, _MCW_DN);
_MM_SET_DENORMALS_ZERO_MODE(_MM_DENORMALS_ZERO_ON);
_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON);
and it looked like it worked for some time (about a year)... Does it really affect OpenBLAS denormals handling (especially inside worker threads)?
I started to use some additional OpenBLAS functions and noticed that denormals started to reappear in results again and that extremely slows down computations. I'm heavily suspecting that it is the OpenBLAS, who is responsible for them. Probably, the worker threads might still have enabled denormals?...
How to get rid of them?
I'm using precompiled OpenBLAS-v0.2.19-Win64-int32.
Here is the complete list of used functions (if it helps):
- cblas_sgemm
- cblas_ssyrk
- cblas_ssymm
- LAPACKE_sgesvd
UPD: indeed, cblas_ssyrk() is a first function which produces the first denormalized float during execution... :-(
How to change denormals behaviour?
May be there is a (reachable from outside) way to execute custom code in context of OpenBLAS's worker threads if there's no predefined way to control denormals?
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia con cblas_ssyrk(), identificata come la prima funzione che produce un float denormalizzato, e analizza come vengono inizializzati i thread worker di OpenBLAS. Riproduci il comportamento con le chiamate CBLAS e LAPACKE elencate nella build Windows precompilata, quindi determina se la gestione dei valori denormalizzati viene mantenuta nei thread worker. Il lavoro è completo quando il comportamento è spiegato e viene identificato un modo documentato o testato per controllarlo.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- c
- Ambito
- hpc
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 25/100