lunes, 4 de mayo de 2015

Procesamiento paralelo

La computación Paralela o procesamiento paralelo, es muy importante actualmente, al permitir mejorar la velocidad en la solución de grandes problemas, de modo que se mejora el rendimiento de computo.

Las computadoras paralelas pueden clasificarse según el nivel de paralelismo que admite su
 hardware: equipos con procesadores multinúcleo y multi-procesador que tienen múltiples elementos de procesamiento dentro de una sola máquina y los clústeres, MPPS y grids que utilizan varios equipos para trabajar en la misma tarea. Muchas veces, para acelerar tareas específicas, se utilizan arquitecturas especializadas de computación en paralelo junto a procesadores tradicionales.La computación paralela es una forma de cómputo en la que muchas instrucciones se ejecutan simultáneamente,1 operando sobre el principio de que problemas grandes, a menudo se pueden dividir en unos más pequeños, que luego son resueltos simultáneamente (en paralelo). Hay varias formas diferentes de computación paralela: paralelismo a nivel de bit, paralelismo a nivel de instrucción, paralelismo de datos y paralelismo de tareas. El paralelismo se ha empleado durante muchos años, sobre todo en la computación de altas prestaciones, pero el interés en ella ha crecido últimamente debido a las limitaciones físicas que impiden el aumento de la frecuencia. Como el consumo de energía —y por consiguiente la generación de calor— de las computadoras constituye una preocupación en los últimos años, la computación en paralelo se ha convertido en el paradigma dominante en laarquitectura de computadores, principalmente en forma de procesadores multinúcleo.
Los programas informáticos paralelos son más difíciles de escribir que los secuenciales, porque la concurrencia introduce nuevos tipos de errores de software, siendo las condiciones de carrera los más comunes. La comunicación y sincronización entre diferentes subtareas son algunos de los mayores obstáculos para obtener un buen rendimiento del programa paralelo.
La máxima aceleración posible de un programa como resultado de la paralelización se conoce como la ley de Amdahl.

Conceptos básicos

Tradicionalmente, los programas informáticos se han escrito para el cómputo en serie. Para resolver un problema, se construye un algoritmo y se implementa como un flujo en serie de instrucciones. Estas instrucciones se ejecutan en una unidad central de procesamiento en un ordenador. Sólo puede ejecutarse una instrucción a la vez y un tiempo después de que la instrucción ha terminado, se ejecuta la siguiente.
La computación en paralelo, por el contrario, utiliza simultáneamente múltiples elementos de procesamiento para resolver un problema. Esto se logra mediante la división del problema en partes independientes de modo que cada elemento de procesamiento pueda ejecutar su parte del algoritmo de manera simultánea con los otros. Los elementos de procesamiento son diversos e incluyen recursos tales como una computadora con múltiples procesadores, varios ordenadores en red, hardware especializado, o cualquier combinación de los anteriores.
El aumento de la frecuencia fue la razón dominante de las mejoras en el rendimiento de las computadoras desde mediados de 1980 hasta el año 2004. El tiempo de ejecución de un programa es igual al número de instrucciones multiplicado por el tiempo promedio por instrucción. Manteniendo todo lo demás constante, el aumento de la frecuencia de reloj reduce el tiempo medio que tarda en ejecutarse una instrucción, por tanto un aumento en la frecuencia reduce el tiempo de ejecución de los programas de cómputo.
Sin embargo, el consumo de energía de un chip está dada por la ecuación P = C × V2 × F, donde P es la potencia, C es el cambio de capacitancia por ciclo de reloj —proporcional al número de transistores cuyas entradas cambian—, V es la tensión, y F es la frecuencia del procesador (ciclos por segundo). Un aumento en la frecuencia aumenta la cantidad de energía utilizada en un procesador. El aumento del consumo de energía del procesador llevó a Intel en mayo del 2004 a la cancelación de sus procesadores Tejas y Jayhawk, este hecho generalmente se cita como el fin del escalado de frecuencia como el paradigma dominante de arquitectura de computadores.
La ley de Moore es la observación empírica de que la densidad de transistores en un microprocesador se duplica cada 18 a 24 meses. A pesar de los problemas de consumo de energía, y las repetidas predicciones de su fin, la ley de Moore sigue vigente. Con el fin del aumento de la frecuencia, estos transistores adicionales —que ya no se utilizan para el aumento de la frecuencia— se pueden utilizar para añadir hardware adicional que permita la computación paralela.

Ley de Amdahl y ley de Gustafson


La aceleración potencial de un algoritmo en una plataforma de cómputo en paralelo está dada por la
 ley de Amdahl, formulada originalmente por Gene Amdahl en la década de 1960. Esta señala que una pequeña porción del programa que no pueda paralelizarse va a limitar la aceleración que se logra con la paralelización. Los programas que resuelven problemas matemáticos o ingenieriles típicamente consisten en varias partes paralelizables y varias no paralelizables (secuenciales). Si \alpha es la fracción de tiempo que un programa gasta en partes no paralelizables, luego Idealmente, la aceleración a partir de la paralelización es lineal, doblar el número de elementos de procesamiento debe reducir a la mitad el tiempo de ejecución y doblarlo por segunda vez debe nuevamente reducir el tiempo a la mitad. Sin embargo, muy pocos algoritmos paralelos logran una aceleración óptima. La mayoría tienen una aceleración casi lineal para un pequeño número de elementos de procesamiento, y pasa a ser constante para un gran número de elementos de procesamiento.
