Cuando se utiliza un FPGA normal como Xilinx Spartan 3 o Virtex 5, ¿cómo
Muchos ciclos hacen un punto flotante de doble precisión de 64 bits.
multiplicación o división llevar a ejecutar?
La respuesta es: ¡Sí!
Pero en serio, es muy difícil encontrar un número. Al diseñar cualquier lógica compleja, siempre hay una compensación entre diferentes cosas, y ningún enfoque es bueno para todos los diseños. Intentaré cubrir los grandes.
Con el diseño lógico, una compensación es el tamaño frente a la velocidad. El ejemplo fácil de esto es, digamos, que un solo multiplicador de punto flotante es demasiado lento. Para acelerarlo todo lo que tienes que hacer es agregar un segundo multiplicador. Su tamaño lógico se duplica, pero sí lo hace el número de multiplicados por segundo. Pero incluso solo mirando un solo multiplicador, hay diferentes maneras de multiplicar números; Algunos son rápidos y grandes, otros son pequeños y lentos.
Otra compensación es la velocidad del reloj frente a los relojes por multiplicación. Podría diseñar alguna lógica que hiciera una sola multiplicación de punto flotante en un reloj. Pero eso también requeriría que el reloj sea más lento, tal vez tan lento como 10 MHz. O bien, podría diseñarlo para que funcione con un reloj de 100 MHz pero requeriría 10 relojes por multiplicar. La velocidad total es la misma (una multiplicación en 100 ns), pero una tiene un reloj más rápido.
Relacionado con el párrafo anterior está el equilibrio entre la velocidad del reloj y la latencia múltiple. Existe una técnica en diseño lógico llamada pipeline. Básicamente, tomas un trozo de lógica y lo divides en etapas más pequeñas, donde cada etapa toma un ciclo de reloj para completar. La ventaja aquí es que cada etapa puede estar trabajando en una multiplicación mientras que las otras etapas están trabajando en otras multiplicaciones. Por ejemplo, digamos que estamos corriendo a 100 MHz con una tubería de 10 etapas. ¡Esto significa que tomará 10 relojes por cada multiplicación, pero la lógica también funciona en 10 multiplicaciones diferentes al mismo tiempo! Lo bueno es que está completando una multiplicación en cada ciclo de reloj. Entonces, los relojes efectivos por multiplicación son 1, solo se necesitan 10 relojes para que se complete cada uno de esos multiplicados.
Entonces, la respuesta a tu pregunta, ¿qué tan rápido puede un FPGA hacer una multiplicación, depende realmente de ti? Los FPGA vienen en diferentes tamaños y velocidades, y puede dedicar la mayor parte de esa lógica a la tarea que desee. Pero veamos un escenario específico ...
Digamos que queremos usar el Spartan-3A más grande y todo lo que nos importa son los multiplicadores de punto flotante de 32 bits. Una multiplicación flotante de 32 bits requiere un multiplicador de enteros 24x24 y un sumador de 8 bits. Esto requiere cuatro de los bloques multiplicadores dedicados y algunos segmentos genéricos (muy pocos para preocuparse). El XC3S1400A tiene 32 multiplicadores dedicados, por lo que podemos hacer ocho de nuestros multiplicadores de punto flotante en paralelo. Una suposición muy aproximada sobre la velocidad del reloj sería de unos 100 MHz. Podemos canalizar completamente este diseño para que podamos completar cuatro multiplicaciones de punto flotante de 32 bits por ciclo de reloj, para una velocidad efectiva de 800 millones de multiplicaciones de punto flotante por segundo.
Una multiplicación de doble precisión requiere 9 bloques multiplicadores dedicados por multiplicación de punto flotante, por lo que solo podemos hacer 3 multiplicados en paralelo, lo que resulta en una velocidad de aproximadamente 300 millones de multiplicadores de punto flotante de 64 bits por segundo.
A modo de comparación, consideremos la nueva serie Xilinx Virtex-7. Los multiplicadores dedicados son más grandes, por lo que solo necesitamos 6 bloques multiplicadores dedicados para una multiplicación de punto flotante de 64 bits. También hay 1,920 multiplicadores dedicados en la parte más grande, por lo que podemos hacer 320 multiplicaciones de punto flotante de doble precisión en paralelo. Esas partes también son mucho más rápidas. Estimo que podemos ejecutar esas partes a 200 MHz, lo que nos da una velocidad total de 64 mil millones de puntos de coma flotante de precisión doble multiplicados por segundo. Por supuesto, esos chips cuestan alrededor de US $ 10,000 cada uno.
La división de punto flotante es mucho más difícil de hacer rápidamente. La lógica es mucho más grande, especialmente en un FPGA, y se ejecuta mucho más lento. Lo mismo ocurre con la mayoría de las CPU, ya que las instrucciones de división (punto flotante y fijo) se ejecutan mucho más lentamente. Si la velocidad es importante, entonces desea eliminar la mayor cantidad posible de divisiones. Por ejemplo, en lugar de dividir por 5, debes multiplicar por 0.2. De hecho, en muchos sistemas es más rápido calcular un recíproco y hacer una multiplicación que hacer una división.
Las mismas compensaciones se aplican a la división que a la multiplicación: es solo que la división siempre será mucho más lenta y mucho más grande que la multiplicación.