OpenMathLib / OpenMathLib/OpenBLAS
Denormal floats handling
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- C
- Estrellas
- 7.6k
- Forks
- 1.7k
- Merge medio
- 1 d 3 h
- PR fusionados (30 d)
- 42
Descripción
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?
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con cblas_ssyrk(), identificada como la primera función que produce un float desnormalizado, e inspecciona cómo se inicializan los hilos de trabajo de OpenBLAS. Reproduce el comportamiento con las llamadas CBLAS y LAPACKE indicadas en la compilación precompilada para Windows y determina después si el tratamiento de los valores desnormalizados se conserva en los hilos de trabajo. Se considera terminado cuando el comportamiento está explicado y se ha identificado una forma documentada o probada de controlarlo.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- c
- Área
- hpc
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 25/100