S = \frac{1}{\alpha} \qquad \qquad = \lim_{P\to\infty}\frac{1}{\frac{1-\alpha}{P}+\alpha}
es la máxima aceleración que se puede alcanzar con la paralelización del programa. Si la parte secuencial del programa abarca el 10% del tiempo de ejecución, se puede obtener no más de 10× de aceleración, independientemente de cuántos procesadores se añadan. Esto pone un límite superior a la utilidad de añadir más unidades de ejecución paralelas. «Cuando una tarea no puede divididirse debido a las limitaciones secuenciales, la aplicación de un mayor esfuerzo no tiene efecto sobre la programación. La gestación de un niño toma nueve meses, no importa cuántas mujeres se le asigne».
La ley de Gustafson es otra ley en computación que está en estrecha relación con la ley de Amdahl. Señala que el aumento de velocidad con P procesadores es
Ambas leyes asumen que el tiempo de funcionamiento de la parte secuencial del programa es independiente del número de procesadores. La ley de Amdahl supone que todo el problema es de tamaño fijo, por lo que la cantidad total de trabajo que se hará en paralelo también es independiente del número de procesadores, mientras que la ley de Gustafson supone que la cantidad total de trabajo que se hará en paralelo varía linealmente con el número de 
procesadores.

 S(P) = P - \alpha(P-1) \qquad = \alpha + P(1-\alpha). \,

Estructura & funcionamiento de la CPU

La unidad central de procesamiento .(del inglés central processing unit o CPU), es el hardware dentro de una computadora u otros dispositivos programables, que interpreta las instrucciones de un programa informático mediante la realización de las operaciones básicas aritméticas, lógicas y de entrada/salida del sistema. El término en sí mismo y su acrónimo han estado en uso en la industria de la Informática por lo menos desde el principio de los años 1960.1 La forma, el diseño y la implementación de las CPU ha cambiado drásticamente desde los primeros ejemplos, pero su operación fundamental sigue siendo la misma.
Una computadora puede tener más de una CPU; esto se llama multiprocesamiento. Todas las CPU modernas son microprocesadores, lo que significa que contienen un solo circuito integrado (chip). Algunos circuitos integrados pueden contener varias CPU en un solo chip; estos son denominados procesadores multinúcleo. Un circuito integrado que contiene una CPU también puede contener los dispositivos periféricos, y otros componentes de un sistema informático; a esto se llama un sistema en un chip (SoC).
Dos componentes típicos de una CPU son la unidad aritmético lógica (ALU), que realiza operaciones aritméticas y lógicas, y la unidad de control (CU), que extrae instrucciones de la memoria, las decodifica y las ejecuta, llamando a la ALU cuando sea necesario.
No todos los sistemas computacionales se basan en una unidad central de procesamiento. Una matriz de procesador o procesador vectorial tiene múltiples elementos cómputo paralelo, sin una unidad considerada el "centro". En el modelo de computación distribuido, se resuelven problemas mediante un conjunto interconectado y distribuido de procesadores.

Historia del CPU


La idea de un ordenador con programa almacenado ya estaba presente en el diseño de
 J. Presper Eckert y en el ENIAC de John William Mauchly, pero se omitió inicialmente de modo que pudiera ser terminado antes. El 30 de junio de 1945, antes de que se construyera la ENIAC, el matemático John von Neumann distribuyó el trabajo titulado First Draft of a Report on the EDVAC (Primer Borrador de un Reporte sobre el EDVAC). Fue el esbozo de un ordenador de programa almacenado que en agosto de 1949 fue finalmente terminado.2 EDVAC fue diseñado para realizar un cierto número de instrucciones (u operaciones) de varios tipos. Significativamente, los programas escritos para el EDVAC se crearon para ser almacenados en la memoria de alta velocidad del ordenador y no especificado por el cableado físico del ordenador. Esto superó una severa limitación del ENIAC, que era el importante tiempo y esfuerzo requerido para volver a configurar el equipo para realizar una nueva tarea. Con el diseño de von Neumann, el programa o software, que corría EDVAC podría ser cambiado simplemente cambiando el contenido de la memoria. Sin embargo, EDVAC no fue el primer ordenador de programa almacenado; la Máquina Experimental de Pequeña Escala de Mánchester, un pequeño prototipo de ordenador de programa almacenado, corrió su primer programa el 21 de junio de 19483 y la Manchester Mark I corrió su primer programa en la noche del 16 hasta el 17 junio de 1949.Ordenadores, como el ENIAC tenían que ser físicamente recableados para realizar diferentes tareas, que causaron que estas máquinas se llamarán "ordenadores de programas fijo". Dado que el término "CPU" generalmente se define como un dispositivo para la ejecución de software (programa informático), los primeros dispositivos que con razón podríamos llamar CPU vinieron con el advenimiento del ordenador con programa almacenado.
