Markt ha esta razón en casi todo, pero me voy a tirar mis 2 centavos de dólar por aquí:
Imagina que te he dicho que quería escribir un programa que invierte el orden de los bits dentro de un entero de 32 bits. Algo como esto:
int reverseBits(int input) {
output = 0;
for(int i = 0;i < 32;i++) {
// Check if the lowest bit is set
if(input & 1 != 0) {
output = output | 1; // set the lowest bit to match in the output!
}
input = input >> 1;
output = output << 1;
}
return output;
}
Ahora mi aplicación no es elegante, pero estoy seguro de que usted de acuerdo en que no sería cierto número de operaciones involucradas en hacer esto, y probablemente algún tipo de bucle. Esto significa que en el CPU, han pasado muchas más de 1 ciclo para implementar esta operación.
En un FPGA, usted puede simplemente alambre esto como un par de pestillos. Usted obtener sus datos en algún registro, entonces usted alambre en los diferentes registrar en revertir la orden de bits. Esto significa que la operación se completa en un solo ciclo de reloj de la FPGA. Por lo tanto, en un único ciclo, los huertos para despensas durante ha completado una operación que se llevó a su CPU de uso general muchos miles de ciclos para completar! Además, usted puede transferir probablemente de unos pocos cientos de estos registros en paralelo. Así que si usted puede mover en un par de cientos de números en la FPGA, en un único ciclo finalizará con esos miles de operaciones de cientos de veces más, todo en 1 ciclo de reloj de la FPGA.
Hay muchas cosas que el propósito general de la CPU puede hacer, sino como una limitación, hemos creado generalizada y sencillas instrucciones que necesariamente han de expandirse en las listas de instrucciones simples para completar algunas tareas. Así que podría hacer que el propósito general de la CPU tienen una instrucción como "revertir la orden de bits de 32 bits registrar" y dar la CPU de la misma capacidad que la FPGA acabamos de construir, pero hay un número infinito de posibles instrucciones útiles, y tan solo nos ponen en la que garantiza que el costo en el popular Cpu.
Los FPGAs, CPLDs, y ASICs te darán acceso a las primas de hardware, que permite definir loco operaciones como la de "descifrar AES 256 bytes cifrados con la clave" o "decodificar marco de h.264 de vídeo". Estos tienen latencias de más de un ciclo de reloj en un FPGA, pero se pueden implementar de forma mucho más eficiente los modales de la escritura de la operación en millones de líneas de propósito general código de la asamblea. Esto también tiene la ventaja de hacer la fija propósito FPGA/ASIC para muchas de estas operaciones más eficientes en consumo de energía debido a que no tienen que hacer tanto extraños trabajo!
El paralelismo es la otra parte que markt, señaló, y mientras que es importante, lo principal es que cuando un FPGA paraleliza algo que ya era caro en la CPU en términos de ciclos necesarios para realizar la operación. Una vez que usted comienza diciendo: "yo puedo realizar en 10 FPGA ciclos de una tarea que lleva mi CPU 100.000 ciclos, y yo no puedo hacer esta tarea en paralelo de 4 elementos a la vez," usted puede ver fácilmente por qué un FPGA podría ser un heck de mucho más rápido que una CPU!
Así que ¿por qué no usar FPGAs, CPLDs, y ASICs para todo? Porque en general es un conjunto de chips que no hace nada, pero una sola operación. Esto significa que aunque usted puede conseguir un proceso para que se ejecute en muchos órdenes de magnitud más rápido en su FPGA/ASIC, no se puede cambiar más adelante, cuando la operación ya no es útil. La razón por la que no se puede (en general) a cambio de un FPGA una vez en un circuito es que el cableado de la interfaz es fijo, y, normalmente, el circuito no incluye componentes que le permiten repgrogram la FPGA en una forma más útil de configuración. Hay algunos investigadores que intentan construir híbrido FPGA-módulos de CPU, donde hay una sección de la CPU que es capaz de ser reconectados/reprogramado como una FPGA, que permite "cargar" una sección eficaz de la CPU, pero ninguno de estos ha llegado al mercado (como lo que yo sé).