Después de implementar una función matemática en un chip FPGA. El siguiente gráfico muestra, para ~40 entradas, la respuesta en el tiempo, es decir, cuánto tardó en calcularse la salida. Estos datos forman parte de los resultados de la simulación, que tomó cada entrada de \$0\$ a \$2^{32}-1\$ (la entrada y la salida son números enteros), así que para enfatizar la pregunta, sólo se puso una parte en la imagen.
El eje y son los tiempos de ejecución en ns, el eje x son los valores de entrada. Ahora bien, ¿alguien puede explicar los picos en el gráfico, es decir, la alternancia de subidas y bajadas? ¿Qué puede influir en ese comportamiento?
La función que implementa este chip es de la forma $$f(x) = \sum_{k=0}^x{\frac{g(k)}{h(k)}}$$ para la entrada x, donde tanto g(k) como h(k) son funciones polinómicas. La complejidad total de la operación es $$O(x \log x)$$
PD: La FPGA es Altera Cyclone II, por si influye en la respuesta.
1 votos
Tendrás que mirar los detalles de la implementación, pero en general la división tarda una cantidad variable de tiempo en completarse.
0 votos
Me han dicho lo mismo, también que la multiplicación es una operación de tiempo constante. Pero no he podido encontrar ningún artículo técnico/científico que desarrolle el asunto con cierto detalle, ¿por casualidad conoces alguno?
3 votos
¿Por qué tarda un tiempo variable en dividirse? Recuerda la división larga. Intenta dividir 1 entre 2 utilizando la técnica de la división larga. Convergerá a 0,5 después de una iteración (rápida). Ahora intenta dividir 1 entre 3 con el mismo método, suponiendo que puedes parar después de 20 dígitos. Te llevará mucho más tiempo, ¿verdad?
2 votos
En general, hay 2 tipos de algoritmos de división para hardware: recurrencia de dígitos (básicamente división larga, con algunas posibilidades de mejora) o iteración funcional (véase el método Newton-Raphson, hay otros). Este último tipo puede producir resultados constantes en la precisión de las entradas, pero son generalmente menos preferidos para implementar en hardware (área / potencia, pero también problemas de latencia).
0 votos
@EvanW - ¿podrías poner tus comentarios en una respuesta?