61 votos

¿Cómo puede un FPGA de superar a un CPU

He oído de gente usando FPGAs para mejorar el rendimiento de los sistemas que hacer cosas como bit-coin, la minería, el comercio electrónico y el plegamiento de la proteína.

¿Cómo puede un FPGA competir con un CPU en el rendimiento de la CPU es típicamente al menos un orden de magnitud más rápido (en términos de velocidad de reloj)?

55voto

Kimball Robinson Puntos 161

La CPU de la secuencia de procesamiento de los dispositivos. Romper un algoritmo en una secuencia de operaciones y la ejecución de una en una.

Del FPGA son (o pueden ser configurados como) de procesamiento paralelo de dispositivos. Todo un algoritmo puede ser ejecutado en un solo tick del reloj, o, en el peor de los casos, mucho menos impulsos de reloj que se lleva un procesador secuencial. Uno de los costos para el aumento de la lógica de la complejidad es normalmente un límite inferior a la que el dispositivo puede ser sincronizado.

Teniendo en cuenta lo anterior, del FPGA puede superar el CPU realizar ciertas tareas, porque se puede hacer la misma tarea en menos impulsos de reloj, aunque a un menor por lo general la frecuencia de reloj. Las ganancias que se pueden lograr son altamente dependientes del algoritmo, pero al menos un orden de magnitud no es atípico para algo como un FFT.

Además, debido a que puede generar varios paralelo de unidades de ejecución en un FPGA, si tiene un gran volumen de datos que desea pasar a través del mismo algoritmo, se pueden distribuir los datos a través de la ejecución en paralelo de las unidades y obtener más órdenes de magnitud mayor rendimiento que se puede lograr incluso con un multi-core CPU.

El precio que usted paga por las ventajas es el consumo de energía y de $$$'s.

37voto

Aaron Puntos 154

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é).

32voto

c00p3r Puntos 31

Todas las otras respuestas populares que aquí se presenta hablar literal de las diferencias entre los FPGAs y Cpu. Señala que la naturaleza paralela de la FPGA vs la naturaleza secuencial de un CPU, o dar ejemplos de por qué ciertos algoritmos pueden funcionar bien en un FPGA. Todas esas son buenas y verdaderas, pero me gustaría sugerir, sin embargo, que hay una mayor diferencia fundamental entre la Cpu y los FPGAs.

¿Cuál es el común denominador entre un FPGA y un CPU? Es que ambos están construidos en la parte superior de silicio. Y en algunos casos, literalmente, el mismo silicio procesos.

La diferencia fundamental es que las abstracciones que nos de la pila en la parte superior de que el silicio. No es posible para un ser humano para comprender el detalle completo de una sola CPU moderno diseño de silicio para empaquetado IC. Por ello, como parte del proceso de ingeniería dividimos ese problema complejo en partes más manejables problemas que los seres humanos pueden envolver su cabeza alrededor.

Considerar lo que se necesita a su vez que el silicio en un funcionamiento de la CPU. He aquí una visión algo simplificada de las capas de abstracción necesario para ese objetivo:

  1. En primer lugar tenemos a los ingenieros que saben cómo crear transistores de silicio. Ellos saben cómo diseñar minúsculos transistores que sip de alimentación y el interruptor a la tasa de 10 o incluso 100 de los gigahercios, y saben que el diseño robusto de los transistores que puede conducir señales con el poder suficiente para enviarlos de un IC paquete y a través de una PCB a otro chip.

  2. Luego tenemos a la lógica digital diseñadores que saben cómo poner los transistores junto a las bibliotecas con cientos de diferentes tipos de células de lógica. Puertas lógicas, flip flops, une, y las serpientes, para nombrar unos pocos. Todos en una variedad de configuraciones.

  3. A continuación tenemos varios grupos de ingenieros que saben cómo poner esos digital (y a veces analógico) bloques juntos para formar más alto nivel de bloques funcionales como de alta velocidad, transceptores, controladores de memoria, la rama de predictores, Alu, etc.

  4. Luego tenemos los diseñadores de CPU para el arquitecto extremo alto de CPU diseños de juntar esas unidades funcionales en un sistema completo.

