INSTITUTOPOLITECNICO NACIONAL ESIME ZACATENCO Arquitectura de Computadoras PROF. MAR ESCOTO LUIS IVAN 8CV11 GONZALEZ JUAREZ EDGAR JOEL SANCHEZ NOLASCO NORMAN NICOLAS SANCHEZ RAUL Supercomputadoras Podemos definir a las supercomputadoras como computadoras diseñadas y preparadas para lograr resultados con un tiempo de respuesta lo más corto posible. Para lograr este objetivo deben alcanzar grandes velocidades de proceso, haciendo uso de técnicas especiales, tanto en el hardware, por medio del circuitaje, como en el software, utilizando lenguajes de características selectivas y distintivas y algoritmos especiales que se adapten a la gran performance de los elementos físicos del sistema. Las súper computadoras fueron introducidas en la década de 1970 y fueron diseñadas principalmente por Seymour Cray. Estos ordenadores poseen una gran memoria central, con organización específica según la arquitectura utilizada, y utilizan la ejecución concurrente o simultánea de procesos, al mismo tiempo que tiene optimizadas las funciones de entrada/salida, lo que en conjunto logra llegar a rendimientos mucho más altos que los de las computadoras convencionales. No debemos confundir el concepto de supercomputadora con el de mainframe (o servidores). Estos últimos utilizan toda su capacidad de procesamiento en la ejecución de muchos programas simultáneamente, respondiendo al pedido de varias terminales en tiempo real, mientras que el uso que se les da a las supercomputadoras es el de ejecutar unos pocos programas lo más rápido posible canalizando en ello todo su poder. Esto no significa que una supercomputadora no pueda desempeñar la tarea de servidor, de hecho el proyecto Internet2 tiene como sustento una supercomputadora, la Cray Origin 2000, a la que luego se le sumará otra, para centralizar los pedidos de varios lugares del mundo, claro que como podemos apreciar, en este caso podríamos llamarlas superservidores. La mayoría de nosotros normalmente realizamos tareas triviales con las computadoras: navegar páginas web, enviar y recibir correos electrónicos, documentos y tareas similares que utilizan muy poco de la capacidad de una PC típica. Pero si tratamos de hacer algo más complejo, como por ejemplo cambiar los colores de una fotografía digital grande veremos que la máquina, ocasionalmente, tiene que trabajar más duro para realizarlo, demorándose incluso hasta varios minutos. Si jugamos videojuegos en la computadora, tendremos la necesidad de contar con un procesador más rápido y más memoria RAM, o los juegos serán realmente lentos, llegando incluso al caso de ni siquiera poder correrlos. La solución: un procesador más rápido y más memoria RAM, sería la respuesta obvia, pero hay una limitación más que comprender, y es el hecho de los procesadores generalmente sólo pueden realizar una cosa a la vez. Ahora, supongamos que somos científicos encargados de los pronósticos del tiempo, o bien de la prueba de una nueva droga contra el cáncer, o quizás, modelar el clima para el año 2050. Problemas como esos empujan a las mejores computadoras del mundo hasta sus límites. La mejor manera de llevar adelante el análisis de los enormes volúmenes de información es el uso del procesamiento en paralelo: muchos procesadores, dividir el Deep Blue fue construida en 1997 para jugar al ajedrez. Pero imaginen si el carrito lleva miles de millones de productos y nuestro grupo de amigos es de 65. ambas diseñadas por IBM. será necesario que exista algún tipo de sistema de administración centralizado que se encargue de dividir los problemas. sean Deep Blue y Watson. Ahora si nos aproximamos un poco más al tamaño de la información que deben procesar las supercomputadoras cuando se les asignan problemas como el pronóstico del tiempo de los próximos 50 años. cambio climático. pueden ser utilizadas para absolutamente todo. asignar las tareas a cada procesador y luego reensamblar los resultados.problema (situación a analizar) en varias partes. Quizás las dos supercomputadoras más populares.000 personas. Más aún. Las supercomputadoras más comunes utilizaban anteriormente el sistema operativo Unix. Usualmente. las supercomputadoras han sido utilizadas para resolver complejos y matemáticamente intensos problemas científicos. llevando adelante varias partidas contra el ruso Gary Kasparov en las que buscaba en una enorme base de datos las potenciales movidas útiles en cada situación . y poner cada procesador a trabajar en cada una de esas partes por separado y en forma simultánea. esto comparado con la situación de determinar previamente quien compra que productos y la reunión tras haber pagado todo. pruebas de fortaleza de la encriptación (seguridad informática). por su grado de exposición mediática. etc. Si decidimos dividir la compra con un grupo de amigos para repartirnos en diferentes cajas a la hora de pagar. pero la mayoría de las supercomputadoras corren sistemas operativos ordinarios muy similares a los que utilizamos en nuestras propias computadoras hogareñas. El estado del tiempo en un país depende generalmente del estado del tiempo de otras regiones. Seguramente se sorprendan. Como estas máquinas trabajan con problemas generalmente científicos. O bien un procesador deberá esperar los resultados de otro procesador para poder continuar con su tarea o terminarla. pero en la actualidad la tendencia es emplear Linux. se reducirá el tiempo. los procesadores en paralelo de las supercomputadoras se comunican entre sí mientras resuelven las partes del problema que le fueron asignadas. Computadoras masivas en paralelo Desafortunadamente el procesamiento en paralelo tiene una desventaja no menor que podemos quizás comprender mejor haciendo una analogía con un supermercado. probablemente será más difícil dividir los problemas y reensamblarlos luego obteniendo el máximo rendimiento del procesamiento en paralelo. determinando que para poder hacer el pronóstico correspondiente al país será necesario conocer el pronóstico de las demás regiones. Típicamente. En líneas generales. Con el caso del pago de la compra en un supermercado no tenemos tantas dificultades. los programas que utilizan a veces son escritos en lenguajes de programación tradicionales como por ejemplo Fortran y C++. pronóstico del tiempo. Intuitivamente podemos suponer que mientras más procesadores tengan la supercomputadora. incluyendo la simulación de pruebas de misiles nucleares. Ya que son empleadas en cálculos científicos. etc) puede manejar el procesador. ellas se miden de acuerdo a cuantos FLOPS (operaciones de punto flotante por segundo) pueden realizar. encontraremos que el desempeño de las mismas se mide en MIPS (millones de instrucciones por segundo). que es una medida más significativa basada en lo que intentan realizar efectivamente los procesadores (el MIPS es la medida de cómo intenta realizarse el proceso).del juego. que significa cuantos comandos fundamentales de programación (leer. Es muy fácil compara dos computadoras PC mediante la comparación del número MIPS que pueden manejar. escribir. Las supercomputadoras se califican de una manera diferente. o bien. En la tabla vemos cómo ha ido creciendo el número de FLOPS a lo largo del tiempo. . almacenar. Watson. creada para jugar al juego Jeopardy. Si miramos las especificaciones de las computadoras ordinarias. fue optimizada para analizar difíciles preguntas de “conocimiento general” redactadas en lenguaje humano. las de casa por ejemplo. puede típicamente comparase las velocidades en MHZ o GHZ. Capacitación especializada en administración y configuración de hardware y software para cómputo de alto desempeño. Asesoría para el uso de supercomputadoras. NVIDIA-GPU y Coprocesadores INTEL. AMD. es de tecnología Hibrida tiene capacidades de procesamiento INTEL. dos Nodos Login y un Nodo Maestro. optimización de código y utilización de aplicaciones y librerías. Inició su operación en enero de 2012.El Laboratorio Nacional de Cómputo de Alto Desempeño (LANCAD) es producto de la colaboración de tres instituciones con amplia experiencia en supercómputo que unen esfuerzos con el Conacyt para facilitar a la comunidad científica de México el acceso a recursos computacionales de alto nivel. Supercómputo Xiuhcóatl Es la segunda supercomputadora basada en clúster en el Cinvestav. está alojada en el Centro de Datos de la CGSTIC y está integrada por 213 servidores. 72 Nodos AMD Interlagos 6274 88 Nodos Intel X5675 . Cuenta con una capacidad de procesamiento total de 250 Teraflop/s teóricos. LANCAD está integrado por los Centros de Supercómputo de: Centro de Investigaciones y Estudios Avanzados (CINVESTAV) Universidad Autónoma Metropolitana (UAM) Universidad Nacional Autónoma de México (UNAM) Los principales servicios que LANCAD ofrece a la comunidad científica mexicana son: Ejecución de trabajos para procesamiento numérico intensivo. Procesamiento CPU x86: 205 Nodos de cómputo marca SuperMicro. Acceso a recursos compartidos de almacenamiento y procesamiento por medio del portal de LANCAD. una red InfiniBand y dos sistemas de almacenamiento basado en Lustre File System. 2. Memoria RAM 11 Terabytes en total. Almacenamiento principal distribuido basado en LUSTRE. Procesamiento GPU/Coprocesadores 10 Nodos GPUs NVIDIA 2070/2075 e Intel X5675.o Dos procesadores por nodo. Red: Voltaire Grid Director 4700 InfiniBand QDR a 40 Gbps. o 4244 núcleos totales de procesamiento. Este cluster se integra por los siguientes componentes: Nodos de gestión (1 nodo maestro y 2 nodos de servicio): . memoria distribuida de 19TB. Sistema Operativo: Linux CentOS 6. 12 Nodos GPUs NVIDIA K40 e Intel E5-2650L v3. Supercómputo Yoltla Cuenta con 4920 núcleos de procesamiento. 4 Nodos Xeon-Phi 7120P. sistema de almacenamiento de 60TB y sistema operativo Centos Linux. 19 Nodos GPUs NVIDIA K80 Intel E5-2660 v3. Almacenamiento: 50 Terabytes en disco duro (un sistema de 33 TB y uno de 17 TB). 2 Redes de administración Ethernet a 1 Gbps. 2 procesadores Intel Xeon Dodeca-Core a 2. 2 Procesadores Intel Xeon E5-2670v2 con 20 cores y 64 GB de RAM por nodo de cómputo. 16 tarjetas NVIDIA. 2 procesadores Intel Xeon E5-2660v3 con 20 cores y 128 GB de RAM por cada nodo de cómputo PowerEdge FC430. 10 Nodos especiales: . 58 Nodos de cómputo: 8 Chassis PowerEdge FX2.6 GHz con 8 cores y 64 GB de RAM.4 GHz.6 GHz con 10 cores y 128 GB de RAM. Integrado por los siguientes componentes: 314 Nodos regulares: 2 procesadores Intel E5-2670 v1 a 2. Supercómputo Miztli Cuenta con 6452 núcleos de procesamiento Intel. 188 Nodos de cómputo: 47 Server PowerEdge C6220 II. 96 GB de memoria RAM. Manejador de recursos: SLURM. Sistema de almacenamiento: Sistema LUSTRE con capacidad de 60TB. una memoria total de 30 TB. Conexión de alta velocidad: Infiniband FDR10/FDR. 56 Nodos v3: 2 procesadores Intel E5-2660 v3 a 2. un sistema de almacenamiento masivo de 750 TB y sistema operativo LINUX RedHat. Mismas características de los procesadores de nodos regulares pero con 256 GB de RAM.4 Tb/s. Sistema de administración del clúster. tres switches leaf Mellanox 4036 de 36 puertos y dos switches Mellanox SX6025F de 36 puertos a 56 Gb/s. El ancho de banda total teórico es de 6. Sistema de administración de recursos. compuesta por un switch core Mellanox 4700 de 324 puertos. Sistema de almacenamiento: Sistema LUSTRE con capacidad de 750 TB. Licencias de aplicaciones. 8 Nodos GPU: Mismas características de los nodos regulares pero con 2 tarjetas NVIDIA Tesla M2090. 6 Nodos de gestión instalados y configurados para proveer funciones específicas: Acceso remoto. Conexión de alta velocidad: Las conexiones entre todos los componentes se realizan mediante una red Infiniband a 40 Gb/s. Delta Metropolitana . mientras que IBM está en 22 de ellos. Linux ha crecido hasta los 498 superordenadores. y aprovechamos su trabajo para conocer algo más sobre el estado del arte de la computación. Un dato muy interesante lo encontramos en los creadores de los procesadores. Hay configuraciones multiprocesador que tiran de unidades de proceso gráfico donde Nvidia también tiene mucho que decir. Francia con 20. y AMD en 7. estando ya presente en el 99.6% de ellos. La fibra trascurre por parte de las líneas 3.Consiste en la infraestructura de fibra óptica y equipo activo de red que interconecta a las tres instituciones participantes en LANCAD: Zacatenco (CINVESTAV) Iztapalapa (UAM) Ciudad Universitaria (UNAM) La capacidad de la fibra óptica es de 72 hilos. Estados Unidos aglomera el 33. Si miramos a los países que les siguen en la lista. que son los que ha elegido el equipo de TOP500 para establecer una lista con los diez superordenadores más potentes del planeta. Esta organización se encarga de mantener la lista al día. tenemos a Alemania con 31 equipos. de los 500 ordenadores. Actualmente su capacidad de transmisión es de 720 Gigabits por segundo (Gbps). mientras que China se queda muy cerca con un 33.3%. .9% del potencial mundial. 7 y 9 del STC. Japón con 27. Una buena forma de establecer ese rendimiento y comparar la tenemos en los benchmarks de Linpack. que están instalados en los túneles del Sistema de Transporte Colectivo (STC) – METRO de la Ciudad de México. y Reino Unido con 13. 5. 462 usan chips Intel. 8. Cray XC40.1 petaflops 9 . DOE/NNSA/LANL/SNL — 301.6 petaflops .056 núcleos.S.S.10 . DOE/SC/Argonne National Laboratory — 786.Trinity Trinity.000 núcleos. 8. U.Mira Mira. U. IBM BlueGene/Q. RIKEN Advanced Institute for Computational Science. Switzerland — 9. 10.Piz Daint Piz Daint. SPARC64 system con 705. Japan — .8 .5 petaflops .K Computer K Computer.000 núcleos. Cray XC30 con 116k núcleos Xeon y Nvidia . Swiss National Computing Centre.8 petaflops 7 . Fujitsu Primergy CX1640 M1 cluster. U.S. National Energy Research Scientific Computing Center (NERSC) — 14 petaflops .Oakforest-PACS Oakforest-PACS. Joint Center for Advanced High Performance Computing — 13. Berkeley Lab.6 petaflops 5 . Japan.Cori Cori. Cray XC40.6. 57 millones de núcleos.4. IBM BlueGene/Q system. California — 1. Oak Ridge National Laboratory — 17.S. Cray XK7 system. U. Lawrence Livermore National Lab.Sequoia Sequoia.59 petaflops .Titan Titan.S.32 teraflops 3 . Department of Energy. Department of Energy. 16. U. 59 petaflops en el benchmark mencionado.86 petaflops La Tianhe-2 que significa “Vía Láctea – 2”. Titan es el sistema más poderoso en los Estados Unidos y uno de los más eficientes en términos de energía. (un flop es una operación de punto flotante por segundo).12 millones de núcleos. Linpack fue desarrollado originalmente por Jack Dongarra para dar . tiene un desempeño de 33. de acuerdo al benchmark Linpack.86 petaflops/seg.2 . 93. Wuxi. China — 10.Tianhe-2 Tianhe-2. TH-IVB-FEP Cluster. SW26010. Sin embargo. “sólo” alcanza 17. National Supercomputing Center.01 petaflops El punto de referencia Linpack es un método de medición de la tasa de punto flotante de ejecución de un ordenador mediante la ejecución de un programa que resuelve un sistema de ecuaciones lineales. National Super Computer Center en Guangzhou. En el segundo sitio está Titan.TaihuLight TaihuLight. Sunway MPP. un sistema Cray XK7 instalado en el Oak Ridge National Laboratory.6 millones de núcleos. 33. 1 . China — 3. por lo que programadores y desarrolladores deben saber exactamente el modelo que van a usar. Para solucionar esto se usan algunas reglas de consistencia para asegurar que los procesadores no accedan a la misma memoria o que las actualizaciones sean consistentes entre ellas. Es por la forma en que tienen de acceder a esta memoria. lo cual es muy efectiva. el problema de coherencia de caché solo ocurre en ordenadores que tienen al menos dos CPU. los otros pueden quedar con una versión antigua de memoria. pero ¿Qué son realmente? Hay muchas versiones. Mientras que las reglas de consistencia ayudan a evitar los problemas de memoria de coherencia. El problema de que no todo quede debidamente actualizado. Cuando varios procesadores verifican el mismo sector de memoria y uno de ellos actualiza el sector. También se impide que se acceda a la misma memoria al mismo tiempo. Sin embargo. Linpack es útil como punto de referencia global y ha ganado amplia aceptación como un método general para evaluar el rendimiento de la computadora y el supercomputador. Como se ha dicho. Esto se puede hacer actualizando ambas versiones de la memoria con una sola versión. por lo que los programadores que hacen los programas o escribiendo el código. puede surgir otro problema de esto. Hay varios métodos diferentes. Esto solo ocurre en sistema de doble núcleo o en ordenadores que tienen más de una unidad de procesamiento central. se podría provocar un conflicto o causar problemas adicionales. Si no se tiene cuidado en este sentido. es que el ordenador puede entrar en conflicto y dar bastantes problemas en muchas de las funciones que realiza. lo cual podría llevar a que el ordenador dejara de funcionar. Consistencia en la memoria .a los usuarios una idea del tiempo que tomaría una máquina para resolver problemas complejos en álgebra lineal. Los resultados del punto de referencia de Linpack se pueden utilizar para estimar la velocidad con la que un ordenador es probable que ejecute un programa individual o múltiples programas. Coherencia de la memoria caché La coherencia de caché es un problema que ocurre en un ordenador cuando un procesador intentar mirar el sector de la memoria. Cada grupo de consistencia tiene una programación distinta y reglas diferentes. aunque cada una de ellas le dice a las múltiples CPU como compartir adecuadamente la memoria que tiene el ordenador sin causar los problemas que se han explicado. Hemos hablado de las reglas de consistencia. tendrán que tener varias cosas en cuenta para que las reglas aplicadas funcionen correctamente. caché web o sistemas de replicación optimista. de acuerdo a lo que indica un programa o por ciertas instrucciones. son gestionados por varias configuraciones de hardware. por ejemplo. Los procesos distribuidos. PROCESAMIENTO EN PARALELO La tecnología detrás del desarrollo de componentes de sistemas computacionales ha alcanzado su madurez y los desarrollos están a punto de producirse en la era del procesamiento en paralelo. la memoria será consistente y el resultado de las operaciones de memoria será predecible. los compiladores pueden reordenar algunas instrucciones de memoria. analiza el estado de ejecución y organiza la memoria dedicada a las tareas. respetan parcialmente este modelo traduciendo operaciones de memoria en operaciones de bajo nivel para preservar la memoria semántica. Este software administra las instrucciones que otros programas informáticos destinan al microprocesador. La consistencia de los datos es definida entre el programador y el sistema. Los lenguajes de alto nivel. hay una serie de posibles modelos de consistencia de datos. tales como una base de datos. que se caracterizan por ser ejecutados de forma simultánea. También existen los procesos paralelos. en cambio.En Informática. encapsular la sincronización necesaria. Los procesos cooperativos. se encuentran repartidos entre varios elementos de un sistema. Se dice que un sistema soporta un determinado modelo. sistema de archivos. en un sistema distribuido. El sistema operativo de la computadora (ordenador) se encarga de gestionar los procesos. que garantiza que si el programador sigue las reglas. y las llamadas a las bibliotecas como pthread_mutex_lock(). tales como una memoria compartida distribuida o almacenes de datos distribuido. Los ejemplos incluyen: Linealizable (también conocido como el estricta o consistencia atómica) Consistencia secuencial Consistencia de causalidad Consistencia liberada Consistencia eventual Consistencia delta Consistencia PRAM (también conocido como consistencia FIFO) Consistencia débil Consistencia vector campo PROCESAMIENTO El concepto de procesamiento se refiere a la ejecución de diversas instrucciones por parte del microprocesador. tales como C. si las operaciones en memoria siguen normas específicas. C++ y Java. Para mantener el modelo. lo que significa que la tecnología de la computación paralela . Es posible distinguir entre diferentes tipos de procesos. Hay 2 formas básicas de obtener partes independientes en un programa paralelo: descomposición funcional o descomposición de datos. de hecho. las simulaciones de modelos moleculares. cada tarea es responsable de una parte de la carga de procesamiento de la aplicación en general y a su vez. consiguiendo una aceleración lineal con el número de procesadores. Si las condiciones son muy favorables es incluso posible alcanzar la aceleración superlineal. los resultados parciales se recolectan y se suman convenientemente. . Un ejemplo de aplicación completamente paralelizable es el cálculo del área bajo una curva por integración numérica. este modelo se denomina descomposición funcional y se puede aprovechar las características particulares de cada tipo de tarea para ejecutarlas en la máquina que sea más conveniente para tal efecto. Las aplicaciones que se benefician de una aceleración más significativa son aquellas que describen procesos intrínsicamente paralelos. Un modelo computacional se basa por empezar. como los sistemas que representan. la aceleración que puede alcanzarse depende tanto del problema en sí como de la arquitectura de la computadora. cada tarea realiza una operación independiente de las otras tareas. es posible que el problema no se pueda resolver en un único procesador pero sí sobre un conjunto de ordenadores debidamente configurados.necesita avanzar. al final. La razón principal para crear y utilizar computación paralela es que el paralelismo es una de las mejores formas de salvar el problema del cuello de botella que significa la velocidad de un único procesador. Los algoritmos de cada tarea son diferentes. Descomposición de datos. Descomposición funcional. simplemente por cuestión de tamaño de los datos. la aparente paradoja se da debido a que cada procesador cuenta con su propia memoria ordinaria y caché. Con n procesadores es posible resolver el problema n veces más rápido que haciendo uso de uno sólo (salvo por el mínimo retraso que supone el reparto de trabajo inicial y la recolección de datos final). climáticos o económicos tienen todas una amplia componente paralela. que describiremos a continuación. El hardware de la máquina entra en juego ya que es preciso maximizar la relación entre el tiempo de cálculo útil y el perdido en el paso de mensajes. que pueden ser usadas de forma más eficiente con un subconjunto de datos. La razón de ser del procesamiento en paralelo es acelerar la resolución de un problema. en que una aplicación consiste en varias tareas. parámetros que dependen de la capacidad de proceso de las CPUs y de la velocidad de la red de comunicaciones. aún cuando no está lo suficientemente madura como para ser explotado como una tecnología de disponibilidad masiva. basta con dividir el intervalo de integración entre todos los procesadores disponibles y que cada uno resuelva su fragmento sin preocuparse de qué hacen los demás. consistente en que el programa se ejecuta aún más rápido que en régimen lineal. Los sistemas paralelos mejoran la velocidad de procesamiento y de E/S mediante la utilización de CPU y discos en paralelo. En el proceso paralelo se realizan muchas operaciones simultáneamente. por ejemplo. en la transferencia de datos en paralelo. . en oposición al proceso o transferencia en serie. Durante años se han encontrado dificultades al momento de analizar sistemas de gran tamaño. mientras que en el procesamiento secuencial los distintos pasos computacionales han de ejecutarse en serie. En el proceso en paralelo y en otras operaciones similares se realiza más de un proceso a la vez. y por la utilización de computadores digitales para su manipulación. la necesidad de lograr un equilibrio en la cantidad de información a procesar y su calidad continúa siendo evidente. los ocho bits de un byte de datos se transmiten a la vez. la mayoría de las máquinas de gama alta ofrecen un cierto grado de paralelismo de grano grueso: son comunes las máquinas con dos o cuatro procesadores. Las computadoras masivamente paralelas se distinguen de las máquinas de grano grueso porque son capaces de soportar un grado de paralelismo mucho mayor. la información se envía simultáneamente en grupos. si bien en el caso de los sistemas de potencia éste se ha visto favorecido por la descripción de problemas mediante matrices. varios microprocesadores de una computadora pueden estar manejando diferentes aspectos de un proceso (tales como un cálculo complicado) al mismo tiempo.Se refiere al proceso o transferencia de datos de forma simultánea. siempre que la arquitectura del computador sea la apropiada. particularmente en lo que respecta a la velocidad de procesamiento. a través de ocho hilos independientes de un cable. Cada vez son más comunes computadoras paralelas. por ejemplo. lo que hace que cada vez sea más importante el estudio de los sistemas paralelos de bases de datos. El procesamiento paralelo ha permitido sobrellevar algunas de estas dificultades. fichero. una CPU de uso general.Constituidos por un conjunto de procesadores que comparten una memoria principal común y están bajo el control de un mismo sistema operativo. .Consisten en un conjunto de sistemas relativamente autónomos. podemos clasificar dichos sistemas como sigue: Multiprocesadores débilmente acoplados . Multiprocesadores fuertemente acoplados . El sistema está controlado por un sistema operativo integrado que permite la interacción entre los procesadores y sus programas en los niveles de trabajo.Tales como un procesador de E/S. en los que cada CPU dispone de su propia memoria principal y sus canales de E/S.Multiprocesadores fuertemente acoplados que pueden cooperar en la ejecución en paralelo de una tarea o un trabajo. aquí sus características. bien a través de los mismos canales bien a través de canales distintos que proporcionan caminos de acceso a los mismos dispositivos. En este caso. Procesadores paralelos . Procesadores de Uso Específico . También pueden utilizarse algunas memorias locales (privadas como la cache). En este contexto se utiliza frecuentemente el término multicomputador. Todos los procesadores comparten el acceso a una memoria global. y los procesadores de uso específico están controlados por la CPU maestra a la que proporcionan ciertos servicios. tarea. y datos elementales. Posee dos o más procesadores de uso general similares y de capacidades comparables. hay un maestro. Todos los procesadores comparten el acceso a los dispositivos de E/S. El procesamiento en paralelo se basa principalmente en Multiprocesadores fuertemente acoplados que cooperan para la realización de los procesos.CARACTERISTICAS El uso de varios procesadores está motivado por consideraciones relativas a las prestaciones y/o a la fiabilidad. paralelismo de datos y paralelismo de tareas. porque la concurrencia introduce nuevos tipos de errores de software. se utilizan arquitecturas especializadas de computación en paralelo junto a procesadores tradicionales. siendo las condiciones de carrera los más comunes.La ganancia de velocidad y la ampliabilidad son dos aspectos importantes en el estudio del paralelismo. Hay varias formas diferentes de computación paralela: paralelismo a nivel de bit. 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. TIPOS DE COMPUTACION PARALELA: PARALELISMO A NIVEL DE BIT Desde el advenimiento de la integración a gran escala (VLSI) como tecnología de fabricación de chips de computadora en la década de 1970 hasta alrededor de 1986. a menudo se pueden dividir en unos más pequeños. El paralelismo se ha empleado durante muchos años. principalmente en forma de procesadores multinúcleo. sobre todo en la computación de altas prestaciones. para acelerar la tareas específicas. la computación en paralelo se ha convertido en el paradigma dominante en la arquitectura de computadores. 1 operando sobre el principio de que problemas grandes. MPPS y grids que utilizan varios equipos para trabajar en la misma tarea. Muchas veces. paralelismo a nivel de instrucción. 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. la ganancia de velocidad se refieres a la ejecución en menor tiempo de una tarea dada mediante el incremento del grado de paralelismo. 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. la ampliabilidad se refiere al manejo de transacciones más largas mediante el incremento del grado de paralelismo. que luego son resueltos simultáneamente (en paralelo). El procesamiento en paralelo ejecuta procesos en donde cada procesador se encarga de uno u otro y aceleran de esta forma el cálculo. Los programas informáticos paralelos son más difíciles de escribir que los secuenciales. Aspectos básicos de la computación paralela La computación paralela es una forma de cómputo en la que muchas instrucciones se ejecutan simultáneamente. pero el interés en ella ha crecido últimamente debido a las limitaciones físicas que impiden el aumento de la frecuencia. la aceleración en la arquitectura de computadores se lograba en gran medida duplicando el . la cantidad de información que el procesador puede manejar por ciclo. Por ejemplo. algunos procesadores pueden ejecutar más de una instrucción a la vez. acceso a la memoria y escritura. un procesador con un pipeline de N etapas puede tener hasta n instrucciones diferentes en diferentes etapas de finalización. Los procesadores modernos tienen”pipeline” de instrucciones de varias etapas. decodificar. con cinco etapas: pedir instrucción. a continuación. El scoreboarding y el algoritmo de Tomasulo (que es similar a scoreboarding pero hace uso de él) son dos de las técnicas más comunes para implementar la ejecución fuera de orden y la paralelización a nivel de instrucción. Las instrucciones pueden agruparse juntas sólo si no hay dependencia de datos entre ellas. Cada etapa en el pipeline corresponde a una acción diferente que el procesador realiza en la instrucción correspondiente a la etapa. una secuencia de instrucciones ejecutadas por un procesador. Estos son conocidos como procesadores superes calares. que se centra en la distribución de los datos entre los diferentes nodos computacionales que deben tratarse en paralelo. Estas instrucciones pueden reordenarse y combinarse en grupos que luego son ejecutadas en paralelo sin cambiar el resultado del programa. El ejemplo canónico de un procesador segmentado es un procesador RISC. PARALELISMO DE DATOS El paralelismo de datos es el paralelismo inherente en programas con ciclos.tamaño de la palabra en la computadora. el procesador primero debe adicionar los 8 bits de orden inferior de cada número entero con la instrucción de adición. cuando un procesador de 8 bits debe sumar dos enteros de 16 bits. PARALELISMO A NIVEL DE INSTRUCCIÓN Un programa de ordenador es. ejecutar. El procesador Pentium 4tenía un pipeline de 35 etapas. . añadir los 8 bits de orden superior utilizando la instrucción de adición con acarreo que tiene en cuenta el bit de acarreo de la adición de orden inferior. El aumento del tamaño de la palabra reduce el número de instrucciones que el procesador debe ejecutar para realizar una operación en variables cuyos tamaños son mayores que la longitud de la palabra. Muchas de las aplicaciones científicas y de ingeniería muestran paralelismo de datos. en este caso un procesador de 8 bits requiere dos instrucciones para completar una sola operación. Además del paralelismo a nivel de instrucción del pipelining. en esencia. Esto se conoce como paralelismo a nivel de instrucción. Los avances en el paralelismo a nivel de instrucción dominaron la arquitectura de computadores desde mediados de 1980 hasta mediados de la década de 1990. La paralelización de ciclos conduce a menudo a secuencias similares de operaciones (no necesariamente idénticas) o funciones que se realizan en los elementos de una gran estructura de datos. en donde un procesador de 16 bits necesita una sola instrucción para poder completarla. PARALELISMO DE TAREAS El paralelismo de tareas es la característica de un programa paralelo en la que cálculos completamente diferentes se pueden realizar en cualquier conjunto igual o diferente de datos. que se calculan en cada iteración del bucle. la paralelización de datos disponible generalmente también lo hace. pero el interés en ella ha aumentado en los últimos años debido a las restricciones físicas que impiden el escalado en frecuencia. principalmente en los procesadores multinúcleo. la computación paralela se ha aplicado en la computación de altas prestaciones. Esto contrasta con el paralelismo de datos. donde se realiza el mismo cálculo en distintos o mismos grupos de datos. . no se pueden realizar en paralelo. El paralelismo de tareas por lo general no escala con el tamaño de un problema. La computación paralela se ha convertido en el paradigma dominante en la arquitectura de computadores. siendo las condiciones de carrera los más comunes. Las dependencias de terminación de ciclo evitan la paralelización de ciclos. los MPP y los grids emplean varios ordenadores para trabajar en la misma tarea. Sin embargo. Este bucle no se puede paralelizar porque CUR depende de sí mismo (PREV2) y de PREV1. La comunicación y la sincronización entre las diferentes subtareas son típicamente las grandes barreras para conseguir un buen rendimiento de los programas paralelos. mientras que los clúster. El incremento de velocidad que consigue un programa como resultado de la paralelización viene dado por la ley de Amdahl. A medida que el tamaño de un problema se hace más grande. Los programas de ordenador paralelos son más difíciles de escribir que los secuenciales porque la concurrencia introduce nuevos tipos de errores de software. Los ordenadores paralelos se pueden clasificar según el nivel de paralelismo que admite su hardware: los ordenadores multinúcleo y multiproceso tienen varios elementos de procesamiento en una sola máquina. el consumo de energía de los ordenadores paralelos se ha convertido en una preocupación.Una dependencia de terminación de ciclo es la dependencia de una iteración de un ciclo en la salida de una o más iteraciones anteriores. recientemente. Dado que cada iteración depende del resultado de la anterior. Durante muchos años. generalmente memoria compartida. junto con la modularidad. subrutinas. una variable global o un fichero. * Acoplamiento externo: las unidades de software están ligadas a componentes externos. dos funciones son absolutamente independientes entre sí (es decir. haciendo incluso más difícil de detectar dónde está el problema. Para más información ver Acoplamiento normal. como por ejemplo dispositivos de entrada/salida. El bajo acoplamiento permite: * Mejorar la mantenibilidad de las unidades de software.) de un sistema informático. dependiendo de los datos que intercambien las unidades de software. funciones. y son cruciales en el incremento de la reutilización de los códigos. Por ejemplo. mientras menos dependientes sean entre sí las partes que constituyen un sistema informático. * Acoplamiento de contenido: ocurre cuando una unidad de software necesita acceder a una parte de otra unidad de software . * Evitar el efecto onda. Dentro de este tipo de acoplamiento podemos encontrarnos 3 subtipos.ACOPLAMIENTO Grado de interdependencia entre las unidades de software (módulos. * Minimiza el riesgo de tener que cambiar múltiples unidades de software cuando se debe alterar una. el grado en que una unidad puede funcionar sin recurrir a otras. la cohesión y otros factores. permiten mejorar la programación y el diseño de sistemas informáticos y aplicaciones. etc. El acoplamiento da la idea de lo dependiente que son las unidades de software entre sí. etc. Tipos de acoplamiento * Acoplamiento normal: una unidad de software llama a otra de un nivel inferior y tan solo intercambian datos (por ejemplo: parámetros de entrada/salida). bibliotecas. En este caso se dice que ambas están desacopladas. es decir. Obviamente es imposible un desacoplamiento total de las unidades. * Aumentar la reutilización de las unidades de software. El acoplamiento. ya que un defecto en una unidad puede propagarse a otras. protocolos de comunicaciones. O sea. el nivel más bajo de acoplamiento) cuando una puede hacer su trabajo completamente sin recurrir a la otra. * Acoplamiento común: dos unidades de software acceden a un mismo recurso común. mejor será el resultado. El consenso general es que debe haber bajo acoplamiento entre las unidades de software para lograr una buena programación o un buen diseño.