stringtranslate.com

Unum (formato de número)

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:

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:

  1. signo : 1 bit, que representa un entero sin signo s
  2. régimen: al menos 2 bits y hasta ( n  − 1), que representan un entero sin signo r como se describe a continuación
  3. exponente : hasta 2 bits según disponibilidad después del régimen, lo que representa un entero sin signo e
  4. 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 002 (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:

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

Funciones auxiliares

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] [33]

Véase también

Referencias

  1. ^ 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".
  2. ^ 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]
  3. ^ 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 .
  4. ^ "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 .
  5. ^ 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 .
  6. ^ 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]
  7. ^ 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]
  8. ^ 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.
  9. ^ 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 .
  10. ^ 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
  11. ^ 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 .
  12. ^ 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 .
  13. ^ 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 .
  14. ^ 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.
  15. ^ 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.
  16. ^ 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.
  17. ^ S. Chung, "Aritmética de posiciones demostrablemente correcta con números enteros grandes de punto fijo". ACM, 2018.
  18. ^ 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.
  19. ^ 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.
  20. ^ 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
  21. ^ 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.
  22. ^ Byrne, Simon (29 de marzo de 2016). "Implementación de Unums en Julia" . Consultado el 30 de mayo de 2016 .
  23. ^ "Aritmética de Unum en Julia: Unums.jl". GitHub . Consultado el 30 de mayo de 2016 .
  24. ^ "Implementación de Unums por parte de Julia: README". GitHub . Consultado el 30 de mayo de 2016 .
  25. ^ "Tipos y operaciones de Unum (Número Universal): Unums". GitHub . Consultado el 30 de mayo de 2016 .
  26. ^ "jwmerrill/Pnums.jl". Github.com . Consultado el 30 de enero de 2017 .
  27. ^ "GitHub - ityonemo/Unum2: Pivotar Unums". GitHub . 2019-04-29.
  28. ^ 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 .
  29. ^ Ingole, Deepak; Kvasnica, Michal; De Silva, Himeshi; Gustafson, John L. "MATLAB Prototipo de unum (munum)" . Consultado el 15 de noviembre de 2016 .
  30. ^ "GitHub - stillwater-sc/Universal: Aritmética de números universales". GitHub . 16 de junio de 2019.
  31. ^ desde "Cerlane Leong / SoftPosit · GitLab". GitLab .
  32. ^ "Berkeley SoftFloat". www.jhauser.us .
  33. ^ Kahan, William M. (15 de julio de 2016). "Comentario del profesor W. Kahan sobre "EL FIN DEL ERROR: Unum Computing" de John L. Gustafson, (2015) CRC Press" (PDF) . Archivado (PDF) desde el original el 1 de agosto de 2016. Consultado el 1 de agosto de 2016 .

Lectura adicional

Enlaces externos