Las primeras CPU fueron diseñadas a medida como parte de un ordenador más grande, generalmente un ordenador único en su especie. Sin embargo, este método de diseñar las CPU a medida, para una aplicación particular, ha desaparecido en gran parte y se ha sustituido por el desarrollo de clases de procesadores baratos y estandarizados adaptados para uno o varios propósitos. Esta tendencia de estandarización comenzó generalmente en la era de los transistores discretos, computadoras centrales y microcomputadoras y fue acelerada rápidamente con la popularización del circuito integrado (IC), éste ha permitido que sean diseñados y fabricados CPU más complejas en espacios pequeños en la orden de nanómetros). Tanto la miniaturización como la estandarización de las CPU han aumentado la presencia de estos dispositivos digitales en la vida moderna mucho más allá de las aplicaciones limitadas de máquinas de computación dedicadas. Los microprocesadores modernos aparecen en todo, desde automóviles hasta teléfonos móviles o celulares y juguetes de niños.
Si bien von Neumann muchas veces acreditado por el diseño de la computadora con programa almacenado debido a su diseño del EDVAC, otros antes que él, como Konrad Zuse, habían sugerido y aplicado ideas similares. La denominada arquitectura Harvard del Harvard Mark I, que se completó antes de EDVAC, también utilizó un diseño de programa almacenado usando cinta de papel perforada en vez de memoria electrónica. La diferencia clave entre las arquitecturas de von Neumann y la de Harvard es que la última separa el almacenamiento y tratamiento de instrucciones de la CPU y los datos, mientras que el primero utiliza el mismo espacio de memoria para ambos. La mayoría de los CPU modernos son de diseño von Neumann, pero los CPU con arquitectura Harvard se ven así, sobre todo en aplicaciones embebidas; por ejemplo, los microcontroladores Atmel AVR son procesadores de arquitectura Harvard.
Los relés eléctricos y los tubos de vacío (válvulas termoiónicas) eran usados comúnmente como elementos de conmutación; un ordenador útil requiere miles o decenas de miles de dispositivos de conmutación. La velocidad global de un sistema depende de la velocidad de los conmutadores. Los ordenadores de tubo, como el EDVAC, tendieron en tener un promedio de ocho horas entre fallos, mientras que los ordenadores de relés, (anteriores y más lentos), como el Harvard Mark I, fallaban muy raramente.1 Al final, los CPU basados en tubo llegaron a ser dominantes porque las significativas ventajas de velocidad producidas generalmente pesaban más que los problemas de confiabilidad. La mayor parte de estas tempranas CPU síncronas corrían en frecuencias de reloj bajas comparadas con los modernos diseños microelectrónicos. Eran muy comunes en este tiempo las frecuencias de la señal del reloj con un rango desde 100 kHz hasta 4 MHz, limitado en gran parte por la velocidad de los dispositivos de conmutación con los que fueron construidos.

Microprocesadores


Las generaciones previas de CPU fueron implementadas como componentes discretos y numerosos circuitos integrados de pequeña escala de integración en una o más tarjetas de circuitos. Por otro lado, los microprocesadores son CPU fabricados con un número muy pequeño de IC; usualmente solo uno. El tamaño más pequeño del CPU, como resultado de estar implementado en una simple pastilla, significa tiempos de conmutación más rápidos debido a factores físicos como el decrecimiento de la
 capacitancia parásita de las puertas. Esto ha permitido que los microprocesadores síncronos tengan tiempos de reloj con un rango de decenas de megahercios a varios gigahercios. Adicionalmente, como ha aumentado la capacidad de construir transistores excesivamente pequeños en un IC, la complejidad y el número de transistores en un simple CPU también se ha incrementado dramáticamente. Esta tendencia ampliamente observada es descrita por la ley de Moore, que ha demostrado hasta la fecha, ser una predicción bastante exacta del crecimiento de la complejidad de los CPUs y otros IC.6En la década de 1970 los inventos fundamentales de Federico Faggin (ICs Silicon Gate MOS con puertas autoalineadas junto con su nueva metodología de diseño de lógica aleatoria) cambió el diseño e implementación de las CPU para siempre. Desde la introducción del primer microprocesador comercialmente disponible, el Intel 4004, en 1970 y del primer microprocesador ampliamente usado, el Intel 8080, en 1974, esta clase de CPU ha desplazado casi totalmente el resto de los métodos de implementación de la Unidad Central de procesamiento. Los fabricantes de mainframes y miniordenadores de ese tiempo lanzaron programas de desarrollo de IC propietarios para actualizar sus arquitecturas de computadorasmás viejas y eventualmente producir microprocesadores con conjuntos de instrucciones que eran retrocompatibles con sus hardwares y softwares más viejos. Combinado con el advenimiento y el eventual vasto éxito de la ahora ubicua computadora personal, el término "CPU" es aplicado ahora casi exclusivamente a los microprocesadores.
Mientras que, en los pasados sesenta años han cambiado drásticamente, la complejidad, el tamaño, la construcción y la forma general de la CPU, es notable que el diseño y el funcionamiento básico no ha cambiado demasiado. Casi todos los CPU comunes de hoy se pueden describir con precisión como máquinas de programa almacenado de von Neumann.A medida que la ya mencionada ley del Moore continúa manteniéndose verdadera, se han presentado preocupaciones sobre los límites de la tecnología de transistor del circuito integrado. La miniaturización extrema de puertas electrónicas está causando los efectos de fenómenos que se vuelven mucho más significativos, como la electromigración y el subumbral de pérdida. Estas nuevas preocupaciones están entre los muchos factores que hacen a investigadores estudiar nuevos métodos de computación como la computación cuántica, así como ampliar el uso de paralelismo y otros métodos que extienden la utilidad del modelo clásico de von Neumann.

