Un coprocesador es un procesador de computadora que se utiliza para complementar las funciones del procesador principal (la CPU ). Las operaciones realizadas por el coprocesador pueden ser aritmética de punto flotante , gráficos , procesamiento de señales , procesamiento de cadenas , criptografía o interfaz de E/S con dispositivos periféricos. Al descargar del procesador principal las tareas que requieren un uso intensivo del procesador , los coprocesadores pueden acelerar el rendimiento del sistema. Los coprocesadores permiten personalizar una línea de computadoras, de modo que los clientes que no necesitan rendimiento adicional no necesitan pagar por ello.
Los coprocesadores varían en su grado de autonomía. Algunas (como las FPU ) dependen del control directo a través de instrucciones del coprocesador , integradas en el flujo de instrucciones de la CPU . Otros son procesadores independientes por derecho propio, capaces de trabajar de forma asíncrona; todavía no están optimizados para código de propósito general , o son incapaces de hacerlo debido a un conjunto limitado de instrucciones enfocadas en acelerar tareas específicas . Es común que estos sean controlados por acceso directo a la memoria (DMA), con el procesador host (una CPU) creando una lista de comandos . El Emotion Engine de PlayStation 2 contenía una inusual unidad vectorial SIMD similar a un DSP capaz de ambos modos de operación.
Para aprovechar al máximo el tiempo del procesador de la computadora central , las tareas de entrada/salida se delegaron a sistemas separados llamados Canal de E/S . La computadora central no requeriría ningún procesamiento de E/S, sino que simplemente establecería parámetros para una operación de entrada o salida y luego indicaría al procesador de canal que lleve a cabo toda la operación. Al dedicar subprocesadores relativamente simples para manejar el formateo y el procesamiento de E/S que requieren mucho tiempo, se mejoró el rendimiento general del sistema.
Los coprocesadores para aritmética de punto flotante aparecieron por primera vez en las computadoras de escritorio en la década de 1970 y se hicieron comunes durante la década de 1980 y principios de la de 1990. Los primeros procesadores de 8 y 16 bits utilizaban software para realizar operaciones aritméticas de punto flotante . Cuando se admitía un coprocesador, los cálculos en punto flotante se podían realizar mucho más rápido. Los coprocesadores matemáticos fueron compras populares para los usuarios de software de diseño asistido por computadora (CAD) y cálculos científicos y de ingeniería. Algunas unidades de punto flotante, como AMD 9511 , Intel 8231/8232 y Weitek FPU fueron tratadas como dispositivos periféricos, mientras que otras como Intel 8087 , Motorola 68881 y National 32081 se integraron más estrechamente con la CPU.
Otra forma de coprocesador era un coprocesador de visualización de vídeo, como el utilizado en los ordenadores domésticos Atari de 8 bits , TI-99/4A y MSX , que se denominaban " controladores de visualización de vídeo ". El chipset personalizado de Amiga incluye una unidad conocida como Copper , así como un blitter para acelerar la manipulación de mapas de bits en la memoria.
A medida que se desarrollaron los microprocesadores, disminuyó el costo de integrar las funciones aritméticas de punto flotante en el procesador. Las altas velocidades del procesador también dificultaron la implementación de un coprocesador estrechamente integrado. Los coprocesadores matemáticos empaquetados por separado ahora son poco comunes en las computadoras de escritorio. Sin embargo, la demanda de un coprocesador gráfico dedicado ha aumentado, especialmente debido a la creciente demanda de gráficos 3D realistas en los juegos de ordenador .
La PC IBM original incluía un zócalo para el coprocesador de punto flotante Intel 8087 (también conocido como FPU ), que era una opción popular para las personas que usaban la PC para diseño asistido por computadora o cálculos matemáticos intensivos. En esa arquitectura, el coprocesador acelera la aritmética de punto flotante del orden de cincuenta veces. Los usuarios que sólo utilizaban el PC para el procesamiento de textos, por ejemplo, se ahorraban el elevado coste del coprocesador, que no habría acelerado el rendimiento de las operaciones de manipulación de textos.
El 8087 estaba estrechamente integrado con el 8086/8088 y respondía a códigos de operación de código de máquina de punto flotante insertados en el flujo de instrucciones del 8088. Un procesador 8088 sin un 8087 no podría interpretar estas instrucciones, lo que requería versiones separadas de programas para sistemas FPU y no FPU, o al menos una prueba en tiempo de ejecución para detectar la FPU y seleccionar las funciones matemáticas apropiadas de la biblioteca.
Otro coprocesador para el procesador central 8086/8088 fue el coprocesador de entrada/salida 8089 . Utilizaba la misma técnica de programación que 8087 para operaciones de entrada/salida, como la transferencia de datos desde la memoria a un dispositivo periférico, reduciendo así la carga en la CPU. Pero IBM no lo utilizó en el diseño de PC de IBM e Intel detuvo el desarrollo de este tipo de coprocesador.
El microprocesador Intel 80386 utilizaba un coprocesador "matemático" opcional (el 80387 ) para realizar operaciones de punto flotante directamente en el hardware . El procesador Intel 80486DX incluía hardware de punto flotante en el chip. Intel lanzó un procesador de costo reducido, el 80486SX, que no tenía hardware de punto flotante, y también vendió un coprocesador 80487SX que esencialmente deshabilitaba el procesador principal cuando estaba instalado, ya que el 80487SX era un 80486DX completo con un conjunto diferente de conexiones de pines. [1]
Los procesadores Intel posteriores al 80486 integraron hardware de punto flotante en el chip del procesador principal; Los avances en la integración eliminaron la ventaja de costos de vender el procesador de punto flotante como elemento opcional. Sería muy difícil adaptar técnicas de placa de circuito adecuadas a una velocidad de procesador de 75 MHz para cumplir con los estándares de retardo de tiempo, consumo de energía e interferencia de radiofrecuencia requeridos a velocidades de reloj del rango de gigahercios. Estos procesadores de punto flotante en chip todavía se denominan coprocesadores porque funcionan en paralelo con la CPU principal.
Durante la era de las computadoras de escritorio de 8 y 16 bits, otra fuente común de coprocesadores de punto flotante fue Weitek . Estos coprocesadores tenían un conjunto de instrucciones diferente al de los coprocesadores Intel y usaban un zócalo diferente, que no todas las placas base admitían. Los procesadores Weitek no proporcionaban funciones matemáticas trascendentales (por ejemplo, funciones trigonométricas) como la familia Intel x87 y requerían bibliotecas de software específicas para respaldar sus funciones. [2]
La familia Motorola 68000 tenía los coprocesadores 68881/68882 que proporcionaban una aceleración de velocidad de punto flotante similar a la de los procesadores Intel. Las computadoras que usaban la familia 68000 pero no estaban equipadas con el procesador de punto flotante de hardware podían capturar y emular las instrucciones de punto flotante en el software, que, aunque más lento, permitía distribuir una versión binaria del programa para ambos casos. El coprocesador de administración de memoria 68451 fue diseñado para funcionar con el procesador 68020. [3]
A partir de 2001 , las unidades de procesamiento de gráficos ( GPU[actualizar] ) dedicadas en forma de tarjetas gráficas son algo común. Ciertos modelos de tarjetas de sonido han sido equipados con procesadores dedicados que proporcionan mezcla digital multicanal y efectos DSP en tiempo real ya entre 1990 y 1994 (el Gravis Ultrasound y el Sound Blaster AWE32 son ejemplos típicos), mientras que el Sound Blaster Audigy y el Sound Blaster X -Fi son ejemplos más recientes.
En 2006, AGEIA anunció una tarjeta complementaria para computadoras a la que llamó PhysX PPU . PhysX fue diseñado para realizar cálculos físicos complejos para que la CPU y la GPU no tengan que realizar estos cálculos que consumen mucho tiempo. Fue diseñado para videojuegos, aunque teóricamente se podrían desarrollar otros usos matemáticos para él. En 2008, Nvidia compró la empresa y eliminó gradualmente la línea de tarjetas PhysX; la funcionalidad se agregó a través de un software que permite a sus GPU representar PhysX en núcleos que normalmente se usan para el procesamiento de gráficos, utilizando su software de motor Nvidia PhysX.
En 2006, BigFoot Systems presentó una tarjeta complementaria PCI que bautizaron KillerNIC que ejecutaba su propio kernel Linux especial en un FreeScale PowerQUICC que funcionaba a 400 MHz, llamando al chip FreeScale Unidad de procesamiento de red o NPU.
SpursEngine es una tarjeta complementaria orientada a medios con un coprocesador basado en la microarquitectura Cell . Las SPU son en sí mismas coprocesadores vectoriales.
En 2008, Khronos Group lanzó OpenCL con el objetivo de admitir CPU de uso general, GPU ATI/AMD y Nvidia (y otros aceleradores) con un único lenguaje común para núcleos informáticos .
En la década de 2010, algunos dispositivos informáticos móviles habían implementado el concentrador de sensores como coprocesador. Ejemplos de coprocesadores utilizados para manejar la integración de sensores en dispositivos móviles incluyen los coprocesadores de movimiento Apple M7 y M8 , Qualcomm Snapdragon Sensor Core y Qualcomm Hexagon , y la Unidad de Procesamiento Holográfico para Microsoft HoloLens .
En 2012, Intel anunció el coprocesador Intel Xeon Phi . [4]
Desde 2016 [actualizar], varias empresas están desarrollando coprocesadores destinados a acelerar las redes neuronales artificiales para la visión y otras tareas cognitivas (por ejemplo, unidades de procesamiento de visión , TrueNorth y Zeroth ), y desde 2018, dichos chips de IA se encuentran en teléfonos inteligentes como los de Apple y varios proveedores de teléfonos Android.
Con el tiempo, las CPU han tendido a crecer para absorber la funcionalidad de los coprocesadores más populares. Las FPU ahora se consideran una parte integral de la línea principal de procesadores; Las unidades SIMD dieron aceleración a los multimedia, asumiendo el papel de varias tarjetas aceleradoras DSP ; e incluso las GPU se han integrado en las CPU. No obstante, las unidades especializadas siguen siendo populares fuera de las máquinas de escritorio y para obtener energía adicional, y permiten una evolución continua independientemente de las principales líneas de productos de procesadores.