ASIC: significa IC específico de la aplicación. Básicamente escribes programas para diseñar un chip en HDL . Tomaré casos de cómo funcionan las computadoras modernas para explicar mi punto:
- CPU : las CPU son básicamente un microprocesador con muchos IC auxiliares que realizan tareas específicas. En un microprocesador, solo hay una única unidad de Procesamiento Aritmético (término compuesto) llamada Acumulador en la que debe almacenarse un valor, ya que los cálculos se realizan solo y solo los valores almacenados en el acumulador. Por lo tanto, cada instrucción, cada operación, cada operación R / W debe realizarse a través del acumulador (es por eso que las computadoras más antiguas solían congelarse cuando escribía desde un archivo a algún dispositivo, aunque hoy en día el proceso ha sido refinado y puede no requerir acumulador para interponerse específicamente en DMA) Ahora, en los algoritmos de ML, debe realizar multiplicaciones de matrices que se puedan paralelizar fácilmente, pero tenemos una sola unidad de procesamiento y también llegaron las GPU.
- GPU : las GPU tienen 100 unidades de procesamiento, pero carecen de las funciones multipropósito de una CPU. Por lo tanto, son buenos para cálculos paralelizables. Dado que no hay superposición de memoria (la misma parte de la memoria está siendo manipulada por 2 procesos) en la multiplicación de matriz, las GPU funcionarán muy bien. Aunque como la GPU no es multifuncional, funcionará tan rápido como una CPU alimente datos en su memoria.
- ASIC : ASIC puede ser cualquier cosa que sea una GPU, CPU o un procesador de su diseño, con cualquier cantidad de memoria que desee darle. Digamos que quiere diseñar su propio procesador ML especializado, diseñe un procesador en ASIC. ¿Quieres un número FP de 256 bits? Crear procesador de 256 bits. ¿Quieres que tu resumen sea rápido? ¿Implementar sumador paralelo hasta un mayor número de bits que los procesadores convencionales? Usted quiere
n
¿numero de nucleos? No hay problema. ¿Desea definir el flujo de datos desde diferentes unidades de procesamiento a diferentes lugares? Puedes hacerlo. Además, con una planificación cuidadosa, puede obtener una compensación entre el área ASIC y la potencia y la velocidad. El único problema es que para todo esto necesita crear sus propios estándares. En general, se siguen algunos estándares bien definidos en el diseño de procesadores, como el número de pines y su funcionalidad, el estándar IEEE 754 para la representación de punto flotante, etc. que se han presentado después de muchas pruebas y errores. Entonces, si puede superar todo esto, puede crear fácilmente su propio ASIC.
No sé qué están haciendo google con sus TPU, pero aparentemente diseñaron algún tipo de estándar Integer y FP para sus núcleos de 8 bits, dependiendo de los requisitos disponibles. Probablemente lo estén implementando en ASIC por consideraciones de potencia, área y velocidad.