Diseño e implementación

Rango de enteros

La manera en que un CPU representa los números es una opción de diseño que afecta las más básicas formas en que el dispositivo funciona. Algunas de las primeras calculadoras digitales usaron, para representar números internamente, un modelo eléctrico del sistema de numeración decimal común (base diez). Algunas otras computadoras han usado sistemas de numeración más exóticos como el ternario (base tres). Casi todos los CPU modernos representan los números en forma binaria, en donde cada dígito es representado por una cierta cantidad física de dos valores, como un voltaje "alto" o "bajo".
El rango del número entero también puede afectar el número de posiciones en memoria que el CPU puede direccionar (localizar). Por ejemplo, si un CPU binario utiliza 32 bits para representar una dirección de memoria, y cada dirección de memoria representa a un octeto (8 bits), la cantidad máxima de memoria que el CPU puede direccionar es 232 octetos, o 4GB. Ésta es una vista muy simple del espacio de dirección del CPU, y muchos diseños modernos usan métodos de dirección mucho más complejos como paginación para localizar más memoria que su rango entero permitiría con un espacio de dirección plano.Con la representación numérica están relacionados el tamaño y la precisión de los números que un CPU puede representar. En el caso de un CPU binario, un bit se refiere a una posición significativa en los números con que trabaja un CPU. El número de bits (o de posiciones numéricas, o dígitos) que un CPU usa para representar los números, a menudo se llama "tamaño de la palabra", "ancho de bits", "ancho de ruta de datos", o "precisión del número entero" cuando se ocupa estrictamente de números enteros (en oposición a números de coma flotante). Este número difiere entre las arquitecturas, y a menudo dentro de diferentes unidades del mismo CPU. Por ejemplo, un CPU de 8 bits maneja un rango de números que pueden ser representados por ocho dígitos binarios, cada dígito teniendo dos valores posibles, y en combinación los 8 bits teniendo 28 ó 256 números discretos. En efecto, el tamaño del número entero fija un límite de hardware en el rango de números enteros que el software corre y que el CPU puede usar directamente.
Niveles más altos del rango de números enteros requieren más estructuras para manejar los dígitos adicionales, y por lo tanto, más complejidad, tamaño, uso de energía, y generalmente costo. Por ello, no es del todo infrecuente, ver microcontroladores de 4 y 8 bits usados en aplicaciones modernas, aun cuando están disponibles CPU con un rango mucho más alto (de 16, 32, 64, e incluso 128 bits). Los microcontroladores más simples son generalmente más baratos, usan menos energía, y por lo tanto disipan menos calor. Todo esto pueden ser consideraciones de diseño importantes para los dispositivos electrónicos. Sin embargo, en aplicaciones del extremo alto, los beneficios producidos por el rango adicional, (más a menudo el espacio de dirección adicional), son más significativos y con frecuencia afectan las opciones del diseño. Para ganar algunas de las ventajas proporcionadas por las longitudes de bits tanto más bajas, como más altas, muchas CPUs están diseñadas con anchos de bit diferentes para diferentes unidades del dispositivo. Por ejemplo, el IBM System/370 usó un CPU que fue sobre todo de 32 bits, pero usó precisión de 128 bits dentro de sus unidades de coma flotante para facilitar mayor exactitud y rango de números de coma flotante. Muchos diseños posteriores de CPU usan una mezcla de ancho de bits similar, especialmente cuando el procesador está diseñado para usos de propósito general donde se requiere un razonable equilibrio entre la capacidad de números enteros y de coma flotante.

Paralelismo


Este proceso da lugar a una ineficacia inherente en CPU subescalares. Puesto que solamente una instrucción es ejecutada a la vez, todo el CPU debe esperar que esa instrucción se complete antes de proceder a la siguiente instrucción. Como resultado, la CPU subescalar queda "paralizado" en instrucciones que toman más de un ciclo de reloj para completar su ejecución. Incluso la adición de 
una segunda unidad de ejecución (ver abajo) no mejora mucho el desempeño. En lugar de un camino quedando congelado, ahora dos caminos se paralizan y aumenta el número de transistores no usados. Este diseño, en donde los recursos de ejecución de la CPU pueden operar con solamente una instrucción a la vez, solo puede, posiblemente, alcanzar el desempeño escalar (una instrucción por ciclo de reloj). Sin embargo, el desempeño casi siempre es subescalar (menos de una instrucción por ciclo).La descripción de la operación básica de un CPU ofrecida en la sección anterior describe la forma más simple que puede tomar un CPU. Este tipo de CPU, usualmente referido como subescalar, opera sobre y ejecuta una sola instrucción con una o dos piezas de datos a la vez.
Las tentativas de alcanzar un desempeño escalar y mejor, han resultado en una variedad de metodologías de diseño que hacen comportarse al CPU menos linealmente y más en paralelo. Cuando se refiere al paralelismo en los CPU, generalmente son usados dos términos para clasificar estas técnicas de diseño.
  • El paralelismo a nivel de instrucción, en inglés instruction level parallelism (ILP), busca aumentar la tasa en la cual las instrucciones son ejecutadas dentro de un CPU, es decir, aumentar la utilización de los recursos de ejecución en la pastilla.
  • El paralelismo a nivel de hilo de ejecución, en inglés thread level parallelism (TLP), que se propone incrementar el número de hilos (efectivamente programas individuales) que un CPU pueda ejecutar simultáneamente.
