Variante de números de punto flotante en computadoras
Los unums ( números universales [1] ) son una familia de formatos numéricos y aritméticos para implementar números reales en una computadora, propuestos por John L. Gustafson en 2015. [2] Están diseñados como una alternativa al omnipresente estándar de punto flotante IEEE 754. La última versión se conoce como posits . [3]
Tipo I Unum
La primera versión de unums, formalmente conocida como unum Tipo I, fue presentada en el libro de Gustafson The End of Error como un superconjunto del formato de punto flotante IEEE-754. [2] Las características definitorias del formato unum Tipo I son:
- un formato de almacenamiento de ancho variable tanto para la mantisa como para el exponente , y
- un bit u , que determina si el unum corresponde a un número exacto ( u = 0), o a un intervalo entre unums exactos consecutivos ( u = 1). De esta manera, los unums cubren toda la línea de números reales extendida [−∞,+∞].
Para realizar cálculos con este formato, Gustafson propuso utilizar aritmética de intervalos con un par de unums, lo que llamó ubound , proporcionando la garantía de que el intervalo resultante contiene la solución exacta.
William M. Kahan y Gustafson debatieron sobre los unums en la conferencia Arith23 . [4] [5] [6] [7]
Tipo II Unum
Los Unums tipo II se introdujeron en 2016 [8] como un rediseño de Unums que rompió la compatibilidad con IEEE-754.
Posit (Tipo III Unum)
En febrero de 2017, Gustafson introdujo oficialmente los unums de tipo III (posits), para valores fijos similares a puntos flotantes y válidos para la aritmética de intervalos . [3] En marzo de 2022, el Grupo de trabajo Posit ratificó y publicó un estándar. [9]
Los posits [3] [10] [11] son una versión de unum compatible con hardware en la que se resuelven las dificultades que se presentaban en el unum tipo I original debido a su tamaño variable. En comparación con los flotantes IEEE 754 de tamaño similar, los posits ofrecen un rango dinámico mayor y más bits fraccionarios para valores con magnitud cercana a 1 (pero menos bits fraccionarios para valores muy grandes o muy pequeños), y Gustafson afirma que ofrecen una mejor precisión. [12] [13] Los estudios [14] [15] confirman que, para algunas aplicaciones, los posits con quire superan a los flotantes en precisión. Los posits tienen una precisión superior en el rango cercano a uno, donde se producen la mayoría de los cálculos. Esto lo hace muy atractivo para la tendencia actual en el aprendizaje profundo de minimizar la cantidad de bits utilizados. Potencialmente, ayuda a cualquier aplicación a acelerar al permitir el uso de menos bits (ya que tiene más bits fraccionarios para la precisión), lo que reduce el ancho de banda de la red y la memoria y los requisitos de energía.
Al formato de un posit de n bits se le asigna una etiqueta de "posit" seguida de los dígitos decimales de n (por ejemplo, el formato de posit de 16 bits es "posit16") y consta de cuatro campos secuenciales:
- signo : 1 bit, que representa un entero sin signo s
- régimen: al menos 2 bits y hasta ( n − 1), que representan un entero sin signo r como se describe a continuación
- exponente : hasta 2 bits según disponibilidad después del régimen, lo que representa un entero sin signo e
- fracción : todos los bits restantes disponibles después del exponente, que representan un racional diádico real no negativo f menor que 1
El campo de régimen utiliza codificación unaria de k bits idénticos, seguidos de un bit de valor opuesto si hay bits restantes disponibles, para representar un entero sin signo r que es − k si el primer bit es 0 o k − 1 si el primer bit es 1. Los campos de signo, exponente y fracción son análogos a los campos de signo, exponente y mantisa IEEE 754 (respectivamente), excepto que los campos de exponente positivo y fracción pueden estar ausentes o truncados y extendidos implícitamente con ceros: un exponente ausente se trata como 00
2 (que representa 0), un exponente de un bit E 1 se trata como 2 (que representa el entero 0 si E 1 es 0 o 2 si E 1 es 1) y una fracción ausente se trata como 0.E10
Las dos codificaciones en las que todos los bits que no son de signo son 0 tienen interpretaciones especiales:
- Si el bit de signo es 1, el valor de posición es
NaR
("no es real") - Si el bit de signo es 0, el valor de posit es 0 (que no tiene signo y es el único valor para el que la
sign
función devuelve 0)
De lo contrario, el valor positivo es igual a , en el que r escala por potencias de 16, e escala por potencias de 2, f distribuye valores uniformemente entre combinaciones adyacentes de ( r , e ) y s ajusta el signo simétricamente alrededor de 0.
Ejemplos
Nota : Se espera que el posit de 32 bits sea suficiente para resolver casi todas las clases de aplicaciones [ cita requerida ] .
Mano de papel
Para cada posit n tipo de precisión , el estándar define un "quire" de tipo "quire" correspondiente de precisión , utilizado para acumular sumas exactas de productos de esos posit sin redondeo ni desbordamiento en productos escalares para vectores de hasta 2 31 o más elementos (el límite exacto es ). El formato quire es un entero con signo de complemento a dos , interpretado como un múltiplo de unidades de magnitud excepto por el valor especial con un bit de signo inicial de 1 y todos los demás bits iguales a 0 (que representa ). Los quires se basan en el trabajo de Ulrich W. Kulisch y Willard L. Miranker . [16]NaR
Válido
Los válidos se describen como un modo Unum de tipo III que limita los resultados en un rango determinado. [3]
Implementaciones
Varias soluciones de software y hardware implementan posits. [14] [17] [18] [19] [20] El primer generador de hardware aritmético de posits parametrizado completo se propuso en 2018. [21]
Las implementaciones de Unum se han explorado en Julia [22] [23] [24] [25] [26] [27] y MATLAB . [28] [29] Hay disponible una versión de C++ [30] con soporte para cualquier tamaño de posit combinado con cualquier número de bits de exponente. Una implementación rápida en C, SoftPosit, [31] proporcionada por el equipo de investigación de NGA basada en Berkeley SoftFloat se suma a las implementaciones de software disponibles.
Posición suave
SoftPosit [31] es una implementación de software de posits basada en Berkeley SoftFloat. [32] Permite la comparación de software entre posits y floats. Actualmente admite
- Agregar
- Sustraer
- Multiplicar
- Dividir
- Fusionar-multiplicar-agregar
- Producto escalar fusionado (con quire)
- Raíz cuadrada
- Convertir posit en entero con signo y sin signo
- Convertir enteros con signo y sin signo a posit
- Convertir posit a otro tamaño de posit
- Comparación menor que, igual, menor que igual
- Redondear al entero más cercano
Funciones auxiliares
- convertir doble a positivo
- convertir posit a doble
- Convierte un entero sin signo en posit
Funciona con posits de 16 bits con un bit de exponente y posits de 8 bits con bit de exponente cero. La compatibilidad con posits de 32 bits y tipos flexibles (2-32 bits con dos bits de exponente) está pendiente de validación. Es compatible con sistemas x86_64. Se ha probado en GNU gcc ( SUSE Linux ) 4.8.5 Apple LLVM versión 9.1.0 (clang-902.0.39.2).
Ejemplos
Agregar con posit8_t
#incluye "softposit.h" int principal ( int argc , char * argv []) { posit8_t pA , pB , pZ ; pA = castP8 ( 0xF2 ); pB = castP8 ( 0x23 ); pZ = p8_add ( pA , pB ); // Para comprobar la respuesta convirtiéndola a doble double dZ = convertP8ToDouble ( pZ ); printf ( "dZ: %.15f \n " , dZ ); // Para imprimir el resultado en binario (advertencia: código no portable) uint8_t uiZ = castUI8 ( pZ ); printBinary (( uint64_t * ) & uiZ , 8 ); devuelve 0 ; }
Producto escalar fusionado con quire16_t
// Convertir doble a positivo posit16_t pA = convertDoubleToP16 ( 1.02783203125 ); posit16_t pB = convertDoubleToP16 ( 0.987060546875 ); posit16_t pC = convertDoubleToP16 ( 0.4998779296875 ); posit16_t pD = convertDoubleToP16 ( 0.8797607421875 ); quire16_t qZ ; // Establezca quire en 0 qZ = q16_clr ( qZ ); // Acumula productos sin redondeos qZ = q16_fdp_add ( qZ , pA , pB ); qZ = q16_fdp_add ( qZ , pC , pD ); // Convertir de nuevo a posit posit16_t pZ = q16_to_p16 ( qZ ); // Para comprobar la respuesta double dZ = convertP16ToDouble ( pZ );
Crítica
William M. Kahan, el arquitecto principal de IEEE 754-1985, critica los unums de tipo I por los siguientes motivos (algunos se abordan en los estándares de tipo II y tipo III): [6]
- La descripción de unums elude el uso del cálculo para resolver problemas de física.
- Los Unums pueden resultar costosos en términos de tiempo y consumo de energía.
- Es probable que cada cálculo en el espacio unum cambie la longitud de bits de la estructura. Esto requiere descomprimirlos en un espacio de tamaño fijo o asignar, desasignar y recolectar basura durante las operaciones unum, de manera similar a los problemas que surgen al tratar con registros de longitud variable en el almacenamiento masivo.
- Los unums proporcionan solo dos tipos de excepciones numéricas: silenciosas y de señalización NaN (Not-a-Number).
- El cálculo de Unum puede generar límites demasiado laxos a partir de la selección de un algoritmo algebraicamente correcto pero numéricamente inestable.
- Los beneficios de unum sobre el punto flotante de precisión corta para problemas que requieren baja precisión no son obvios.
- Resolver ecuaciones diferenciales y evaluar integrales con números indefinidos garantiza respuestas correctas, pero puede no ser tan rápido como los métodos que habitualmente funcionan.
Véase también
Referencias
- ^ Tichy, Walter F. (abril de 2016). "El fin del error (numérico): una entrevista con John L. Gustafson". Ubiquity – Information Everywhere . 2016 (abril). Association for Computing Machinery (ACM): 1–14. doi : 10.1145/2913029 .
JG: La palabra "unum" es la abreviatura de "número universal", de la misma manera que la palabra "bit" es la abreviatura de "dígito binario".
- ^ ab Gustafson, John L. (4 de febrero de 2016) [5 de febrero de 2015]. El fin del error: Unum Computing. Chapman & Hall / CRC Computational Science . Vol. 24 (segunda edición corregida, primera edición). CRC Press . ISBN. 978-1-4822-3986-7. Recuperado el 30 de mayo de 2016 .[1] [2]
- ^ abcd Gustafson, John Leroy ; Yonemoto, Isaac (2017). "Vencer al punto flotante en su propio juego: aritmética de positos". Supercomputing Frontiers and Innovations . 4 (2). Centro de Publicaciones de la Universidad Estatal de los Urales del Sur, Cheliábinsk, Rusia. doi : 10.14529/jsfi170206 . Archivado desde el original el 2017-11-04 . Consultado el 2017-11-04 .
- ^ "Programa: Sesión especial: El gran debate: John Gustafson y William Kahan". Arith23 : 23.° Simposio IEEE sobre aritmética informática . Silicon Valley, EE. UU. 12 de julio de 2016. Archivado desde el original el 30 de mayo de 2016. Consultado el 30 de mayo de 2016 .
- ^ Gustafson, John L. ; Kahan, William M. (12 de julio de 2016). El gran debate @ARITH23: John Gustafson y William Kahan (1:34:41) (video) . Consultado el 20 de julio de 2016 .
- ^ ab Kahan, William M. (16 de julio de 2016) [12 de julio de 2016]. "Una crítica de THE END of ERROR — Unum Computation de John L. Gustafson y su A Radical Approach to Computation with Real Numbers" (PDF) . Santa Clara, CA, EE. UU.: Simposio IEEE sobre aritmética informática , ARITH 23. Archivado (PDF) desde el original el 25 de julio de 2016. Consultado el 25 de julio de 2016 .[3]
- ^ Gustafson, John L. (12 de julio de 2016). ""El Gran Debate": Documento de posición sobre aritmética de Unum" (PDF) . Santa Clara, CA, EE. UU.: Simposio IEEE sobre aritmética informática , ARITH 23 . Consultado el 20 de julio de 2016 .[4]
- ^ Tichy, Walter F. (septiembre de 2016). "Unums 2.0: una entrevista con John L. Gustafson". Ubiquity.ACM.org . Consultado el 30 de enero de 2017. Comencé
llamándolos "unums 2.0", que parecía un nombre tan bueno para el concepto como cualquier otro, pero en realidad no se trata tanto de un "último lanzamiento" como de una alternativa.
- ^ ab Posit Working Group (2022-03-02). «Estándar para la aritmética de positividad (2022)» (PDF) . Archivado (PDF) desde el original el 2022-09-26 . Consultado el 2022-12-21 .
- ^ John L. Gustafson e I. Yonemoto. (febrero de 2017) Más allá del punto flotante: aritmética informática de próxima generación. [En línea]. Disponible en: https://www.youtube.com/watch?v=aP0Y1uAA-2Y
- ^ Gustafson, John Leroy (10 de octubre de 2017). «Posit Arithmetic» (PDF) . Archivado (PDF) desde el original el 5 de noviembre de 2017. Consultado el 4 de noviembre de 2017 .
- ^ Feldman, Michael (8 de julio de 2019). "Un nuevo enfoque podría hundir la computación de punto flotante". www.nextplatform.com . Consultado el 9 de julio de 2019 .
- ^ Byrne, Michael (24 de abril de 2016). "Un nuevo formato numérico para computadoras podría acabar con los errores de aproximación para siempre". Vice . Consultado el 9 de julio de 2019 .
- ^ ab Lindstrom, Peter; Lloyd, Scott; Hittinger, Jeffrey (marzo de 2018). Codificación universal de los números reales: alternativas al punto flotante IEEE . Conferencia para la aritmética de próxima generación. Art. 5. ACM. doi :10.1145/3190339.3190344.
- ^ David Mallasén; Alberto A. Del Barrio; Manuel Prieto-Matias (2024). "Big-PERCIVAL: Explorando el uso nativo de la aritmética de 64 bits en computación científica". IEEE Transactions on Computers . 73 (6): 1472–1485. arXiv : 2305.06946 . doi :10.1109/TC.2024.3377890.
- ^ Kulisch, Ulrich W. ; Miranker, Willard L. (marzo de 1986). "La aritmética de la computadora digital: un nuevo enfoque". SIAM Rev. 28 (1). SIAM : 1–40. doi :10.1137/1028001.
- ^ S. Chung, "Aritmética de posiciones demostrablemente correcta con números enteros grandes de punto fijo". ACM, 2018.
- ^ J. Chen, Z. Al-Ars y H. Hofstee, "Una unidad de multiplicación de matrices para posiciones en lógica reconfigurable utilizando (Open)CAPI". ACM, 2018.
- ^ Z. Lehoczky, A. Szabo y B. Farkas, "Implementaciones de software .NET de alto nivel de Unum Type I y Posit con implementación FPGA simultánea utilizando Hastlayer". ACM, 2018.
- ^ S. Langroudi, T. Pandit y D. Kudithipudi, "Inferencia de aprendizaje profundo en dispositivos integrados: punto fijo frente a positividad". En Aprendizaje automático de eficiencia energética y computación cognitiva para aplicaciones integradas (EMC), 2018. [En línea]. Disponible en: https://sites.google.com/view/asplos-emc2/program
- ^ Rohit Chaurasiya, John Gustafson, Rahul Shrestha, Jonathan Neudorfer, Sangeeth Nambiar, Kaustav Niyogi, Farhad Merchant, Rainer Leupers, "Generador de hardware aritmético positivo parametrizado". ICCD 2018: 334-341.
- ^ Byrne, Simon (29 de marzo de 2016). "Implementación de Unums en Julia" . Consultado el 30 de mayo de 2016 .
- ^ "Aritmética de Unum en Julia: Unums.jl". GitHub . Consultado el 30 de mayo de 2016 .
- ^ "Implementación de Unums por parte de Julia: README". GitHub . Consultado el 30 de mayo de 2016 .
- ^ "Tipos y operaciones de Unum (Número Universal): Unums". GitHub . Consultado el 30 de mayo de 2016 .
- ^ "jwmerrill/Pnums.jl". Github.com . Consultado el 30 de enero de 2017 .
- ^ "GitHub - ityonemo/Unum2: Pivotar Unums". GitHub . 2019-04-29.
- ^ Ingole, Deepak; Kvasnica, Michal; De Silva, Himeshi; Gustafson, John L. "Reducción de huellas de memoria en el control predictivo de modelos explícitos utilizando números universales. Enviado al Congreso Mundial IFAC 2017" . Consultado el 15 de noviembre de 2016 .
- ^ Ingole, Deepak; Kvasnica, Michal; De Silva, Himeshi; Gustafson, John L. "MATLAB Prototipo de unum (munum)" . Consultado el 15 de noviembre de 2016 .
- ^ "GitHub - stillwater-sc/Universal: Aritmética de números universales". GitHub . 16 de junio de 2019.
- ^ desde "Cerlane Leong / SoftPosit · GitLab". GitLab .
- ^ "Berkeley SoftFloat". www.jhauser.us .
Lectura adicional
- Gustafson, John L. (marzo de 2013). "Right-Sizing Precision: Unleashed Computing: The need to right-sizing precision to save energy, widthwide, storage, and electrical power" (PDF) . Archivado (PDF) desde el original el 2016-06-06 . Consultado el 2016-06-06 .
- Brueckner, Rich (2015-03-02). "Slidecast: John Gustafson Explains Energy Efficient Unum Computing". The Rich Report . Inside HPC. Archivado desde el original el 2016-07-10 . Consultado el 2016-06-10 .
- Gustafson, John L. (2015). "El fin del error numérico" (PDF) . Archivado (PDF) desde el original el 2016-06-06 . Consultado el 2016-06-06 .
- Gustafson, John L. (3 de junio de 2016) [22 de febrero de 2016]. "Un enfoque radical para la computación con números reales: Unums versión 2.0" (PPT). Archivado desde el original el 10 de julio de 2016. Consultado el 10 de julio de 2016 .(NB. Los PDF vienen sin notas: [5] [6])
- Gustafson, John L. (6 de junio de 2016). "Un enfoque energéticamente eficiente y masivamente paralelo a los cálculos numéricos válidos" (PPT). Seminario OCRAR. Archivado desde el original el 10 de julio de 2016. Consultado el 10 de julio de 2016 .[7] [8]
- Gustafson, John L. (2016). "Un enfoque radical para la computación con números reales" (PDF) . SuperFri.org. Archivado (PDF) desde el original el 2016-07-10 . Consultado el 2016-07-10 .
- Kulisch, Ulrich W. (2015). "Aritmética de intervalos actualizada desde intervalos cerrados hasta conjuntos conexos de números reales" (PDF) (preimpresión). Institut für Angewandte und Numerische Mathematik – Karlsruhe Institute of Technology (KIT), Alemania. ID 15/02. Archivado (PDF) desde el original el 2016-07-12 . Consultado el 2016-07-12 .
- Risse, Thomas (10 de marzo de 2016). "Unum: una extensión conveniente de IEEE 754" (PDF) (presentación). London South Bank University (LSBU), Reino Unido: Instituto de Informática y Automatización (IIA), Facultad de Ingeniería Eléctrica y Electrónica, Universidad de Ciencias Aplicadas de Bremen , Alemania. Archivado (PDF) desde el original el 12 de julio de 2016. Consultado el 12 de julio de 2016 .
- Kahan, William M. (15 de julio de 2016). "Comentarios del profesor W. Kahan sobre la aritmética SORN" (PDF) . Archivado (PDF) desde el original el 1 de agosto de 2016 . Consultado el 1 de agosto de 2016 .
- Hunhold, Laslo (8 de noviembre de 2016). El formato de números Unum: fundamentos matemáticos, implementación y comparación con los números de punto flotante IEEE 754 (PDF) (tesis de licenciatura). Universität zu Köln , Mathematisches Institut. arXiv : 1701.00722v1 . Archivado (PDF) desde el original el 7 de enero de 2017. Consultado el 23 de octubre de 2016 .
- Sterbenz, Pat H. (1 de mayo de 1974). Cálculo de punto flotante . Serie Prentice-Hall sobre cálculo automático (1.ª ed.). Englewood Cliffs, Nueva Jersey, EE. UU.: Prentice Hall . ISBN 0-13-322495-3.
- Cave, Skip (17 de agosto de 2016). "Implementación del lenguaje de programación J de números unum de precisión de 3, 4, 8 y 16 bits" . Consultado el 3 de mayo de 2017 .(Enlace de descarga de Roger Stokes: [9])
- Ingole, Deepak (28 de septiembre de 2017). Implementación integrada de control predictivo de modelos explícitos (tesis doctoral). Universidad Tecnológica Eslovaca de Bratislava , Eslovaquia.
Enlaces externos
- "Conferencia sobre aritmética de próxima generación (CoNGA)". 2017. Archivado desde el original el 4 de noviembre de 2017. Consultado el 4 de noviembre de 2017 .
- "SoftPosit". 2018. Consultado el 13 de junio de 2018 .
- "Contribución al código fuente de la comunidad". 2018. Consultado el 13 de junio de 2018 .
- "Anatomía de un número positivo". 2018-04-11 . Consultado el 2019-08-09 .