Sí, esto se puede hacer en un tiempo constante en un FPGA, pero solo por un valor de \ $ n \ $ limitado por el número de puertas en su FPGA. Usted malinterpreta o tergiversa la definición de \ $ O (n ^ 2) \ $ - Cualquier cosa que se pueda hacer en paralelo puede hacerse \ $ O (1) \ $ por un valor pequeño y finito de \ $ n \ $ por implementación en una CPU de múltiples núcleos, tarjeta gráfica, FPGA o una matriz de supercomputadora en red.
Veamos el ejemplo de cálculo de covarianzas de stocks. En este momento hay aproximadamente 3500 acciones en la NYSE, así que construyamos el sistema para admitir 4096 artículos.
En una CPU de un solo núcleo, eso requeriría \ $ \ left (2 ^ {12} \ right) ^ 2 = 2 ^ {24} \ approx 16,000,000 \ mbox {} \ $ calculations (que es no mucho tiempo, considere que una CPU de 4GHz puede hacer eso 250 veces por segundo), porque el algoritmo es \ $ O (n ^ 2) \ $, como se indicó anteriormente.
Si tuvieras una CPU de 4096 núcleos, ignorando las ineficiencias, podrías hacer esto en 4096 instrucciones. Simplemente ha dividido el número de operaciones por el número de núcleos paralelos sobre los cuales realizar las operaciones.
Si tuviera un algoritmo FPGA que pudiera calcular la covarianza de 4096 artículos simultáneamente, y espacio en el FPGA para ensamblar 4096 de estos bloques, teóricamente podría calcular la covarianza de 4096 o menos elementos en una sola operación.
Eso no significa que el algoritmo es ahora \ $ O (1) \ $, significa que has dividido \ $ n \ $ por \ $ 2 ^ {24} \ $. El algoritmo sigue siendo \ $ O (n ^ 2) \ $. Los FPGA son excelentes para algunas tareas, pero no son mágicos.