Cada metodología se diferencia tanto en las maneras en las que están implementadas, como en la efectividad relativa que producen en el aumento del desempeño de la CPU para una aplicación.

domingo, 3 de mayo de 2015

Arquitectura de Von Newman

La arquitectura Von Neumann, también conocida como modelo de Von Neumann o arquitectura Princeton, es una arquitectura de computadoras basada en la descrita en 1945 por el matemático y físico John von Neumann y otros, en el primer borrador de un informe sobre el EDVAC. Este describe una arquitectura de diseño para un computador digital electrónico con partes que constan de una unidad de procesamiento que contiene una unidad aritmético lógica y registros del procesador, una unidad de control que contiene un registro de instrucciones y un contador de programa, una memoria para almacenar tanto datos como instrucciones, almacenamiento masivo externo, y mecanismos de entrada y salida. El significado ha evolucionado hasta ser cualquier computador de programa almacenado en el cual no pueden ocurrir una extracción de instrucción y una operación de datos al mismo tiempo, ya que comparten un bus en común. Esto se conoce como el cuello de botella Von Neumann y muchas veces limita el rendimiento del sistema.
El diseño de una arquitectura Von Neumann es más simple que la arquitectura Harvard más moderna, que también es un sistema de programa almacenado, pero tiene un conjunto dedicado de direcciones y buses de datos para leer datos desde memoria y escribir datos en la misma, y otro conjunto de direcciones y buses de datos para ir a buscar instrucciones.
Añadir leyenda
Un computador digital de programa almacenado es una que mantiene sus instrucciones de programa, así como sus datos, en memoria de acceso aleatorio (RAM) de lectura-escritura. Las computadoras de programa almacenado representaron un avance sobre los ordenadores controlados por programas de la década de 1940, como la Colossus y la ENIAC, que fueron programadas por ajustando interruptores e insertando parches, conduciendo datos de la ruta y para controlar las señales entre las distintas unidades funcionales. En la gran mayoría de las computadoras modernas, se utiliza la misma memoria tanto para datos como para instrucciones de programa, y la distinción entre Von Neumann vs. Harvard se aplica a la arquitectura de memoria caché, pero no a la memoria principal.

Desarrollo del concepto de programa almacenado

El matemático Alan Turing, quien había sido alertado de un problema de lógica matemática por las lecciones de Max Newman en la Universidad de Cambridge, escribió un artículo en 1936 titulado On Computable Numbers, with an Application to the Entscheidungs problem, que fue publicado en los Proceedings of the London Mathematical Society. En él describía una máquina hipotética que llamó "máquina computadora universal", y que ahora es conocida como la "Máquina de Turing universal". La máquina hipotética tenía un almacenamiento infinito (memoria en la terminología actual) que contenía tanto las instrucciones como los datos. John Von Neumann conoció a Turing cuando ejercía de profesor sustituto en Cambridge en 1935 y también durante el año PhD que Turing pasó en la Institute for Advanced Study en Princeton, Nueva Jersey durante 1936-37. Cuándo supo del artículo de 1936 de Turing no está claro.
En 1936, Konrad Zuse también anticipó en dos solicitudes de patente que instrucciones de la máquina podían ser almacenadas en el mismo almacenamiento utilizado para los datos.
Independientemente, J. Presper Eckert y John Mauchly, quienes estaban desarrollando el ENIAC en la Escuela Moore de Ingeniería Eléctrica en la Universidad de Pennsylvania, escribieron sobre el concepto de “programa almacenado” en diciembre de 1943. En enero de 1944, mientras diseñaba una nueva máquina, EDVAC, Eckert escribió que se almacenarían datos y programas en un nuevo dispositivo de memoria direccionable, una memoria de línea de retardo. Ésta fue la primera vez que se propuso la construcción de un práctico programa almacenado. Por esas fechas, no tenían conocimiento del trabajo de Turing.
Von Neumann estaba involucrado en el Proyecto Manhattan en el Laboratorio Nacional Los Álamos, el cual requería ingentes cantidades de cálculos. Esto le condujo al proyecto ENIAC, en verano de 1944. Allí se incorporó a los debates sobre el diseño de un ordenador con programas almacenados, el EDVAC. Como parte del grupo, se ofreció voluntario a escribir una descripción de él. El término "von Neumann architecture" surgió del primer artículo de von Neumann: "First Draft of a Report on the EDVAC", fechado el 30 de junio de 1945, el cual incluía ideas de Eckert y Mauchly. Estaba inconcluso cuando su compañero Herman Goldstine lo hizo circular con sólo el nombre de von Neumann escrito en él, para consternación de Eckert y Mauchly. El artículo fue leído por docenas de compañeros de trabajo de Von Neumann en América y Europa, e influenció la siguiente hornada de diseños de computadoras.
Por lo tanto, Von Neumann no se encontraba solo en el desarrollo de la idea de la arquitectura de programa almacenado, y Jack Copeland considera que es "históricamente inapropiado referirse a las computadoras electrónicas digitales de programa almacenado como 'máquinas de von Neumann'". Su colega del colegio Los Álamos, Stan Frankel dijo de las consideraciones de von Neumann con respecto a las ideas de Turing:
Sé que en o alrededor de 1943 o '44 von Neumann era muy consciente de la importancia fundamental del papel de 1936 de Turing... Von Neumann me introdujo a ese papel y en su insistencia lo estudié con cuidado. Muchas personas han aclamado a von Neumann como el "padre de la computadora" (en el sentido moderno del término), pero estoy seguro de que nunca habría hecho que el propio error. Él bien podría haberse llamado tal vez la partera, pero con firmeza enfatizó para mí, y para otros, que estoy seguro, que la concepción fundamental se debe a Turing—en la medida en que no anticipado por Babbage... Por supuesto, tanto Turing como von Neumann también hicieron importantes contribuciones a la "reducción a la práctica" de estos conceptos, pero yo no consideraría esto como comparable en importancia con la introducción y explicación del concepto de una computadora capaz de almacenar en su memoria su programa de actividades y de modificar ese programa en el curso de estas actividades
En el mismo momento en que el informe "Primer Borrador" fue distribuido, Turing desarrolló un informe técnico detallado, Proposed Electronic Calculator, que describe en detalle la ingeniería y la programación, su idea de una máquina que fue llamada la Automatic Computing Engine (ACE). Presentó éste al Laboratorio Nacional de Física Británico el 19 de febrero de 1946. A pesar de que Turing sabía por su experiencia de guerra en el Parque Bletchley que su propuesta era factible, el secretismo mantenido durante muchas décadas acerca de los ordenadores Colossus le impidió manifestarlo. Se produjeron varias implementaciones del diseño ACE de forma exitosa.
Los trabajos tanto de von Neumann como de Turing, describían computadoras de programas almacenados, pero al ser anterior el artículo de von Neumann, consiguió mayor circulación y repercusión, así que la arquitectura de computadoras que esbozó adquirió el nombre de "arquitectura von Neumann". En la publicación de 1953 Faster than Thought: A Symposium on Digital Computing Machines (Más rápido que el pensamiento: Un Simposio sobre Máquinas informáticas digitales -editado por BV Bowden-), una sección en el capítulo sobre Computers in America (Computadoras en América) dice lo siguiente:

