Estoy trabajando en un solucionador de dinámica de fluidos Navier-Stokes que debe ejecutarse en tiempo real. Por lo tanto, el rendimiento es importante.¿Valdrá la pena aritmética de punto fijo mi problema?
En este momento, estoy buscando un número de bucles estrechos que cada cuenta por una fracción significativa del tiempo de ejecución: no hay un solo cuello de botella. La mayoría de estos bucles realizan aritmética en coma flotante, pero hay muchas ramificaciones intermedias.
Las operaciones de coma flotante se limitan principalmente a adiciones, restas, multiplicaciones, divisiones y comparaciones. Todo esto se hace usando flotadores de 32 bits. Mi plataforma objetivo es x86 con al menos instrucciones SSE1. (He verificado en la salida del ensamblador que el compilador genera instrucciones SSE.)
La mayoría de los valores de punto flotante con los que estoy trabajando tienen un límite superior razonablemente pequeño, y la precisión para valores cercanos a cero no es muy importante. Entonces, se me ocurrió lo siguiente: ¿tal vez cambiar a la aritmética de punto fijo podría acelerar las cosas? Sé que la única manera de estar realmente seguro es de medirlo, eso puede llevar días, así que me gustaría saber las probabilidades de éxito de antemano.
El punto fijo estaba de moda en los días de Doom, pero no estoy seguro de lo que es el año 2010. Teniendo en cuenta la cantidad de silicio que se bombea actualmente en el rendimiento de punto flotante, ¿existe la posibilidad de que la aritmética de puntos todavía me dará un impulso de velocidad significativo? ¿Alguien tiene alguna experiencia en el mundo real que se pueda aplicar a mi situación?
La ramificación es probablemente la mayor causa de muerte. Intenta reducirlo tanto como sea posible. Y no, no hagas punto fijo. – phkahler
Encontré lo opuesto. En algunos casos, pude reemplazar la ramificación por otra aritmética de coma flotante, pero eso disminuyó la velocidad. – Thomas
Hace mucho tiempo atrás, utilicé hardware especializado SIMD de punto fijo en el pasado, ¡y fue un gran dolor en el cuello! Lo pensaría dos veces antes de reconsiderar la aritmética de punto fijo. ¿Quieres pasar la mayor parte del tiempo lidiando con las complejidades de la aritmética de punto fijo o resolviendo tu problema más grande? Las CPU de hoy en día tienen mucha más potencia y contienen FPU; yo elegiría una solución de punto flotante. Más bien, dedique tiempo para tratar de mantener la tubería llena, antes que pensar en la aritmética de punto fijo. – Tilo