Y no se detiene allí. En este punto tenemos un CPU que ejecuta el código de la asamblea, pero que no es un idioma que la mayoría de los programadores escribir en estos días.

  1. Podríamos tener un compilador de C para que se compila a código ensamblador (probablemente a través de alguna representación intermedia)
  2. Podríamos añadir otra abstracción en la parte superior de C para obtener un lenguaje orientado a objetos
  3. Incluso podríamos escribir una máquina Virtual en la parte superior de C o C++ por lo que podemos interpretar las cosas como código de bytes de Java

Y las capas de abstracción puede ir de allí. El punto importante aquí es que esas capas de abstracción se combinan para producir un CPU basado en el sistema que las escalas de forma masiva y los costos de una pequeña fracción de una costumbre de silicio de diseño.

Sin EMBARGO, el punto importante aquí es que cada uno de abstracción también conlleva un coste en sí. El transistor diseñador de no construir el transistor perfecto para cada caso de uso. Construye una razonable biblioteca, y así, a veces un transistor se utiliza que consume un poco más de potencia o un poco más silicio que es realmente necesario para el trabajo a mano. Y del mismo modo la lógica de los diseñadores no construir todas las posibles lógica de la célula. Podría construir una puerta NAND de 4 entradas y un 8 entrada de la puerta NAND, pero ¿qué sucede cuando otro ingeniero necesita un 6 entradas NAND? Él usa un 8 entrada de la puerta NAND y los lazos de 2 las entradas no utilizadas que se traduce en la pérdida de silicio de los recursos y de talle poder. Y así sigue la cadena de abstracciones. Cada capa que nos da una manera de manejar la complejidad, pero al mismo tiempo la carga de nosotros un adicional de costo incremental en términos de silicio y el poder.

Compare ahora esas abstracciones para lo que se necesita para un FPGA. Esencialmente, la FPGA abstracciones parada en #2 en la lista anterior. El FPGA permite a los desarrolladores trabajar en la lógica digital de la capa. Es un poco más sofisticados que los que ya CPUs están "codificados" en esta capa y FPGAs debe estar configurado en tiempo de ejecución (que, por CIERTO, es la razón por la Cpu suele ser mucho más altas frecuencias), pero la esencial importancia de la verdad es que son muy pocas las abstracciones de FPGAs que para la Cpu.

A la pregunta en cuestión, ¿por Qué puede un FPGA ser más rápido que un CPU? En esencia, es porque la FPGA utiliza mucho menos abstracciones que significa que los diseñadores trabajan más de cerca con el silicio. Él no pagar los gastos de todos los abstracciones que son necesarios para la Cpu. Y por la misma razón el típico diseño de FPGA se consumen mucha menos energía que los diseños de CPU-hay menos de una abstracción costo.

Pero, por supuesto, hay un lado negativo para menos abstracciones así. Todos los CPU abstracciones están ahí por una buena razón. Ellos nos dan mucho más simple de codificación de paradigma que significa que más personas pueden desarrollar fácilmente por ellos. Que a su vez significa que hay muchos más recursos de la CPU diseños en existencia y por lo tanto tenemos enormes precio/escala/el tiempo-a-mercado de los beneficios de la Cpu.

Así que ahí lo tienen. Los FPGAs tienen menos abstracciones y para que puedan ser más rápido y más eficiente de la energía, pero difícil de programa. CPUs tienen muchas abstracciones de diseño para que sean fáciles de desarrollar, escalable, y barato. Pero te dan la velocidad y la potencia en el comercio de esos beneficios.

22voto

RawBean Puntos 131