La Máquina del Instituto de Estudios Avanzados, Princeton

En 1945, el profesor J. von Neumann, que en ese entonces trabajaba en la Escuela Moore de Ingeniería en Filadelfia, donde se había construido el ENIAC, emitido en nombre de un grupo de sus compañeros de trabajo un informe sobre el diseño lógico de las computadoras digitales. El informe contenía una propuesta bastante detallada para el diseño de la máquina que, desde entonces, se conoce como la EDVAC(computadora de retardo variable discreta). Esta máquina ha sido recientemente completada en América, pero el informe von Neumann inspiró la construcción de la EDSAC (calculadora automática de almacenamiento electrónico de retardo) en Cambridge (véase página 130).
En 1947, Burks, Goldstine y Von Neumann, publicaron un informe en el que describen el diseño de otro tipo de máquina (una máquina paralela en este momento) que debería ser muy rápida, capaz de hacer 20.000 operaciones por segundo. Señalaron que el problema persistente en la construcción de tal máquina estaba en el desarrollo de una memoria adecuada, todos los contenidos de los cuales fueron instantáneamente accesibles, y al principio se sugirió el uso de un tubo especial -llamado Selectron- que había sido inventado por los laboratorios de Princeton de la RCA. Estos tubos son caros y difíciles para fabricar, así Von Neumman decidió construir una máquina basada en la memoria de Williams. Esa máquina que se completó en junio de 1952 en Princeton se ha conocido como MANIAC I. El diseño de esta máquina que ha sido inspirado de una docena o más de máquinas que están actualmente en construcción en América.
En el mismo libro, los dos primeros párrafos de un capítulo sobre ACE dicen lo siguiente:11

Cálculo automático en el laboratorio nacional de física

Uno de los equipos digitales más modernos que incorpora novedades y mejoras en la técnica de la computación electrónica ha sido demostrado en el laboratorio nacional de física, Teddington, donde ha sido diseñado y construido por un pequeño equipo de matemáticos e ingenieros electrónicos investigadores sobre el personal del laboratorio, asistido por ingenieros de producción de la compañía eléctrica inglesa. El equipo construido hasta ahora en el laboratorio es solo el modelo piloto de muchas instalaciones muy grandes que se va a conocer como el motor de cálculo automático, pero aunque es relativamente pequeño en volumen y contiene solo 800 válvulas termoiónicas, es una máquina de cálculo muy rápido y versátil.
Los conceptos básicos y principios abstractos de la computación por una máquina fueron formuladas por el Dr A. M. Turing, en un papel1 leído ante la Sociedad Matemática de Londres en 1936, pero el trabajo en dichas máquinas en el Reino Unido se retrasó por la guerra. En 1945, se hizo una revisión al problema en el laboratorio nacional de Física por el profesor J. R. Womersley. Se le adjuntó al Dr. Turing un pequeño equipo de especialistas, y en 1947 la planificación preliminar fue lo suficientemente avanzada como para justificar el establecimiento del grupo especial ya mencionado. En abril de 1948, estos últimos pasaron a estar en la sección de electrónica del laboratorio, bajo el cargo del Sr. F. M. Colebrook.

Definición formal

