hardware - representación - ¿Por qué los números decimales de punto flotante no se aceleran como los números binarios de punto flotante?
punto flotante informatica (12)
Hay (un poquito de) aceleración de cadena decimal, pero ...
Esta es una buena pregunta. Mi primera reacción fue que "las operaciones de macro siempre han fallado en demostrarlo" , pero después de pensarlo, lo que está hablando sería mucho más rápido si se implementa en una unidad funcional. Supongo que todo se reduce a si esas operaciones se realizan lo suficiente como para importar. Hay un historial bastante lamentable de instrucciones específicas para la aplicación de operaciones macro y específicas de la aplicación, y en particular los intentos anteriores de formatos financieros decimales son ahora un equipaje heredado. Por ejemplo, dudo que se usen mucho, pero cada PC tiene los códigos de operación de Intel BCD , que consisten en
DAA, AAA, AAD, AAM, DAS, AAS
Una vez, las instrucciones de cadena decimal eran comunes en el hardware de gama alta. No está claro si alguna vez hicieron una gran diferencia de referencia. Los programas pasan mucho tiempo probando, bifurcando, moviendo cosas y calculando direcciones. Normalmente, no tiene sentido colocar operaciones macro en la arquitectura del conjunto de instrucciones, porque en general las cosas parecen ir más rápido si le da a la CPU el menor número de cosas fundamentales que hacer, de modo que puede poner todos sus recursos para hacerlas como lo mas rapido posible
En estos días, ni siquiera todas las operaciones binarias están realmente en la ISA real . La CPU traduce el ISA heredado en micro-ops en tiempo de ejecución. Todo es parte de ir rápido al especializarse en operaciones centrales. Por ahora, las transistras sobrantes parecen estar esperando algunos gráficos y trabajo en 3D, es decir, MMX, SSE, 3DNow!
Supongo que es posible que un diseño de hoja limpia pueda hacer algo radical y unificar los formatos de punto flotante decimales científicos (HW) actuales, pero no contener la respiración.
¿Vale la pena implementarlo en hardware? ¿Si es así por qué? ¿Si no, porque no?
Lo siento, pensé que está claro que estoy hablando de números racionales decimales. Ok, algo como decNumber++ para C ++, decimal para .NET ... Espero que esté claro ahora :)
¿Se refiere a los tipos de integrales numéricos típicos "int", "long", "short" (etc.)? Porque las operaciones en esos tipos se implementan definitivamente en hardware. Si está hablando de números grandes de precisión arbitraria ("BigNums" y "Decimals" y similares), es probable que sea una combinación de la rareza de las operaciones que utilizan estos tipos de datos y la complejidad de construir hardware para tratar con formatos de datos arbitrariamente grandes.
Algunos procesadores de IBM tienen hardware decimal dedicado incluido (Decimal Floating Point | DFP-unit).
En contribución de 18 de septiembre respondió a las 23:43 Daniel Pryden
La razón principal es que las unidades DFP necesitan más transistores en un chip que en las unidades BFP. El motivo es el código BCD para calcular números decimales en un entorno binario. El IEEE754-2008 tiene varios métodos para minimizar la sobrecarga. Parece que el método DPD hxxp: //en.wikipedia.org/wiki/Densely_packed_decimal es más efectivo en comparación con el BID método hxxp: //en.wikipedia.org/wiki/Binary_Integer_Decimal.
Normalmente, necesita 4 bits para cubrir el rango decimal de 0 a 9. Los bits de 10 a 15 no son válidos, pero aún son posibles con BCD. Por lo tanto, el DPD comprime 3 * 4 = 12 bits en 10 bits para cubrir el rango de 000 a 999 con 1024 (10 ^ 2) posibilidades.
En general, es decir, que BFP es más rápido que DFP. Y BFP necesita menos espacio en un chip que en DFP.
La pregunta de por qué IBM implementó una unidad DFP es bastante simple: se crean servidores para el mercado financiero. Si los datos representan dinero, debe ser confiable.
Con la aritmética decimal acelerada por hardware, algunos errores no se acumulan como en binario. 1/5 = 0.2 => 0.0110011001100110011001100110 ... en binario para evitar fracciones recurrentes.
Y la función de overhelming round () en excel ya no sería útil: D (-> function = 1 * (0,5-0,4-0,1 wtf!)
Espero que explique un poco su pregunta!
El estándar de punto flotante decimal (IEEE 754-2008) ya está implementado en hardware por dos compañías; Los servidores basados en POWER 6/7 de IBM y la tarjeta de aceleración basada en SilMinds SilAx PCIe.
SilMinds publicó un estudio de caso sobre la conversión de la ejecución aritmética decimal para usar sus soluciones HW . Se presenta un gran impulso en el tiempo y el consumo energético reducido.
Además, varias publicaciones de "Michael J. Schulte" y otras revelan resultados de puntos de referencia muy positivos, y algunas comparaciones entre los formatos DPD y BID (ambos definidos en el estándar IEEE 754-2008)
Puedes encontrar pdfs para:
Análisis del rendimiento de las bibliotecas de coma flotante decimal y su impacto en las soluciones de hardware y software decimales
Una encuesta de diseños de hardware para aritmética decimal.
Mejora de la energía y el retardo a través de unidades de punto flotante decimal
¡Esos 3 documentos deberían ser más que suficientes para sus preguntas!
El hardware que quieres solía ser bastante común.
Las CPU más antiguas tenían hardware BCD (Binaray codificado decimal) aritmética. (Los pequeños chips de Intel tenían un poco de soporte, como se señaló en los carteles anteriores)
El hardware BCD fue muy bueno para acelerar FORTRAN, que usaba BCD de 80 bits para los números.
La computación científica solía constituir un porcentaje significativo del mercado mundial.
Dado que todos (relativamente hablando) tienen Windows en casa, el mercado se ha reducido en porcentaje. Así que ya nadie lo hace.
Ya que no te importa tener dobles de 64 bits (punto flotante binario) para la mayoría de las cosas, en su mayoría funciona.
Si utiliza un punto flotante binario de 128 bits en las unidades modernas de vectores de hardware, no está tan mal. Aún menos preciso que el BCD de 80 bits, pero lo entiendes.
En un trabajo anterior, un colega anteriormente de JPL estaba asombrado de que aún utilizáramos FORTRAN. "Nos convertimos a C y C ++, nos dijo". Le pregunté cómo resolvían el problema de la falta de precisión. Ellos no se habían dado cuenta. (Tampoco tienen la misma precisión de aterrizaje de la sonda espacial que solían tener. Pero cualquiera puede perder un planeta).
Así que, básicamente, los dobles de 128 bits en la unidad vectorial están más bien, y están ampliamente disponibles.
Mis veinte centavos. Por favor, no lo represente como un número de punto flotante :)
Especulo que no hay aplicaciones de números decimales intensivas en cómputo. Por otro lado, el número de puntos flotantes se usa ampliamente en aplicaciones de ingeniería, que deben manejar enormes cantidades de datos y no necesitan resultados exactos, solo deben mantenerse dentro de la precisión deseada.
La última revisión de la norma IEEE 754: 2008 sí define los números de punto flotante decimal del hardware, utilizando las representaciones que se muestran en el software al que se hace referencia en la pregunta. La versión anterior del estándar ( IEEE 754: 1985 ) no proporcionaba números de coma flotante decimales. La mayoría del hardware actual implementa el estándar de 1985 y no el estándar de 2008, pero las computadoras iSeries de IBM que usan chips Power6 tienen tal soporte, al igual que los mainframes z10 .
El esfuerzo de estandarización para el punto flotante decimal fue encabezado por Mike Cowlishaw de IBM UK, que tiene un sitio web lleno de información útil (incluido el software en la pregunta). Es probable que, a su debido tiempo, otros fabricantes de hardware también introduzcan unidades de coma flotante decimal en sus chips, pero no he escuchado una declaración de dirección sobre cuándo (o si) Intel podría agregar una. Intel tiene bibliotecas de software optimizadas para ello.
El comité de estándares de C está buscando agregar soporte para el punto flotante decimal y ese trabajo es TR 24732.
La matemática de punto flotante ES esencialmente un intento de implementar decimales en hardware. Es problemático, por lo que los tipos de Decimal se crean en parte en el software. Es una buena pregunta, ¿por qué las CPU no admiten más tipos, pero supongo que se remonta a los procesadores CISC y RISC? RISC ganó la batalla por el rendimiento, por lo que tratan de mantener las cosas simples en estos días, supongo.
La respuesta simple es que las computadoras son máquinas binarias. No tienen diez dedos, tienen dos. Por lo tanto, crear hardware para números binarios es considerablemente más rápido, más fácil y más eficiente que construir hardware para números decimales.
Por cierto: decimal y binario son bases numéricas, mientras que punto fijo y coma flotante son mecanismos para aproximar números racionales. Los dos son completamente ortogonales: puede tener números decimales de punto flotante (el sistema.NET de .NET se implementa de esta manera) y números binarios de punto fijo (los enteros normales son solo un caso especial de esto).
Las computadoras modernas suelen ser de uso general. La aritmética de punto flotante es un propósito muy general, mientras que el decimal tiene un propósito mucho más específico. Creo que eso es parte de la razón.
Los decimales (y, en general, las fracciones) son relativamente fáciles de implementar como un par de enteros. Las bibliotecas de propósito general son ubicuas y lo suficientemente rápidas para la mayoría de las aplicaciones.
Cualquiera que necesite lo último en velocidad va a ajustar su implementación (p. Ej., Cambiar el divisor para que se adapte a un uso particular, combinar / reordenar algebraicamente las operaciones, usar de forma inteligente el orden aleatorio de SIMD ...). Simplemente codificar las funciones más comunes en un hardware ISA seguramente nunca las satisfaría, con toda probabilidad, no ayudaría en absoluto.
No, son muy ineficientes para la memoria. Y los cálculos también están en el hardware que no es fácil de implementar (por supuesto, se puede hacer, pero también puede requerir mucho tiempo). Otra desventaja del formato decimal es que no se usa ampliamente, antes de que la investigación demostrara que los números en formato binario eran más precisos que el formato era popular durante un tiempo. Pero ahora los programadores saben mejor. El formato decimal no es eficiente y tiene más pérdidas. Además, las representaciones de hardware adicionales requieren conjuntos de instrucciones adicionales, que pueden llevar a códigos más difíciles.