El procesador de elementos heterogéneos ( HEP ) fue presentado por Denelcor, Inc. en 1982. El arquitecto del HEP fue Burton Smith . La máquina fue diseñada para resolver problemas de dinámica de fluidos para el Laboratorio de Investigación Balística . [1] Un sistema HEP, como su nombre lo indica, se ensamblaba a partir de muchos componentes heterogéneos : procesadores , módulos de memoria de datos y módulos de E/S. Los componentes estaban conectados a través de una red conmutada .
Un solo procesador, llamado PEM, en un sistema HEP (se podían conectar hasta dieciséis PEM) era bastante poco convencional; a través de una "cola de palabras de estado del programa (PSW)", se podían mantener hasta cincuenta procesos en el hardware a la vez. El sistema más grande jamás entregado tenía 4 PEM. La secuencia de instrucciones de ocho etapas permitía que las instrucciones de ocho procesos diferentes procedieran a la vez. De hecho, solo se permitía que una instrucción de un proceso determinado estuviera presente en la secuencia en cualquier momento. Por lo tanto, el rendimiento total del procesador de 10 MIPS solo se podía lograr cuando ocho o más procesos estaban activos; ningún proceso individual podía lograr un rendimiento mayor a 1,25 MIPS. Este tipo de procesamiento multihilo clasifica al HEP como un procesador de barril . La implementación de hardware del PEM HEP era lógica acoplada a emisor .
Los procesos se clasificaron como de nivel de usuario o de nivel de supervisor. Los procesos de nivel de usuario podían crear procesos de nivel de supervisor, que se utilizaban para gestionar procesos de nivel de usuario y realizar operaciones de E/S. Los procesos de la misma clase debían agruparse en una de siete tareas de usuario y siete tareas de supervisor.
Cada procesador, además de la cola PSW y la secuencia de instrucciones, contenía memoria de instrucciones, 2.048 registros de propósito general de 64 bits y 4.096 registros constantes. Los registros constantes se diferenciaban por el hecho de que solo los procesos supervisores podían modificar su contenido. Los procesadores en sí no contenían memoria de datos; en su lugar, los módulos de memoria de datos podían conectarse por separado a la red conmutada.
La memoria HEP constaba de una memoria de instrucciones completamente separada (hasta 128 MB) y una memoria de datos (hasta 1 GB). Los usuarios veían palabras de 64 bits, pero en realidad, las palabras de la memoria de datos eran de 72 bits y los bits adicionales se utilizaban para el estado (consulte el párrafo siguiente), la paridad, el etiquetado y otros usos.
El HEP implementó un tipo de exclusión mutua en el que todos los registros y ubicaciones en la memoria de datos tenían estados "vacíos" y "llenos" asociados. La lectura desde una ubicación establecía el estado en "vacío", mientras que la escritura en ella establecía el estado en "lleno". Un programador podía permitir que los procesos se detuvieran después de intentar leer desde una ubicación vacía o escribir en una ubicación llena, lo que reforzaba las secciones críticas.
La red conmutada entre elementos se parecía, en muchos sentidos, a una red informática moderna. En la red había conjuntos de nodos, cada uno de los cuales tenía tres enlaces. Cuando un paquete llegaba a un nodo, consultaba una tabla de enrutamiento e intentaba reenviarlo más cerca de su destino. Si un nodo se congestionaba, los paquetes entrantes se enrutaban sin enrutamiento. Los paquetes tratados de esa manera tenían un nivel de prioridad aumentado; cuando varios paquetes competían por un solo nodo, un paquete con un nivel de prioridad más alto se enrutaba antes que los que tenían niveles de prioridad más bajos.
Otro componente de la red conmutada era el sistema sO, con su propia memoria y muchos buses DEC UNIBUS individuales conectados para discos y otros periféricos. El sistema también tenía la capacidad de guardar los bits llenos/vacíos que normalmente no son visibles directamente. El rendimiento inicial del sistema IO resultó ser lamentablemente inadecuado debido a la alta latencia en el inicio de las operaciones IO. Ron Natalie (de BRL) y Burton Smith diseñaron un nuevo sistema a partir de piezas de repuesto en servilletas en un restaurante de carnes local y lo pusieron en funcionamiento en el transcurso de la semana siguiente.
El lenguaje de programación de aplicaciones principal del HEP era una variante única de Fortran . Con el tiempo se añadieron C , Pascal y SISAL . La sintaxis de las variables de datos que utilizan bits llenos-vacíos anteponía '$' a su nombre. Por lo tanto, 'A' nombraría una variable local, pero $A sería una variable llena-vacía bloqueada. Por lo tanto, era posible el bloqueo de la aplicación. El problema era que no incluir '$' podía introducir una inexactitud numérica no deseada.
El primer sistema operativo HEP fue HEPOS. Mike Muuss participó en una adaptación a Unix para el Laboratorio de Investigación Balística. HEPOS no era un sistema operativo tipo Unix.
Aunque se sabía que su relación costo-beneficio era baja, el HEP recibió atención debido a varias características que, en ese momento, eran revolucionarias. El HEP tenía el rendimiento de una computadora de clase CDC 7600 en la era Cray-1 . Los sistemas HEP fueron adquiridos por el Laboratorio de Investigación Balística (sistema de cuatro PEM), Los Álamos , el Laboratorio Nacional de Argonne (un PEM), la Agencia de Seguridad Nacional y la alemana Messerschmitt (sistema de tres PEMS). Denelcor también entregó un sistema de dos PEM a la Universidad de Georgia a cambio de que le proporcionaran asistencia de software (el sistema también se había ofrecido a la Universidad de Maryland). [2] Messerschmitt fue el único cliente que puso el HEP en uso para aplicaciones "reales"; los otros clientes lo usaron para experimentar con algoritmos paralelos. El sistema BRL se usó para preparar una película usando el software BRL-CAD como su única aplicación real. Se iniciaron diseños más rápidos y más grandes para HEP-2 y HEP-3, pero nunca se completaron. El concepto arquitectónico se materializaría más tarde con el nombre en código Horizon.