Obviamente, esta es una pregunta compleja. La pregunta también podría incluir el procesador celular. Y probablemente no haya una sola respuesta que sea correcta para otras preguntas relacionadas.
En mi experiencia, cualquier implementación realizada en forma abstracta, es decir, compilación de alto nivel de lenguaje frente a la implementación a nivel de máquina, inevitablemente tendrá un costo de rendimiento, especialmente en una compleja implementación de algoritmo. Esto es cierto tanto para FPGA como para procesadores de cualquier tipo. Un FPGA diseñado específicamente para implementar un algoritmo complejo funcionará mejor que un FPGA cuyos elementos de procesamiento son genéricos, permitiendo un grado de programabilidad desde registros de control de entrada, datos de E/S, etc.
Otro ejemplo general donde un FPGA puede ser un rendimiento mucho más alto se da en los procesos en cascada donde las salidas del proceso se convierten en las entradas de otro y no se pueden hacer al mismo tiempo. Los procesos en cascada en un FPGA son simples y pueden reducir drásticamente los requisitos de E/S de memoria, mientras que la memoria del procesador se utilizará para conectar en cascada de manera efectiva dos o más procesos donde existen dependencias de datos.
Lo mismo se puede decir de una GPU y una CPU. Los algoritmos implementados en C que se ejecutan en una CPU desarrollada sin tener en cuenta las características de rendimiento inherentes de la memoria caché o el sistema de memoria principal no funcionarán tan bien como uno implementado que sí lo haga. De acuerdo, no considerar estas características de desempeño simplifica la implementación. Pero a un costo de rendimiento.
Al no tener experiencia directa con una GPU, pero conociendo sus problemas de rendimiento del sistema de memoria inherente, también estará sujeto a problemas de rendimiento.
Me encantaría saber qué opina la gente acerca de cómo Cell se enfrenta a los dos. – 0fnt