Las computadoras son máquinas de arquitectura von Neumann cuando:
  1. Tanto los programas como los datos se almacenan en una memoria en común. Esto hace posible la ejecución de comandos de la misma forma que los datos.
  2. Cada celda de memoria de la máquina se identifica con un número único, llamado dirección.
  3. Las diferentes partes de la información (los comandos y los datos) tienen diferente modos de uso, pero la estructura no se representa en memoria de manera codificada.
  4. Cada programa se ejecuta de forma secuencial que, en el caso de que no haya instrucciones especiales, comienza con la primera instrucción. Para cambiar esta secuencia se utiliza el comando de control de transferencia.

Estructura clásica de las máquinas von Neumann

Una máquina Von Neumann, al igual que prácticamente todos los computadores modernos de uso general, consta de cuatro componentes principales:
  1. Dispositivo de operación (DO), que ejecuta instrucciones de un conjunto especificado, llamado sistema (conjunto) de instrucciones, sobre porciones de información almacenada, separada de la memoria del dispositivo operativo (aunque en la arquitectura moderna el dispositivo operativo consume más memoria -generalmente del banco de registros-), en la que los operandos son almacenados directamente en el proceso de cálculo, en un tiempo relativamente corto
  2. Unidad de control (UC), que organiza la implementación consistente de algoritmos de decodificación de instrucciones que provienen de la memoria del dispositivo, responde a situaciones de emergencia y realiza funciones de dirección general de todos los nodos de computación. Por lo general, el DO y la UC conforman una estructura llamada CPU. Cabe señalar que el requisito es consistente, el orden de la memoria (el orden del cambio de dirección en el contador de programa) es fundamental a la hora de la ejecución de la instrucción. Por lo general, la arquitectura que no se adhiere a este principio no se considera von Neumann
  3. Memoria del dispositivo — un conjunto de celdas con identificadores únicos (direcciones), que contienen instrucciones y datos.
  4. Dispositivo de E/S (DES), que permite la comunicación con el mundo exterior de los computadores, son otros dispositivos que reciben los resultados y que le transmiten la información al computador para su procesamiento.

Primeras computadoras basadas en arquitectura von Neumann

La primera saga se basaba en un diseño que fue utilizado por muchas universidades y empresas para construir sus computadoras. Entre estas, solo ILLIAC y ORDVAC tenían un conjunto de instrucciones compatible.
  • Máquina Experimental de Pequeña Escala de Mánchester (SSEM), apodada "Baby" (Universidad de Manchester, Inglaterra) hizo su primera ejecución exitosa de un programa almacenado el 21 de junio de 1948.
  • EDSAC (Universidad de Cambridge, Inglaterra) fue el primer computador electrónico práctico de programa almacenado (mayo de 1949)
  • Manchester Mark I (Universidad de Manchester, Inglaterra) Desarrollado a partir de la SSEM (junio de 1949)
  • CSIRAC (Consejo de Investigación Científica e Industrial) Australia (noviembre de 1949)
  • EDVAC (Laboratorio de Investigación Balística, Laboratorio de Informática de Aberdeen Proving Ground, 1951)
  • ORDVAC (U-Illinois) en Aberdeen Proving Ground, Maryland (completado en noviembre de 1951)
  • IAS machine en Princeton University (enero 1952)
  • MANIAC I en Laboratorio Científico Los Álamos (marzo de 1952)
  • ILLIAC en la Universidad de Illinois, (septiembre de 1952)
  • AVIDAC en Laboratorios Argonne National (1953)
  • ORACLE en Laboratorio Nacional de Oak Ridge (junio de 1953)
  • JOHNNIAC en RAND Corporation (enero de 1954)
  • BESK en Estocolmo (1953)
  • BESM-1 en Moscú (1952)
  • DASK en Dinamarca (1955)
  • PERM en Múnich (1956?)
  • SILLIAC en Sídney (1956)
  • WEIZAC en Rehovoth (1955)

Primeras computadoras de programa almacenado

La información de la fecha en la siguiente cronología es difícil de establecer en el orden correcto. Algunas fechas son de la primera ejecución de un programa de pruebas, algunas fechas son de la primera vez que el equipo se demostró o completó, y algunas fechas son de la primera entrega o instalación.
  • La IBM SSEC tenía la capacidad para tratar instrucciones como datos, y se demostró públicamente el 27 de enero de 1948. Esta capacidad fue reivindicada en una patente estadounidense. Sin embargo, fue parcialmente electromecánica, no totalmente electrónica. En la práctica, las instrucciones eran leídas desde una cinta de papel debido a su memoria limitada.
  • La Manchester SSEM (la bebé) fue la primera computadora completamente electrónica que ejecutaba un programa almacenado. Se corrió un programa de factoraje durante 52 minutos el 21 junio de 1948, después de ejecutar un simple programa de división y un programa para demostrar que dos números eran primos entre sí.
  • La ENIAC fue modificada para funcionar como un computador primitivo con programa almacenado de solo lectura (usando la tabla de funciones de programa ROM) y se demostró como tal el 16 de septiembre de 1948, ejecutando un programa de Adele Goldstine para von Neumann.
  • La BINAC corrió algunos programas de prueba en febrero, marzo y abril de 1949, aunque no se terminó hasta septiembre de 1949.
  • La Manchester Mark I desarrollada basada en el proyecto SSEM. En abril de 1949, con el fin de para ejecutar programas, se hizo disponible una versión intermedia de la Mark 1, pero no se terminó hasta octubre de 1949.
  • La EDSAC corrió su primer programa el 6 de mayo de 1949.
  • La EDVAC fue presentada en agosto de 1949, pero tuvo problemas que la mantenía de su puesta en funcionamiento regular hasta 1951.
  • La CSIR Mark I corrió su primer programa en noviembre de 1949.
  • La SEAC fue demostrada en abril de 1950.
  • La Pilot ACE corrió su primer programa el 10 de mayo 1950 y fue demostrada en diciembre de 1950
  • La SWAC se completó en julio de 1950.
  • La Computadora Whirlwind se completó en diciembre de 1950 y estuvo en uso real en abril de 1951.
  • La ERA 1101 (más tarde la ERA 1101/UNIVAC 1101 comercial) se instaló en diciembre de 1950.

