5.1 ORGANIZACIONES CON VARIOS PROCESADORES.
El diseño de Von Neuman, lo que hace es cargar los programas en memoria. Uno de los problemas que tubo fue de cómo traducir la información a ceros y unos.
De esta manera, surge la codificación de las operaciones, a cada operación le corresponde un numero binario.
Creó el código de operaciones y el de direccionamiento.
Otro problema que tubo fue como darle un orden secuencial de las instrucciones, como ejecutar una instrucción después de la otra, Von Neuman lo que hizo fue colocarlas en forma contigua.
Memoria: es una cantidad de palabras, cada una de las cuales esta identificada por una dirección y posee un contenido.
Existen dos ciclos:
-
Lectura: dada la dirección del dato y la instrucción leer y al cabo de un tiempo de acceso nos dará el dato.
-
Escritura: se da la dirección y el dato a guardar y al cabo de un tiempo de acceso de escritura se habrá guardado el dato.
Bus:
Es un conjunto de cables que transportan información.
Registro
Lugar donde se puede guardar temporalmente un nro. binario (palabra de memoria), los registros no tienen un direccionamiento, sino que son controlados por una unidad de control. Su tiempo de acceso es mucho más rápido.
Registros específicos:
PC, RDM, RBM, RI, SP, IX.
Funcionamiento de la CPU
-
Realiza un ciclo de maquina. Se divide en dos ciclos:
-
C. de Búsqueda de instrucción
Ciclos de Maquina
-
C. de Ejecución de la instrucción
-
Cómo se realiza la búsqueda?
El PC tiene la dirección de la primera instrucción , su contenido se copia en el RDM y genera un ciclo de lectura mientras que se incrementa en 1 el PC , el dato leído en memoria se guarda en el RBM y luego se copia en el RI . Fin del ciclo de búsqueda(el PC ya está incrementado).
-
La unidad de control decodifica el Código de operaciones del RI y sabe que en el segundo campo están las direcciones de las operaciones y donde debemos guardar el resultado de la operación. Luego la UC transfiere los 2 operandos a la ALU y le dice que debe operarlos según el código de operaciones decodificado, una vez realizada la operación, se guarda el resultado en la dirección que figura en el tercer subcampo del RI. Este resultado se guarda generando un ciclo de escritura.
-
Al apagarse la maquina el contenido de los registros se pierde. Para que la maquina funcione a la manera de Von Neuman, es necesario que la maquina tenga un circuito eléctrico, que ponga al PC siempre en la posición 0, al encenderse.
5.2 ASPECTO DE DISEÑO DE COMPUTADORAS PARALELAS
La computación paralela es una forma de cómputo en la que muchas instrucciones se ejecutan simultáneamente, 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 la arquitectura de computadores, principalmente en forma de procesadores multinúcleo.
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 la tareas específicas, se utilizan arquitecturas especializadas de computación en paralelo junto a procesadores tradicionales.
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.
5.3 COMPUTADORAS SIMD
En computación, SIMD (del inglés Single Instruction, Multiple Data, en español: "una instrucción, múltiples datos") es una técnica empleada para conseguir paralelismo a nivel de datos.
Los repertorios SIMD consisten en instrucciones que aplican una misma operación sobre un conjunto más o menos grande de datos. Es una organización en donde una única unidad de control común despacha las instrucciones a diferentes unidades de procesamiento. Todas éstas reciben la misma instrucción, pero operan sobre diferentes conjuntos de datos. Es decir, la misma instrucción es ejecutada de manera síncrona por todas las unidades de procesamiento.
Ejemplos de estos repertorios son 3DNow! de AMD, y SSE de Intel, aunque existen ejemplos más antiguos como el microprocesador Zilog Z80.
5.4 MULTIPROCESADORES SIMÉTRICOS.
En computación, SMP (del inglés Symmetric Multi-Processing, en español "multiproceso simétrico") es un tipo de arquitectura de computadores en la que dos o más unidades de procesamiento comparten una única memoria central.
Multiproceso simétrico, una de las formas más fáciles y baratas de aumentar el rendimiento del hardware es poner más de una CPU en la placa. Esto se puede realizar haciendo que CPUs diferentes tengan trabajos diferentes (multiproceso asimétrico) o haciendo que todos se ejecuten en paralelo, realizando el mismo trabajo (multiproceso simétrico o SMP). El hacer multiproceso asimétrico requiere un conocimiento especializado sobre las tareas que la computadora debe ejecutar, que no es fácilmente discernible en un sistema operativo de propósito general como Linux. En cambio el multiproceso simétrico es relativamente fácil de implementar.
En un entorno de multiproceso simétrico, las CPU comparten la misma memoria, y como resultado, el código que corre en una CPU puede afectar a la memoria usada por otra. No se puede estar seguro de que una variable que se ha establecido a un cierto valor en la línea anterior todavía tenga el mismo valor; la otra CPU puede modificar el valor de la variable. No es posible programar algo de esta manera.
En el caso de la programación de procesos esto no suele ser un problema, porque un proceso normalmente sólo se ejecutará en una CPU a la vez. El núcleo, sin embargo, podría ser llamado por diferentes procesos ejecutándose en CPUs diferentes.
En la versión 2.0.x del núcleo de Linux, esto no es un problema porque el núcleo entero está en un gran `spinlock'. Esto significa que si una CPU está dentro del núcleo y otra CPU quiere entrar en él, por ejemplo por una llamada al sistema, tiene que esperar hasta que la primera CPU haya acabado. Esto es lo que hace el SMP en Linux; es seguro, pero ineficiente.
5.5 COHERENCIA DE CACHÉ Y PROTOCOLO MESI
La coherencia de cache hace referencia a la integridad de los datos almacenados en las caches locales de los recursos compartidos. La coherencia de la cache es un caso especial de la coherencia de memoria.
Cuando los clientes de un sistema, en particular las CPUs en un multiprocesador, mantienen caches de una memoria compartida, los conflictos crecen. Haciendo referencia al dibujo, si el cliente de arriba tiene una copia de un bloque de memoria de una lectura previa y el cliente de abajo cambia ese bloque, el cliente de arriba podría estar trabajando con datos erróneos, sin tener conocimiento de ello. La coherencia de la cache intenta administrar estos conflictos y mantener consistencia entre las caches y la memoria.
Los protocolos basados en directorio mantienen un directorio centralizado de los bloques que hay en las caches. Se utilizan tanto en multiprocesadores con memoria físicamente distribuida, como en sistemas con memoria centralizada con red escalable. Estos protocolos de mantenimiento de coherencia reducen el tráfico en la red enviando selectivamente órdenes sólo a aquellas caches que disponen de una copia válida del bloque implicado en la operación de memoria.
El protocolo Snoopy hace que las caches individualmente monitoreen las líneas(buses) de direcciones de accesos a memoria con respecto a los bloques que han copiado. Cuando una operación de escritura es observada sobre una dirección de un bloque del cual tiene un bloque, el controlador de cache invalida su copia. También es posible que el controlador de cache observe la dirección y el dato correspondiente a esa dirección, intentando así actualizar su copia cuando alguien modifica dicho bloque en la memoria principal.
El protocolo de memoria distribuida imita a los anteriores en un intento de mantener la consistencia entre bloques de memoria en sistemas con débil acoplamiento.
El protocolo MESI, también conocido como protocolo Illinois, es un extendido protocolo de coherencia de caché y coherencia de memoria, que fue creado por Intel en el procesador Pentium para "dar soporte más eficientemente a write-back en lugar del write-through de caché de CPU usado con anterioridad en el procesador 486".
5.7 ACCESO NO UNIFORME A MEMORIA.
Acceso uniforme a memoria o UMA (en inglés: Uniform Memory Access) es una arquitectura de memoria compartida utilizada en computación paralela.
Todos los proceso en el modelo UMA acceden a la memoria de manera uniforme, es decir, el tiempo de acceso o la localización de memoria es independiente del proceso que realiza la petición o del chip de memoria donde se encuentre el dato solicitado.
Las arquitecturas UMA frecuentemente se ven como opuestas a las arquitecturas NUMA (Non-Uniform Memory Access).
En la arquitectura UMA, cada procesador puede utilizar una caché privada. Existe un modo para compartir también dispositivos periféricos. El modelo UMA es más adecuado para aplicaciones de propósito general o para aplicaciones multi-usuario. Puede ser utilizado para aumentar el speed up programas largos y tediosos, consiguiendo que varias máquinas ejecuten el mismo programa en menos tiempo y a ser posible con los mismos resultados.