Un coprocesador es un procesador de computadora que se utiliza para complementar las funciones del procesador principal (la CPU ). Las operaciones que realiza 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 las tareas que requieren un uso intensivo del procesador del procesador principal , 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 el rendimiento adicional no tengan que pagar por él.
Los coprocesadores varían en su grado de autonomía. Algunos (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 asincrónica; todavía no están optimizados para código de propósito general , o son incapaces de hacerlo debido a un conjunto de instrucciones limitado enfocado en acelerar tareas específicas . Es común que estos sean controlados por acceso directo a memoria (DMA), con el procesador anfitrión (una CPU) construyendo una lista de comandos . El Emotion Engine de PlayStation 2 contenía una inusual unidad vectorial SIMD similar a DSP capaz de ambos modos de operación.
Para aprovechar al máximo el tiempo de procesamiento de los ordenadores mainframe , las tareas de entrada y salida se delegaron en sistemas separados llamados E/S de canal . El mainframe no requería ningún procesamiento de E/S, sino que simplemente establecería parámetros para una operación de entrada o salida y luego enviaría señales al procesador de canal para que llevara a cabo toda la operación. Al dedicar subprocesadores relativamente simples para manejar el formateo y procesamiento de E/S que consumen 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 volvieron comunes a lo largo de la década de 1980 y principios de la de 1990. Los primeros procesadores de 8 y 16 bits usaban software para realizar operaciones aritméticas de punto flotante . Cuando se admitía un coprocesador, los cálculos de punto flotante se podían realizar mucho más rápido. Los coprocesadores matemáticos eran 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, se trataban como dispositivos periféricos, mientras que otras, como Intel 8087 , Motorola 68881 y National 32081, estaban más estrechamente integradas con la CPU.
Otra forma de coprocesador era el coprocesador de pantalla de vídeo, como el que se utilizaba en los ordenadores Atari de 8 bits , el TI-99/4A y los ordenadores domésticos MSX , que se denominaban " controladores de pantalla de vídeo ". El chipset personalizado de Amiga incluye una unidad de este tipo 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, el costo de integrar las funciones aritméticas de punto flotante en el procesador disminuyó. Las altas velocidades de los procesadores también hicieron que fuera difícil implementar 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 crecido, en particular debido a la creciente demanda de gráficos 3D realistas en los juegos de computadora .
El IBM PC 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 quienes utilizaban el 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 en el orden de cincuenta veces. Los usuarios que solo utilizaban el PC para procesamiento de textos, por ejemplo, se ahorraban el alto costo del coprocesador, que no habría acelerado el rendimiento de las operaciones de manipulación de texto.
El 8087 estaba estrechamente integrado con el 8086/8088 y respondía a los 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 podía interpretar estas instrucciones, lo que requería versiones separadas de programas para sistemas con FPU y sin FPU, o al menos una prueba en tiempo de ejecución para detectar la FPU y seleccionar las funciones de biblioteca matemática apropiadas.
Otro coprocesador para el procesador central 8086/8088 fue el coprocesador de entrada/salida 8089. Utilizaba la misma técnica de programación que el 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 IBM PC 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 se instalaba, ya que el 80487SX era un 80486DX completo con un conjunto diferente de conexiones de pines. [1]
Los procesadores Intel posteriores al 80486 integraban hardware de punto flotante en el chip del procesador principal; los avances en la integración eliminaron la ventaja de costo de vender el procesador de punto flotante como un 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 orden de los gigahercios. Estos procesadores de punto flotante integrados en el chip todavía se conocen como 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 admitir 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 software, lo que, aunque era 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 [actualizar], las unidades de procesamiento gráfico ( GPU ) dedicadas en forma de tarjetas gráficas son algo común. Algunos modelos de tarjetas de sonido han sido equipados con procesadores dedicados que proporcionan mezcla digital multicanal y efectos DSP en tiempo real desde 1990 a 1994 ( Gravis Ultrasound y Sound Blaster AWE32 son ejemplos típicos), mientras que Sound Blaster Audigy y Sound Blaster X-Fi son ejemplos más recientes.
En 2006, AGEIA anunció una tarjeta complementaria para ordenadores a la que llamó PhysX PPU . PhysX se diseñó para realizar cálculos físicos complejos de modo que la CPU y la GPU no tuvieran que realizar estos cálculos que consumen mucho tiempo. Fue diseñada para videojuegos, aunque teóricamente se podrían desarrollar otros usos matemáticos para ella. En 2008, Nvidia compró la empresa y eliminó gradualmente la línea de tarjetas PhysX; la funcionalidad se agregó a través de software que permite a sus GPU renderizar PhysX en núcleos normalmente utilizados para el procesamiento de gráficos, utilizando su software de motor Nvidia PhysX.
En 2006, BigFoot Systems presentó una tarjeta complementaria PCI que bautizaron como KillerNIC, que ejecutaba su propio núcleo Linux especial en un FreeScale PowerQUICC que funcionaba a 400 MHz y denominaba al chip FreeScale una 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 dar soporte a CPU de propósito general, GPU ATI/AMD y Nvidia (y otros aceleradores) con un único lenguaje común para núcleos de cómputo .
En la década de 2010, algunos dispositivos de computación móviles habían implementado el concentrador de sensores como coprocesador. Algunos ejemplos de coprocesadores utilizados para gestionar la integración de sensores en dispositivos móviles incluyen los coprocesadores de movimiento Apple M7 y M8 , el Qualcomm Snapdragon Sensor Core [ broken anchor ] y Qualcomm Hexagon , y la unidad de procesamiento holográfico para Microsoft HoloLens .
En 2012, Intel anunció el coprocesador Intel Xeon Phi . [4]
A partir de 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 a partir de 2018, dichos chips de IA están 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 le dieron a los multimedia su aceleración, asumiendo el papel de varias tarjetas aceleradoras DSP ; e incluso las GPU se han integrado en las matrices de 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.