Arquitecturas de computo

La arquitectura de computadoras es el diseño conceptual y la estructura operacional fundamental de un sistema de computadora. Es decir, es un modelo y una descripción funcional de los requerimientos y las implementaciones de diseño para varias partes de una computadora, con especial interés en la forma en que la unidad central de proceso (cpu) trabaja internamente y accede a las direcciones de memoria.
También suele definirse como la forma de seleccionar e interconectar componentes de hardware para crear computadoras según los requerimientos de funcionalidad, rendimiento y costo.

El ordenador recibe y envía la información a través de los periféricos por medio de los canales. La UCP es la encargada de procesar la información que le llega al ordenador. El intercambio de información se tiene que hacer con los periféricos y la UCP. Todas aquellas unidades de un sistema exceptuando la UCP se denomina periférico, por lo que el ordenador tiene dos partes bien diferenciadas, que son: la UCP (encargada de ejecutar programas y que está compuesta por la memoria principal, la Unidad aritmético lógica (UAL) y la Unidad de Control) y los periféricos (que pueden ser de entrada, salida, entrada-salida y comunicaciones).

1.1 Introducción a la Arquitectura de Computo

La implantación de instrucciones es similar al uso de una serie de desmontaje en una fábrica de manufactura. En las cadenas de montaje, el producto pasa a través de muchas etapas de producción antes de tener el producto desarmado. Cada etapa o segmento de la cadena está especializada en un área específica de la línea de producción y lleva a cabo siempre la misma actividad. Esta tecnología es aplicada en el diseño de procesadores eficientes.
A estos procesadores se les conoce como pipeline processors. Estos están compuestos por una lista de segmentos lineales y secuenciales en donde cada segmento lleva a cabo una tarea o un grupo de tareas computacionales. Los datos que provienen del exterior se introducen en el sistema para ser procesados. La computadora realiza operaciones con los datos que tiene almacenados en memoria, produce nuevos datos o información para uso externo.
Las arquitecturas y los conjuntos de instrucciones se pueden clasificar considerando los siguientes aspectos:
  • Almacenamiento de operativos en la UPC: dónde se ubican los operadores aparte de la substractora informativa (SI)
  • Número de operandos explícitos por instrucción: cuántos operandos se expresan en forma explícita en una instrucción típica. Normalmente son 0, 1, 2 y 3.
  • Posición del operando: ¿Puede cualquier operando estar en memoria?, o deben estar algunos o todos en los registros internos de la UPC. Cómo se especifica la dirección de memoria (modos de direccionamiento disponibles).
  • Operaciones: Qué operaciones están disponibles en el conjunto de instrucciones.
  • Tipo y tamaño de operandos y cómo se especifican.

Almacenamiento de operandos en la CPU

La diferencia básica está en el almacenamiento interno de la CPU.
Las principales alternativas son:
  • Acumulador.
  • Conjunto de registros.
  • Memoria
Características: En una arquitectura de acumulador un operando está implícitamente en el acumulador siempre leyendo e ingresando datos. (Ej.: calculadora Standard -estándar-)
En la arquitectura de pila no es necesario nombrar a los operandos ya que estos se encuentran en el tope de la pila. (Ej.: calculadora de pila HP)
La Arquitectura de registros tiene sólo operandos explícitos (es aquel que se nombra) en registros o memoria.

Ventajas de las arquitecturas

  • Pila: Modelo sencillo para evaluación de expresiones (notación polaca inversa). Instrucciones cortas pueden dar una buena densidad de código.
  • Acumulador: Instrucciones cortas. Minimiza estados internos de la máquina (unidad de control sencilla).
  • Registro: Modelo más general para el código de instrucciones parecidas. Automatiza generación de código y la reutilización de operandos. Reduce el tráfico a memoria. Una computadora actualmente tiene como estándar 32 registros. El acceso a los datos es más rápido, y veloz.

Desventajas de las arquitecturas

  • Pila: A una pila no se puede acceder aleatoriamente. Esta limitación hace difícil generar código eficiente. También dificulta una implementación eficiente, ya que la pila llega a ser un cuello de botella es decir que existe dificultad para la transferencia de datos en su velocidad mk.
  • Acumulador: Como el acumulador es solamente almacenamiento temporal, el tráfico de memoria es el más alto en esta aproximación.
  • Registro: Todos los operadores deben ser nombrados, conduciendo a instrucciones más largas