Mientras que las otras respuestas son todos correctos, ninguno de ellos aborda el bitcoin minería ejemplo de su pregunta, que es de hecho un digno ejemplo. Bitcoin mining consiste en calcular repetidamente una función hash criptográfica, SHA-256 del resultado de otra SHA-256 de cálculo, de datos donde sólo un único entero de 32 bits cambios, hasta que el hash resultante tiene ciertas propiedades. SHA-256 consta de 64 repeticiones de la misma algoritmo de la participación de 32 bits adiciones, bitshifts, y algunos más de los bits de planchado de operaciones.

Si el programa de este bucle en una de 32 bits (o más) de la CPU, se encuentra su conjunto de instrucciones muy adecuado para la tarea---SHA-256 fue diseñado para funcionar de manera eficiente en las Cpu. Todavía usted sólo va a utilizar ser el 2% de una CPU moderna de silicio de la zona, con el área de intensivo de la funcionalidad como el almacenamiento en caché, la multiplicación, la división de punto flotante de operación, la ramificación y el ramal de predicción, etc., no se utiliza en absoluto, o no pueden proporcionar un importante aumento de rendimiento para esta tarea en particular.

En hardware configurable como una FPGA, usted simplemente implementar solo esos 2%, y optimizar aún más por olvidar todo acerca de la ejecución de código, en lugar de diseñar puertas directamente a calcular cada uno de los que a menudo se repiten subfunciones. Canalizado tal que cada uno de ellos pasa un resultado en la siguiente cada reloj cylce, y repetido de 128 veces (y con algunos adicionales especiales de lógica donde cada SHA-256 comienza y termina), usted puede terminar encima de conseguir un resultado cada ciclo de reloj (quizá de 100 millones de hashes por segundo en una FPGA que se anuncian para el apoyo de 300 MHz en la simple lógica de este), mientras que en un CPU moderno, se puede esperar un resultado cada pocos miles de ciclos de reloj por núcleo, decir 10 millones de hashes por segundo en un multi-core multi-GHz de la CPU.

Si este ejemplo en particular es de interés para usted, puede que desee echar un vistazo a mis relacionadas con la respuesta acerca de las interioridades de ASIC mineros de bitcoin.stackexchange, ya que muchos FPGA mineros trabajan en la misma forma, el uso configurable en lugar de encargo de hardware. Sólo para la integridad causa: Existen otras posibilidades, como limitar o evitar la canalización he descrito en favor de una más trivial de paralelización mediante el uso de múltiples independiente SHA-256 hashers. Depening en las restricciones dadas por la FPGA de los componentes internos y su tamaño total, que puede incluso dar un mejor rendimiento aunque sería menos eficiente en términos de la puerta del recuento y de la sobrecarga de enrutamiento si tenía la perfecta libertad en el diseño de todo el chip, no sólo una FPGA de la configuración.

3voto

0xc000005 Puntos 21

Las respuestas anteriores, mientras correcta, se pierda el punto acerca de por qué los FPGAs (y personalizado ASICs) son especialmente buenos para el bitcoin cálculos.

La gran ventaja es que una gran proporción de la SHA-256 cálculos son las operaciones lógicas (por ejemplo, poco turnos) que se puede hacer en el cableado. Cuando se hace de esta manera, se requieren 0 ciclos de reloj.

Otra ventaja importante es que los FPGAs son mucho más eficientes en consumo de energía (es decir, MIPS por Vatio) de la Cpu, por lo que la cantidad de energía necesaria para los cálculos es mucho menor. Esto es importante debido a que el costo de la minería de bitcoin depende de la cantidad de electricidad que se utiliza para hacer.

Chips ASIC son más eficientes en energía que los FPGAs, por lo que puede ejecutar el mismo código mucho más barato. También se puede meter más unidades de ejecución a bordo para hacer de ellos más rápido. La desventaja es que el costo de la realización de un ASIC personalizado es muy alta por lo que tendría que vender muy pocas fichas para cubrir el costo de fabricación.

Las gpu,también son utilizados para la fabricación de bitcoins, pero ya que son mucho menos eficientes de energía han ido perdiendo terreno frente a los FPGAs y personalizado de ASICs.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X