es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Usando punto flotante de media precisión en CPUs x86

Tengo la intención de utilizar números de punto flotante de media precisión en mi código, pero no puedo averiguar cómo declararlos. Por ejemplo, quiero hacer algo como lo siguiente:


fp16 a_fp16;
bfloat a_bfloat;

Sin embargo, el compilador parece no conocer estos tipos (fp16 y bfloat son solo tipos ficticios, con fines de demostración).

Recuerdo haber leído que el soporte para bfloat se agregó en GCC-10, pero no puedo encontrarlo en el manual. Estoy especialmente interesado en los números de punto flotante bfloat.

Preguntas adicionales:
1. ¿El FP16 ahora tiene soporte de hardware en Intel / AMD actualmente? Creo que el soporte de hardware nativo se agregó desde la Ivy Bridge. (https://scicomp.stackexchange.com/questions/35187/is-half-precision-supported-by-modern-architecture)
2. Quería confirmar si el uso de FP16 realmente aumentará los FLOPs. Recuerdo haber leído en algún lugar que todas las operaciones aritméticas en fp16 se convierten internamente a fp32 primero y solo afectan el consumo de caché y el ancho de banda.
3. ¿Hay soporte intrínseco SIMD para números de punto flotante de media precisión, especialmente para bfloat? (Sé de intrínsecos como _mm256_mul_ph, pero no estoy seguro de cómo pasar el tipo de dato FP de 16 bits. Agradecería mucho si alguien pudiera resaltar esto también).
4. ¿Estos tipos también se agregan a los compiladores de Intel?

PD: Publicación relacionada: https://stackoverflow.com/questions/49995594/half-precision-floating-point-arithmetic-on-intel-chips, pero no cubre cómo declarar números de punto flotante de media precisión.

Gracias de antemano.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai
    1. Sí, es cierto que FP16 tiene soporte de hardware en las CPUs modernas de Intel y AMD. Este soporte se agregó desde la arquitectura Ivy Bridge. Sin embargo, siempre es buena idea verificar las especificaciones y la documentación de la CPU para confirmar el soporte para FP16.

    2. Es cierto que todas las operaciones aritméticas en FP16 se convierten internamente a FP32 primero. Esto se debe a que la mayoría de las CPUs no tienen hardware dedicado para operaciones FP16. Por lo tanto, usar FP16 solo afectará el tamaño de la caché y el ancho de banda, pero no necesariamente aumentará los FLOPs.

    3. El soporte intrínseco SIMD para float de precisión media está disponible, pero puede depender del fabricante o del compilador. Por ejemplo, Intel proporciona soporte para bfloat16 utilizando intrínsecos como _mm256_cvtneps_pbh, _mm256_cvtph_ps y _mm256_load_ps. El uso exacto y la pasada del tipo de datos FP de 16 bits pueden variar según el intrínseco específico.

    4. Estos tipos también pueden agregarse a los Compiladores de Intel, pero sería mejor verificar la documentación o las notas de la versión para confirmar.

Comments are closed.