Soy nuevo en la informática y me preguntaba si la arquitectura moderna admite la precisión media de la misma manera que la precisión simple o doble. Pensé que la revisión de 2008 del estándar IEEE-754 introdujo precisiones cuádruples y medias.
Comentarios
- Esto fue etiquetado como MATLAB, pero MATLAB no ‘ t (todavía) es compatible con 16 bits coma flotante.
- Vea esta pregunta de intercambio de pila que tiene información detallada sobre esto: stackoverflow.com/questions/49995594/…
- Valdría la pena aclarar si solo te refieres a CPU, o tanto CPU como GPU.
- Gracias por tu comentario Max Barraclough. No sabía que se podía alterar la precisión solo en las unidades de procesamiento de gráficos (GPU); Pensé que había que hacerlo en ambos. Su comentario es muy útil.
Respuesta
Soporte de Intel para IEEE float16 formato de almacenamiento
Intel admite la mitad de IEEE como tipo de almacenamiento en procesadores desde Ivy Bridge (2013). El tipo de almacenamiento significa que puede obtener una ventaja de memoria / capacidad de caché / ancho de banda, pero el cálculo se realiza con precisión simple después de convertir hacia y desde el formato de precisión media IEEE.
Soporte de Intel para BFloat16
Intel ha anunciado soporte para BF16 en Cooper Lake and Sapphire Rapids.
-
https://software.intel.com/content/dam/develop/public/us/en/documents/architecture-instruction-set-extensions-programming-reference.pdf (la actualización de junio de 2020 319433-040 describe AMX BF16)
Trabajo para Intel. Cito fuentes oficiales y no comentaré sobre rumores, etc.
Es bueno tener curiosidad sobre los méritos relativos de IEEE FP16 vs BF16. Hay mucho análisis de este tema, p. Ej. https://nhigham.com/2018/12/03/half-precision-arithmetic-fp16-versus-bfloat16/ .
Soporte de hardware que no es de Intel
Lo siguiente es información sobre otros procesadores. Verifique con los proveedores según sea necesario.
http://on-demand.gputechconf.com/gtc/2017/presentation/s7676-piotr-luszcek-half-precision-bencharking-for-hpc.pdf enumera el siguiente soporte de hardware:
- AMD – MI5, MI8, MI25
- ARM – NEON VFP FP16 en V8.2-A
- NVIDIA – Pascal y Volta
NVIDIA Ampere también es compatible con FP16 ( https://devblogs.nvidia.com/nvidia-ampere-architecture-in-depth/ ).
Comentarios
- La primera parte de esta respuesta es un poco engañosa. Si bien Ivy Bridge sí introdujo compatibilidad con F16C, y eso significa técnicamente que los flotadores de precisión media son » compatibles «, las únicas instrucciones proporcionados son aquellos para convertir hacia y desde flotadores de media precisión. No se pueden realizar operaciones en ellos en absoluto, por lo que difícilmente cumple con el requisito de la pregunta: » Me preguntaba si la arquitectura moderna admite la mitad de precisión de la misma manera que La precisión simple o doble es. » Es simplemente un formato de almacenamiento. Usted ‘ está intercambiando ciclos de conversión de ALU por ancho de banda / huella de memoria.
- Literalmente dije que es un tipo de almacenamiento, que todos los ahorros provienen de datos más estrechos y la computación es hecho con precisión simple. No es engañoso en lo más mínimo. Dije qué apoyo estaba presente, que es la mitad del apoyo posible.
- Gracias a todos. De hecho, encontré útil cada uno de estos comentarios. La razón inicial para hacer la pregunta se debió a escuchar a otros discutir sobre esto exactamente.
- @AsadMehasi: también relacionado con Stack Overflow: Half-precision aritmética de punto flotante en chips Intel : sí en GPU integradas desde Skylake, pero en los núcleos IA solo para conversión a / desde
float
en la tienda / carga. (Hasta el soporte de BFloat en el próximo HW)
Respuesta
En mi opinión, no de manera muy uniforme. La aritmética de baja precisión parece haber ganado algo de tracción en el aprendizaje automático, pero existen distintas definiciones de lo que la gente entiende por baja precisión. Existe la mitad IEEE-754 (mantisa de 10 bits, exponente de 5 bits, signo de 1 bit) pero también bfloat16 (mantisa de 7 bits, exponente de 8 bits, signo de 1 bit) que favorece el rango dinámico sobre la precisión y una variedad de otros formatos (TensorFloat de 19 bits de NVidia, fp24 de AMD, ¿quizás más?). La mayoría de estas cosas se ejecutan en hardware tipo GPGPU de propósito especial.
En contraste, float y double generalmente tienen un significado acordado, ya que cumplen con IEEE-754, representaciones de 32 bits (23/8/1) y 64 bits (52/11/1).
Comentarios
- Aunque definitivamente no es estándar, la computación óptica efectivamente usa la mitad -operaciones de punto flotante de precisión (o menos).
Respuesta
La respuesta aceptada proporciona una descripción general. Agregaré algunos detalles más sobre la compatibilidad con los procesadores NVIDIA. La compatibilidad que describo aquí es de 16 bits, compatible con IEEE 754, compatibilidad con aritmética de punto flotante, que incluye agregar, multiplicar, multiplicar-agregar y conversiones a / desde otros formatos. .
Maxwell (alrededor de 2015)
La primera IEEE 754 La compatibilidad con FP16 («binary16» o «media precisión») se incluyó en dispositivos cc (capacidad de cómputo) 5.3 que estaban en la generación Maxwell, pero esta capacidad de cómputo se implementó solo en el procesador Tegra TX1 (SoC, por ejemplo, Jetson).
Pascal (alrededor de 2016)
Los miembros de la familia Pascal tienen «tarifa completa» (cc 6.0, 6.2 ) o «tasa baja» (cc 6.1) rendimiento FP16. cc6.2 volvió a ser un producto de la familia Tegra, TX2. cc 6.0 y 6.1 encontraron uso en una variedad de procesadores en varias familias de productos como GeForce, Quadro y Tesla. «tasa completa» aquí se refiere a una tasa que es equivalente al doble de la tasa IEEE 754 FP32 («binary32» o «precisión simple») para el procesador en cuestión, cuando las operaciones se realizaron utilizando un tipo de datos half2 (dos medias cantidades manejadas en el mismo registro e instrucción).
Volta, Turing (2017, 2018)
Volta y miembros de la familia Turing (cc 7.x) admiten FP16 en » full rate «, y además usa el formato en operaciones de TensorCore .
Ampere (mayo de 2020)
La recientemente anunciada arquitectura Ampere A100 GPU también es compatible con FP16 de una manera similar a Volta y Turing, e introduce una capacidad adicional para un tipo de datos TF32 , que es un formato en el que la mantisa tiene el mismo tamaño (número de bits) como una mantisa FP16, yt El exponente tiene el mismo tamaño que un exponente FP32. La capacidad Bfloat16 también fue anunciada en Ampere.
Aparte del procesador de arquitectura Ampere anunciado recientemente, soporte y rendimiento para operaciones de punto flotante de 16 bits (y otras operaciones) en todas las capacidades informáticas (incluidas las arquitecturas) se pueden encontrar en la tabla 3 de la guía de programación CUDA . Los rendimientos son por reloj, por multiprocesador, por lo que es necesario escalar en consecuencia para el tipo y las especificaciones de GPU. Estos rendimientos no son para las operaciones de TensorCore, y los rendimientos máximos generalmente solo se aplican cuando se procesan en half2 tipos de datos (dos medias cantidades empaquetadas juntas en una sola palabra de 32 bits).
Respuesta
Puede averiguar si su hardware admite precisión media a través de:
$ lscpu | grep Flags | grep f16c Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 invpcid_single pti ssbd mba ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm mpx rdt_a avx512f avx512dq rdseed adx smap clflushopt clwb intel_pt avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts hwp hwp_act_window hwp_epp hwp_pkg_req md_clear flush_l1d
La f16c
está documentada aquí .
Comentarios
- Tenga en cuenta que la C en F16C significa Conversión; solo ayuda con el ancho de banda de la memoria / huella de caché, no con el rendimiento de SIMD ALU. Tienes que convertir a flotante para hacer cualquier cálculo, por lo que el número de elementos por vector SIMD para operaciones FMA no ‘ t mejorado.