performance sorting floating-point ieee-754

performance - ¿Alguna CPU del mundo real no usa IEEE 754?



sorting floating-point (4)

Además de los Pentium defectuosos , cualquier CPU basada en x86 o x64 usa IEEE 754 como su estándar aritmético de coma flotante.

Aquí hay una breve descripción de los estándares de FPA y sus adopciones.

IEEE 754: Intel x86, and all RISC systems (IBM Power and PowerPC, Compaq/DEC Alpha, HP PA-RISC, Motorola 68xxx and 88xxx, SGI (MIPS) R-xxxx, Sun SPARC, and others); VAX: Compaq/DEC IBM S/390: IBM (however, in 1998, IBM added an IEEE 754 option to S/390) Cray: X-MP, Y-MP, C-90; other Cray models have been based on Alpha and SPARC processors with IEEE-754 arithmetic.

A menos que planee apoyar su biblioteca en arquitecturas de CPU bastante exóticas, es seguro suponer que, por el momento, el 99% de las CPU son compatibles con IEEE 754.

Estoy optimizando una función de clasificación para una biblioteca numérica / estadística basada en la suposición de que, después de filtrar cualquier NaN y hacer algunos giros, los flotantes se pueden comparar como valores de 32 bits sin cambiar el resultado y los dobles se pueden comparar como Ints de 64 bits.

Esto parece acelerar la ordenación de estas matrices en algún lugar del orden del 40%, y mi suposición es válida siempre que la representación a nivel de bit de los números de punto flotante sea IEEE 754. ¿Hay alguna CPU del mundo real que las personas usen realmente (excluyendo en dispositivos integrados, a los cuales esta biblioteca no apunta) que usan alguna otra representación que pueda romper esta suposición.


Depende de dónde traces la línea entre el "mundo real" y el imaginario.

  1. El formato Vax G todavía es compatible con máquinas Alpha (que HP dice que soportarán al menos hasta 2013).
  2. IBM hexadecimal FP todavía es compatible con los mainframes IBM z-series. Han agregado soporte binario y decimal IEEE, pero por lo que he oído, rara vez se usan, porque el FP hexadecimal es bastante más rápido (IBM lo ha estado optimizando durante 45 años aproximadamente ...)

Hasta hace poco, Unisys aún vendía servicios ClearPath IX compatibles con el formato FP de Burroughs y máquinas ClearPath MCP para admitir el formato FP de Univac. Creo que ahora solo se ejecutan en emulación (en Xeons) pero, desde el punto de vista del software, es probable que continúen en uso activo durante otra década o más.

Incluso hay algunas personas que usan DtCyber para ejecutar Plato en mainframes de datos de control (emulados), con su formato único de coma flotante. (Lo siento, pero mi primera programación seria fue en una máquina Cyber ​​de CDC, así que no pude resistirme a mencionarla, incluso si no ha sido "el mundo real" durante décadas).


Las SPU del procesador celular difieren en algunas formas (como la falta de INF y NAN), pero no creo que haya diferencias que puedan romper sus suposiciones ...


Los procesadores PowerPC (Mac hasta aproximadamente 2006-2007, toneladas de servidores actuales de IBM) usan un formato de 128 bits que consta de dos dobles para el doble largo, en cambio si el formato extendido IEEE 754.

Sin embargo, en C u Objectivo-C, no hay una forma portátil de interpretar un número de punto flotante de 32 o 64 bits como un entero (suponiendo float y uint32_t, o double y uint64_t tienen el mismo número de bits). Cuando tenía que hacer ese tipo de cosas, tenía que escribir un código diferente según el compilador (uno usaba un sindicato, el otro era de doble * a largo *). No tengo idea de si una reinterpretación en C ++ lo hará de forma portátil.