Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Los programas informáticos paralelos son más difíciles de escribir que los secuenciales,5 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.
Índice
Conceptos básicos
Ley de Amdahl y ley de Gustafson
Dependencias
Condiciones de carrera, exclusión mutua, sincronización, y desaceleración paralela
Paralelismo de grano fino, grano grueso y paralelismo vergonzoso
Modelos de consistencia
Taxonomía de Flynn
Tipos de paralelismo
Paralelismo a nivel de bit
Paralelismo a nivel de instrucción
Paralelismo de datos
Paralelismo de tareas
Hardware
Memoria y comunicación
Clases de computadoras paralelas
Computación multinúcleo
Multiprocesamiento simétrico
Computadoras paralelas especializadas
Software
Lenguajes de programación en paralelo
Paralelización automática
Punto de control
Comandos paralelos
Métodos algorítmicos
Historia
Notas
Referencias
Bibliografía
Lectura adicional
Enlaces externos
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.6
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.7
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).8 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.9
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».12
La ley de Gustafson es otra ley en computación que está en estrecha relación con la ley de Amdahl.13
Señala que el aumento de velocidad con 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.
Dependencias
Sea Pi y Pj dos segmentos del programa. Las condiciones de Bernstein14 describen cuando los dos
segmentos son independientes y pueden ejecutarse en paralelo. Para Pi, sean Ii todas las variables de
entrada y Oi las variables de salida, y del mismo modo para Pj. P i y Pj son independientes si satisfacen
Una violación de la primera condición introduce una dependencia de flujo, correspondiente al primer
segmento que produce un resultado utilizado por el segundo segmento. La segunda condición representa
una anti-dependencia, cuando el segundo segmento (Pj) produce una variable que necesita el primer
segmento (Pi). La tercera y última condición representa una dependencia de salida: Cuando dos segmentos
escriben en el mismo lugar, el resultado viene del último segmento ejecutado.15
1: función Dep(a, b)
2: c: = a · b
3: d: = 3 · c
4: fin función
2: c: = a · b
3: d: b = 3 ·
4: e: = a + b
5: fin función
En este ejemplo, no existen dependencias entre las instrucciones, por lo que todos ellos se pueden ejecutar
en paralelo.
Las condiciones de Bernstein no permiten que la memoria se comparta entre los diferentes procesos. Por
esto son necesarios algunos medios que impongan un ordenamiento entre los accesos tales como
semáforos, barreras o algún otro método de sincronización.
Las subtareas en un programa paralelo a menudo son llamadas hilos. Algunas arquitecturas de computación
paralela utilizan versiones más pequeñas y ligeras de hilos conocidas como hebras, mientras que otros
utilizan versiones más grandes conocidos como procesos. Sin embargo, «hilos» es generalmente aceptado
como un término genérico para las subtareas. Los hilos a menudo tendrán que actualizar algunas variables
que se comparten entre ellos. Las instrucciones entre los dos programas pueden entrelazarse en cualquier
orden. Por ejemplo, considere el siguiente programa:
Hilo A Hilo B
1A: Lee variable V 1B: Lee variable V
2A: Añadir 1 a la variable V 2B: Añadir 1 a la variable V
3A: Escribir en la variable V 3B: Escribir en la variable V
Un hilo bloqueará con éxito la variable V, mientras que el otro hilo no podrá continuar hasta que V se
desbloquee. Esto garantiza la correcta ejecución del programa. Si bien los bloqueos son necesarios para
asegurar la ejecución correcta del programa, pueden ralentizar en gran medida un programa.
Bloquear múltiples variables utilizando cerraduras no atómicas introduce la posibilidad de que el programa
alcance un bloqueo mutuo (deadlock). Un bloqueo atómico bloquea múltiples variables a la vez, si no
puede bloquearlas todas, no se bloquea ninguna de ellas. Si hay dos hilos y cada uno necesita bloquear las
mismas dos variables utilizando cerraduras no atómicas, es posible que un hilo bloquee uno de ellas y el
otro bloquee la segunda variable. En tal caso se produce un bloqueo mutuo donde ningún hilo puede
completar la ejecución.
Muchos programas paralelos requieren que sus subtareas actúen en sincronía. Esto requiere el uso de una
barrera. Las barreras se implementan normalmente mediante un bloqueo. Una clase de algoritmos, conocida
como algoritmos libres de bloqueo y libres de espera, evitan el uso de bloqueos y barreras. Sin embargo,
este enfoque es generalmente difícil de implementar y requiere estructuras de datos correctamente
diseñadas.
No todas las paralelizaciones conllevan una aceleración. Por lo general, mientras una tarea se divida en
cada vez más hilos, estos hilos pasan una porción cada vez mayor de su tiempo comunicándose entre sí.
Eventualmente, la sobrecarga de comunicación domina el tiempo empleado para resolver el problema, y la
paralelización adicional —dividir la carga de trabajo entre incluso más hilos— aumenta la cantidad de
tiempo requerido para terminar. Esto se conoce como desaceleración paralela.
Las aplicaciones a menudo se clasifican según la frecuencia con que sus subtareas se sincronizan o
comunican entre sí. Una aplicación muestra un paralelismo de grano fino si sus subtareas deben
comunicase muchas veces por segundo, se considera paralelismo de grano grueso si no se comunican
muchas veces por segundo, y es vergonzosamente paralelo si nunca o casi nunca se tienen que comunicar.
Aplicaciones vergonzosamente paralelas son consideradas las más fáciles de paralelizar.
Modelos de consistencia
Uno de los primeros modelos de consistencia fue el modelo de consistencia secuencial de Leslie Lamport.
La consistencia secuencial es la propiedad de un programa en la que su ejecución en paralelo produce los
mismos resultados que un programa secuencial. Específicamente, es un programa secuencial consistente si
«... los resultados de una ejecución son los mismos que se obtienen si las
operaciones de todos los procesadores son ejecutadas en un orden
secuencial, y las operaciones de cada procesador individual aparecen en
esta secuencia en el orden especificado por el programa».16
Taxonomía de Flynn
Michael J. Flynn creó uno de los primeros sistemas de clasificación de computadoras, programas paralelos
y secuenciales, ahora conocida como la taxonomía de Flynn. Flynn clasifica los programas y computadoras
atendiendo a si están operando con uno o varios conjuntos de instrucciones y si esas instrucciones se
utilizan en una o varias series de datos.
Según David A. Patterson y John L. Hennessy, «Algunas máquinas son híbridos de estas categorías, por
supuesto, este modelo clásico ha sobrevivido porque es simple, fácil de entender, y da una buena primera
aproximación. Además, es, tal vez por su comprensibilidad, el esquema más utilizado.»17
Tipos de paralelismo
Históricamente, los microprocesadores de 4 bits fueron sustituidos por unos de 8 bits, luego de 16 bits y 32
bits, esta tendencia general llegó a su fin con la introducción de procesadores de 64 bits, lo que ha sido un
estándar en la computación de propósito general durante la última década.
Los procesadores modernos tienen ''pipeline'' de instrucciones de varias etapas. Cada etapa en el pipeline
corresponde a una acción diferente que el procesador realiza en la instrucción correspondiente a la etapa; un
procesador con un pipeline de N etapas puede tener hasta n instrucciones diferentes en diferentes etapas de
finalización. El ejemplo canónico de un procesador segmentado es un procesador RISC, con cinco etapas:
pedir instrucción, decodificar, ejecutar, acceso a la memoria y escritura. El procesador Pentium 4 tenía un
pipeline de 35 etapas.20
Además del paralelismo a nivel de instrucción del pipelining, algunos procesadores pueden ejecutar más de
una instrucción a la vez. Estos son conocidos como procesadores superescalares. Las instrucciones pueden
agruparse juntas sólo si no hay dependencia de datos entre ellas. El scoreboarding y el algoritmo de
Tomasulo —que es similar a scoreboarding pero hace uso del renombre de registros— 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.
Paralelismo de datos
El paralelismo de datos es el paralelismo inherente en programas con ciclos, que se centra en la distribución
de los datos entre los diferentes nodos computacionales que deben tratarse en paralelo. «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».21 Muchas de las aplicaciones
científicas y de ingeniería muestran paralelismo de datos.
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. Las dependencias
de terminación de ciclo evitan la paralelización de
ciclos. Por ejemplo, considere el siguiente
pseudocódigo que calcula los primeros números de
Fibonacci:
1: PREV1 := 0
2: PREV2 := 1
3: do:
Paralelismo de tareas
Hardware
Memoria y comunicación
La memoria principal en un ordenador en paralelo puede ser compartida —compartida entre todos los
elementos de procesamiento en un único espacio de direcciones—, o distribuida —cada elemento de
procesamiento tiene su propio espacio local de direcciones—.23 El término memoria distribuida se refiere al
hecho de que la memoria se distribuye lógicamente, pero a menudo implica que también se distribuyen
físicamente. La memoria distribuida-compartida y la virtualización de memoria combinan los dos enfoques,
donde el procesador tiene su propia memoria local y permite acceso a la memoria de los procesadores que
no son locales. Los accesos a la memoria local suelen ser más rápidos que los accesos a memoria no local.
Las arquitecturas de ordenador en las que cada elemento de la memoria principal se puede acceder con
igual latencia y ancho de banda son conocidas como arquitecturas de acceso uniforme a memoria (UMA).
Típicamente, sólo se puede lograr con un sistema de memoria compartida, donde la memoria no está
distribuida físicamente. Un sistema que no tiene esta propiedad se conoce como arquitectura de acceso a
memoria no uniforme (NUMA). Los sistemas de memoria distribuidos tienen acceso no uniforme a la
memoria.
Los sistemas informáticos suelen hacer uso de cachés, pequeños recuerdos rápidos ubicados cerca del
procesador que almacenan las copias temporales de los valores de la memoria —cercano, tanto en el
sentido físico y lógico—. Los sistemas computacionales paralelos tienen dificultades con las cachés y la
posibilidad de una ejecución incorrecta
del programa debido a que se puede
almacenar el mismo valor en más de
un lugar. Estos equipos requieren
coherencia en la caché del sistema,
generalmente realizan un seguimiento
de los valores almacenados en caché y
estratégicamente los eliminan,
garantizando la correcta ejecución del
programa. Bus sniffing es uno de los Una vista lógica de una arquitectura con acceso a memoria no
métodos más comunes para hacer el uniforme (NUMA). Los procesadores en un directorio pueden
seguimiento de los valores a los que se acceder a la memoria de su directorio con una menor latencia de la
está accediendo. El diseño de grandes que pueden acceder a la memoria del directorio de otro.
sistemas de coherencia caché y de alto
rendimiento es un problema muy
difícil en arquitectura de computadores. Como resultado, las arquitecturas de memoria compartida no son
tan escalables como los sistemas de memoria distribuida.23
Las computadoras paralelas basadas en redes interconectadas deben tener algún tipo de enrutamiento para
permitir el paso de mensajes entre nodos que no están conectados directamente. Es probable que el medio
utilizado para la comunicación entre los procesadores de grandes máquinas multiprocesador sea jerárquico.
Las computadoras paralelas se pueden clasificar de acuerdo con el nivel en el que el hardware soporta
paralelismo. Esta clasificación es análoga a la distancia entre los nodos básicos de cómputo. Estos no son
excluyentes entre sí, por ejemplo, los grupos de multiprocesadores simétricos son relativamente comunes.
Computación multinúcleo
El ''Multithreading'' simultáneo —de la cual Intel HyperThreading es el más conocido— era una forma de
pseudo-multinúcleo. Un procesador con capacidad de multithreading simultáneo tiene una sola unidad de
ejecución (núcleo), pero cuando esa unidad de ejecución está desocupada —por ejemplo, durante un error
de caché—, se utiliza para procesar un segundo hilo. El microprocesador Cell de IBM, diseñado para su
uso en la consola Sony PlayStation 3, es otro prominente procesador multinúcleo.
Multiprocesamiento simétrico
Un multiprocesador simétrico (SMP) es un sistema computacional con múltiples procesadores idénticos que
comparten memoria y se conectan a través de un bus.24 La contención del bus previene el escalado de esta
arquitectura. Como resultado, los SMPs generalmente no comprenden más de 32 procesadores.25 «Debido
al pequeño tamaño de los procesadores y de la significativa reducción en los requisitos de ancho de banda
de bus, tales multiprocesadores simétricos son extremadamente rentables, siempre que exista una cantidad
suficiente de ancho de banda».24
Computación en clúster
Un procesador paralelo masivo (MPP) es un solo equipo con varios procesadores conectados en red.
Tienen muchas de las características de los clúster, pero cuentan con redes especializadas de interconexión
—en tanto que las clústeres utilizan hardware estándar para la creación de redes—. Los MPPs también
tienden a ser más grandes que los clústeres, con «mucho más» de 100 procesadores.29 En un MPP, «cada
CPU tiene su propia memoria y una copia del sistema operativo y la aplicación. Cada subsistema se
comunica con los demás a través de un interconexión de alta velocidad».30
Computación distribuida
La mayoría de las aplicaciones de computación distribuida utilizan middleware, software que se encuentra
entre el sistema operativo y la aplicación para administrar los recursos de red y estandarizar la interfaz de
software. El más común es la Infraestructura Abierta de Berkeley para Computación en Red (BOINC). A
menudo, los programas de computación distribuida hacen uso de «ciclos de repuesto», realizando cálculos
cuando el procesador de un equipo está desocupado.
Dentro de la computación paralela, existen dispositivos paralelos especializados que generan interés.
Aunque no son específicos para un dominio, tienden a ser aplicables sólo a unas pocas clases de problemas
paralelos.
Cómputo reconfigurable con arreglos de compuertas
programables
Al principio, los programas de GPGPU normalmente utilizaban el API de gráficos para ejecutar programas.
Sin embargo, varios nuevos lenguajes de programación y plataformas se han construido para realizar
cómputo de propósito general sobre GPUs, tanto Nvidia como AMD han liberado de entornos de
programación con CUDA y Stream SDK, respectivamente. Otros lenguajes de programación de GPU
incluyen: BrookGPU, PeakStream y RapidMind. Nvidia también ha lanzado productos específicos para la
computación en su serie Tesla. El consorcio de tecnología Khronos Group ha lanzado OpenCL, que es un
marco para la escritura de programas que se ejecutan en distintas plataformas conformadas por CPUs y
GPUs. AMD, Apple, Intel, Nvidia y otros están apoyando OpenCL.
Se han diseñado varios circuitos integrados de aplicación específica (ASIC) para hacer frente a las
aplicaciones paralelas.34 35
36
Debido a que un ASIC (por definición) es específico para una aplicación dada, puede ser completamente
optimizado para esa aplicación. Como resultado, para una aplicación dada, un ASIC tiende a superar a un
ordenador de propósito general. Sin embargo, los ASICs son creados con litografía de rayos X. Este
proceso requiere una máscara, que puede ser extremadamente cara. Una máscara puede costar más de un
millón de dólares.n. 5 37
Mientras más pequeño sean los transistores necesarios para el chip, más cara será
la máscara. Mientras tanto, el incremento del rendimiento en computadoras de propósito general —como se
describe en la Ley de Moore— tiende a eliminar esta diferencia en sólo una o dos generaciones de chips.32
El alto costo inicial, y la tendencia a ser superados por la ley de Moore, ha hecho inviable el uso de ASICs
para la mayoría de las aplicaciones paralelas. Sin embargo, algunos han sido construidos, un ejemplo es el
peta-flop RIKEN MDGRAPE-3 de la máquina que utiliza ASICs para la simulación de dinámica
molecular.
Procesadores vectoriales
Software
Los lenguajes de programación concurrentes, bibliotecas, APIs y modelos de programación paralela han
sido creados para la programación de computadores paralelos. Estos generalmente se pueden dividir en
clases basadas en las suposiciones que se hacen sobre la arquitectura de memoria subyacente: compartida,
distribuida, o compartida-distribuida. Los lenguajes de programación de memoria compartida se comunican
mediante la manipulación de variables en la memoria compartida. En la arquitectura con memoria
distribuida se utiliza el paso de mensajes. POSIX Threads y OpenMP son dos de las API más utilizadas
con la memoria compartida, mientras que Message Passing Interface (MPI) «Interfaz de Paso de Mensajes»
es el API más utilizado en los sistemas de paso de mensajes.n. 6 39 El concepto «valor futuro» es muy
utilizado en la programación de programas paralelos, donde una parte de un programa promete
proporcionar un dato requerido a otra parte del programa en un tiempo futuro.
Las empresas CAPS entreprise y Pathscale están intentando convertir las directivas de HMPP (Hybrid
Multicore Parallel Programming) en un estándar abierto denominado OpenHMPP. El modelo de
programación OpenHMPP basado en directivas ofrece una sintaxis para descargar de manera eficiente los
cálculos sobre aceleradores de hardware y optimizar el movimiento de datos hacia y desde la memoria del
hardware. Las directivas OpenHMPP describen llamadas a procedimientos remotos (RPC) en un
dispositivo acelerador —por ejemplo el GPU— o de forma más general un conjunto de núcleos. Las
directivas permiten anotar código C o Fortran para describir dos grupos de funcionalidades: la descarga de
los procedimientos en un dispositivo remoto y la optimización de las transferencias de datos entre la
memoria principal de la CPU y la memoria del acelerador.
Paralelización automática
Punto de control
Mientras un sistema computacional crece en complejidad, el tiempo medio entre fallos por lo general
disminuye. Un punto de control de aplicación es una técnica mediante la cual el sistema informático toma
una «instantánea» de la aplicación, un registro de todas las asignaciones actuales de recursos y estados
variables, semejante a un volcado de memoria, esta información se puede utilizar para restaurar el programa
si el equipo falla. Disponer de un punto de control significa que el programa puede reiniciar desde este y no
desde el principio. Mientras que los puntos de control proporcionan beneficios en una variedad de
situaciones, son especialmente útiles en los sistemas altamente paralelos con un gran número de
procesadores que son utilizados en la computación de altas prestaciones.41
Comandos paralelos
Los procesos de un comando paralelo deben ser inconexos de cualquier otro comando esto considerando
que no se menciona ninguna variable que se produzca como una variable destino en cualquier otro proceso.
Los subíndices son constantes enteras que sirven como nombre para la lista de comandos. Entonces un
proceso cuyos subíndices de etiquetas incluyen uno o más rangos para una serie de procesos, cada uno con
la misma etiqueta y lista de comandos cada uno tiene una combinación de diferentes valores que son
sustituidos por las variables combinadas.
Un comando paralelo especifica la ejecución concurrente de sus
procesos constituyentes. Todos comienzan simultáneamente y el comando paralelo termina con éxito solo
siempre y cuando todos hayan terminado con éxito.
Métodos algorítmicos
Mientras que las computadoras paralelas se hacen más grandes y más rápidas, se hace factible resolver
problemas que antes tardaban demasiado tiempo en ejecutarse. La computación en paralelo se utiliza en una
amplia gama de campos, desde la bioinformática (plegamiento de proteínas y análisis de secuencia) hasta la
economía (matemática financiera). Los tipos de problemas encontrados comúnmente en las aplicaciones de
computación en paralelo son:42
Historia
Los orígenes del verdadero paralelismo (MIMD) se remontan a
Federico Luigi, Menabrea Conte y su «Bosquejo de la máquina
analítica inventada por Charles Babbage».44 45 IBM introdujo el
IBM 704 en 1954, a través de un proyecto en el que Gene Amdahl
fue uno de los principales arquitectos. Se convirtió en el primer
equipo disponible en el mercado que utilizaba comandos
aritméticos de punto flotante totalmente automáticos.46
En 1969, la compañía estadounidense Honeywell introdujo su primer sistema Multics, un sistema con
multiprocesador simétrico capaz de ejecutar hasta ocho procesadores en paralelo.48 En 1970, C.mmp, un
proyecto en la Universidad Carnegie Mellon con varios procesadores, fue «uno de los primeros
multiprocesadores con más de unos pocos procesadores».45 «El primer bus con conexión multi-procesador
y caché espía fue el Synapse N+1 en el año 1984».45
Las computadoras paralelas SIMD se remontan a la década de 1970. La motivación detrás de las primeras
computadoras SIMD era amortizar el retardo de la compuerta de la unidad de control del procesador en
múltiples instrucciones.50 En 1964, Slotnick había propuesto la construcción de un ordenador
masivamente paralelo para el Laboratorio Nacional Lawrence Livermore.48 Su diseño fue financiado por
la Fuerza Aérea de los Estados Unidos, que fue el primer esfuerzo por lograr la computación en paralelo
SIMD.48 La clave de su diseño fue un paralelismo bastante alto, con hasta 256 procesadores, lo que
permitió que la máquina trabajara en grandes conjuntos de datos en lo que más tarde sería conocido como
el procesamiento de vectores. Sin embargo, ILLIAC IV fue llamado «el más infame de los
superordenadores», pues solo se había completado una cuarta parte del proyecto. Tardó 11 años, costando
casi cuatro veces la estimación original.n. 8 43
Cuando estaba listo para ejecutar una aplicación real por
primera vez en 1976, fue superado por supercomputadoras comerciales, como el Cray-1.
Notas
1. Las técnicas principales para lograr estas mejoras de rendimiento —mayor frecuencia de
reloj y arquitecturas cada vez más inteligentes y complejas— están golpeando la llamada
power wall. La industria informática ha aceptado que los futuros aumentos en rendimiento
deben provenir en gran parte del incremento del número de procesadores (o núcleos) en
una matriz, en vez de hacer más rápido un solo núcleo.
2. Antigua [sabiduría convencional]: La energía es gratuita y los transistores son caros. Nueva
[sabiduría convencional]: la energía es cara y los transistores son "gratuitos"
3. Antigua [sabiduría convencional]: incrementar la frecuencia de reloj es el método principal
de mejorar el rendimiento del procesador. Nueva [sabiduría convencional]: el incremento del
paralelismo es el método principal para mejorar el rendimiento del procesador... Incluso los
representantes de Intel, una empresa asociada a la posición: "mayor velocidad de reloj es
mejor", advirtió que los enfoques tradicionales para aumentar el rendimiento a través de la
maximización de la velocidad de reloj han sido empujados hasta el límite.
4. En los TOP500 Supercomputing Sites los clústeres alcanzan el 74.60% de las máquinas en
la lista.
5. ...el costo de una máscara y tarjeta de prueba —que es mucho más de $1 millón en los
90nm— crea un amortiguador importante en la innovación basada en semiconductores...
6. Se referencia la Interfaz de Paso de Mensajes como "la interfaz dominante de HPC"
7. Sin embargo, el santo grial de la investigación —paralelización automática de programas en
serie— todavía tiene que materializarse. Aunque la paralelización automática de ciertas
clases de algoritmos se ha demostrado, este éxito ha sido en gran parte limitado a
aplicaciones científicas y numéricas con control de flujo predecible —por ejemplo, las
estructuras de bucle anidado con un recuento de iteración estáticamente determinado— y
patrones de acceso a memoria analizables estáticamente —por ejemplo, recorridos en
grandes arreglos multidimensionales de datos de punto flotante—.
8. Aunque tuvo éxito en impulsar varias tecnologías útiles en proyectos posteriores, el IV
ILLIAC no triunfó como ordenador. Los costos se ascendieron de los $8 millones estimados
en 1966 a $31 millones en 1972, a pesar de la construcción de sólo un cuarto de la máquina
planeada... Fue tal vez la más infame de las supercomputadoras. El proyecto comenzó en
1965 y ejecutó su primera aplicación real en 1976
Referencias
www.upcrc.illinois.edu/documents/UPCRC
1. Gottlieb, Allan; Almasi, George S. (1989). _Whitepaper.pdf) el 9 de diciembre de
Highly parallel computing (http://dl.acm.org/ 2008.
citation.cfm?id=160438) (en inglés).
3. "The Landscape of Parallel Computing
Redwood City, California.:
Benjamin/Cummings. ISBN 0-8053-0177-1. Research: A View from Berkeley" (http://ww
w.eecs.berkeley.edu/Pubs/TechRpts/2006/
2. "Parallel Computing Research at Illinois: EECS-2006-183.pdf) (pdf) (en inglés)
The UPCRC Agenda" (https://web.archive. (UCB/EECS-2006-183). Universidad de
org/web/20081209154000/http://www.upcr California, Berkeley. 18 de diciembre de
c.illinois.edu/documents/UPCRC_Whitepa 2006.
per.pdf) (pdf) (en inglés). Universidad de
4. "The Landscape of Parallel Computing
Illinois en Urbana-Champaign. noviembre
de 2008. Archivado desde el original (http:// Research: A View from Berkeley" (http://ww
w.eecs.berkeley.edu/Pubs/TechRpts/2006/
EECS-2006-183.pdf) (pdf) (en inglés) doi:10.1145/1465482.1465560 (https://dx.doi.org/10.1
(UCB/EECS-2006-183). Universidad de 145%2F1465482.1465560).
California, Berkeley. 18 de diciembre de 12. Brooks, Frederick P. (1996). The mythical
2006. man month essays on software engineering
5. Hennessy, John L.; Patterson, David A., (https://archive.org/details/mythicalmonth00
Larus, James R. (1999). Computer broo) (en inglés) (Anniversary, repr. with
organization and design : the corr., 5 edición). Reading, Mass.: Addison-
hardware/software interface (https://archive. Wesley. ISBN 0-201-83595-9.
org/details/computerorganiz000henn) (en 13. Gustafson, John L. (mayo de 1988).
inglés) (2da edición). San Francisco: «Reevaluating Amdahl's law» (https://web.
Kaufmann. ISBN 1-55860-428-6. archive.org/web/20070927040654/http://w
6. Barney, Blaise. «Introduction to Parallel ww.scl.ameslab.gov/Publications/Gus/Amd
Computing» (http://www.llnl.gov/computing/ ahlsLaw/Amdahls.html). Communications
tutorials/parallel_comp/) (en inglés). of the ACM (en inglés) 31 (5): 532-533.
Lawrence Livermore National Laboratory. doi:10.1145/42411.42415 (https://dx.doi.org/10.114
Consultado el 9 de noviembre de 2007. 5%2F42411.42415). Archivado desde el
7. Hennessy, John L.; Patterson, David A. original (http://www.scl.ameslab.gov/Public
(2002). Computer architecture a ations/Gus/AmdahlsLaw/Amdahls.html) el
quantitative approach. (https://archive.org/d 27 de septiembre de 2007.
etails/computerarchitec00henn_899) (en 14. Bernstein, A. J. (1 de octubre de 1966).
inglés) (3ra edición). San Francisco, «Analysis of Programs for Parallel
California: International Thomson. p. 43 (htt Processing». IEEE Transactions on
ps://archive.org/details/computerarchitec00 Electronic Computers (en inglés). EC-15
henn_899/page/n43). ISBN 1-55860-724-2. (5): 757-763. doi:10.1109/PGEC.1966.264565 (htt
8. Rabaey, Jan M. (1996). Digital integrated ps://dx.doi.org/10.1109%2FPGEC.1966.264565).
circuits : a design perspective (en inglés). 15. Roosta, Seyed H. (2000). Parallel
Upper Saddle River, N.J.: Prentice-Hall. processing and parallel algorithms: theory
p. 235. ISBN 0-13-178609-1. and computation (https://archive.org/details/
9. Flynn, Laurie J. (8 de mayo de 2004). «Intel parallelprocessi00roos) (en inglés). New
Halts Development Of 2 New York, NY [u.a.]: Springer. p. 114 (https://arch
Microprocessors» (http://www.nytimes.com/ ive.org/details/parallelprocessi00roos/pag
2004/05/08/business/08chip.html?ex=1399 e/n129). ISBN 0-387-98716-9.
348800&en=98cc44ca97b1a562&ei=5007) 16. Lamport, Leslie (1 de septiembre de 1979).
. New York Times (en inglés). Consultado «How to Make a Multiprocessor Computer
el 5 de junio de 2012. That Correctly Executes Multiprocess
10. Moore, Gordon E. (1965). «Cramming more Programs». IEEE Transactions on
components onto integrated circuits» (http Computers (en inglés). C-28 (9): 690-691.
s://web.archive.org/web/20080218224945/ doi:10.1109/TC.1979.1675439 (https://dx.doi.org/10.1
http://download.intel.com/museum/Moores_ 109%2FTC.1979.1675439).
Law/Articles-Press_Releases/Gordon_Moo 17. Patterson y Hennessy, p. 748.
re_1965_Article.pdf) (pdf). Electronics 18. Culler et al. p. 15.
Magazine (en inglés). Archivado desde el
19. Culler et al. p. 15.
original (ftp://download.intel.com/museum/
Moores_Law/Articles-Press_Releases/Gor 20. Patt, Yale (2004). The Microprocessor Ten
don_Moore_1965_Article.pdf) el 18 de Years From Now: What Are The
febrero de 2008. Consultado el 11 de Challenges, How Do We Meet Them? (http
noviembre de 2006. s://web.archive.org/web/20080414141000/
http://users.ece.utexas.edu/~patt/Videos/tal
11. Amdahl, Gene M. (18-20 de abril de 1967).
k_videos/cmu_04-29-04.wmv) (wmv) (en
«Validity of the single processor approach
inglés). Carnegie Mellon University.
to achieving large scale computing
Archivado desde el original (http://users.ec
capabilities» (http://dl.acm.org/citation.cfm?i e.utexas.edu/~patt/Videos/talk_videos/cmu
d=160438). Proceeding AFIPS '67 (Spring)
_04-29-04.wmv) el 14 de abril de 2008.
(en inglés): 483-485.
Consultado el 7 de noviembre de 2007.
21. Culler et al. p. 124. 34. Maslennikov, Oleg (2002). «Systematic
22. Culler et al. p. 125. Generation of Executing Programs for
Processor Elements in Parallel ASIC or
23. Patterson y Hennessy, p. 713.
FPGA-Based Systems and Their
24. Hennessy y Patterson, p. 549. Transformation into VHDL-Descriptions of
25. Patterson y Hennessy, p. 714. Processor Element Control Units» (https://w
26. What is clustering? «Webopedia computer eb.archive.org/web/20200211090535/http://
dictionary» (http://www.webopedia.com/TE www.springerlink.com/content/jjrdrb0lelyeu
RM/c/clustering.html) (en inglés). 3e9/). Lecture Notes in Computer Science
Consultado el 7 de noviembre de 2007. 2328/2002 (en inglés): 272. Archivado
27. «Beowulf definition» (http://www.pcmag.co desde el original (http://www.springerlink.co
m/encyclopedia_term/0,2542,t=Beowulf&i= m/content/jjrdrb0lelyeu3e9/) el 11 de
38548,00.asp) (en inglés). PC Magazine. febrero de 2020. Consultado el 19 de
Consultado el 7 de noviembre de 2007. diciembre de 2012.
28. «Architecture share for 06/2007» (https://we 35. Shimokawa, Y.; Y. Fuwa and N. Aramaki
b.archive.org/web/20071114212716/http:// (18 al 21 de noviembre de 1991). «A
www.top500.org/stats/list/29/archtype) (en parallel ASIC VLSI neurocomputer for a
inglés). Archivado desde el original (http:// large number of neurons and billion
www.top500.org/stats/list/29/archtype) el 14 connections per second speed» (http://ieee
de noviembre de 2007. Consultado el 7 de xplore.ieee.org/xpl/freeabs_all.jsp?arnumb
noviembre de 2007. er=170708). International Joint Conference
on Neural Networks (en inglés) 3: 2162-
29. Hennessy y Patterson, p. 537.
2167. ISBN 0-7803-0227-3.
30. MPP Definition (https://web.archive.org/we doi:10.1109/IJCNN.1991.170708 (https://dx.doi.org/1
b/20130511084523/http://www.pcmag.com/ 0.1109%2FIJCNN.1991.170708).
encyclopedia_term/0%2C%2Ct%3Dmpp%
36. Acken, Kevin P.; Irwin, Mary Jane; Owens,
26i%3D47310%2C00.asp) (en inglés). PC Robert M. (1 de enero de 1998). The
Magazine. Archivado desde el original (htt Journal of VLSI Signal Processing (en
p://www.pcmag.com/encyclopedia_term/0,,t
inglés) 19 (2): 97-113.
=mpp&i=47310,00.asp) el 11 de mayo de
doi:10.1023/A:1008005616596 (https://dx.doi.org/10.
2013. Consultado el 7 de noviembre de
1023%2FA%3A1008005616596).
2007.
37. Scoping the Problem of DFM in the
31. Kirkpatrick, Scott (2003). «COMPUTER
Semiconductor Industry (https://web.archiv
SCIENCE: Rough Times Ahead». Science
e.org/web/20080131221732/http://www.futu
(en inglés) 299 (5607): 668-669. re-fab.com/documents.asp?grID=353&d_ID
PMID 12560537 (https://www.ncbi.nlm.nih.gov/pubm
=2596) (en inglés). Universidad de
ed/12560537). doi:10.1126/science.1081623 (https://
California, San Diego. 21 de junio de 2004.
dx.doi.org/10.1126%2Fscience.1081623).
Archivado desde el original (http://www.futu
32. Michael R. Chief Operating Officer, DRC re-fab.com/documents.asp?grID=353&d_ID
Computer Corporation, Invited speaker =2596) el 31 de enero de 2008.
D'Amour (28 de febrero de 2007). Standard
38. Patterson y Hennessy, p. 751.
Reconfigurable Computing (en inglés).
Universidad de Delaware. 39. «Sidney Fernbach Award given to MPI
inventor Bill Gropp» (https://web.archive.or
33. Sha'Kia, Boggan; Pressel, Daniel M.
g/web/20110725191103/http://awards.com
(agosto de 2007). GPUs: An Emerging puter.org/ana/award/viewPastRecipients.ac
Platform for General-Purpose Computation
tion?id=16) (en inglés). Archivado desde el
ARL-SR-154 (https://web.archive.org/web/2
original (http://awards.computer.org/ana/aw
0161225073248/http://www.arl.army.mil/arlr
ard/viewPastRecipients.action?id=16) el 25
eports/2007/ARL-SR-154.pdf) (pdf) (en
de julio de 2011. Consultado el 19 de
inglés). U.S. Army Research Lab.
diciembre de 2012.
Archivado desde el original (http://www.arl.
army.mil/arlreports/2007/ARL-SR-154.pdf) 40. Shen, John Paul; Mikko H. Lipasti (2004).
el 25 de diciembre de 2016. Consultado el Modern processor design : fundamentals of
7 de noviembre de 2007. superscalar processors (https://archive.org/
details/modernprocessord00shen) (en
inglés) (1ra edición). Dubuque, Iowa: 47. Gill, S. (abril de 1958). Parallel
McGraw-Hill. p. 561 (https://archive.org/det Programming (en inglés) 1. Sociedad
ails/modernprocessord00shen/page/n289). Británica de Computación: The Computer
ISBN 0-07-057064-7. Journal. pp. 2-10.
41. Padua, David (2011). Encyclopedia of 48. Wilson, Gregory V (1994). «The History of
Parallel Computing (en inglés) 4. p. 265. the Development of Parallel Computing» (h
ISBN 0387097651. ttp://ei.cs.vt.edu/~history/Parallel.html) (en
42. Krste, et al., Asanovic (18 de diciembre de inglés). Virginia Tech/Norfolk State
2006). The Landscape of Parallel University, Interactive Learning with a
Computing Research: A View from Digital Library in Computer Science.
Berkeley (http://www.eecs.berkeley.edu/Pu Consultado el 1 de agosto de 2008.
bs/TechRpts/2006/EECS-2006-183.pdf) 49. Anthes, Gry (19 de noviembre de 2001).
(pdf) (en inglés) (Technical Report No. «The Power of Parallelism» (https://web.arc
UCB/EECS-2006-183). Universidad de hive.org/web/20080604045010/http://www.
California, Berkeley. pp. 17-19. computerworld.com/action/article.do?comm
43. Hennessy, Patterson. (en inglés). pp. 749- and=viewArticleBasic&articleId=65878).
50. Falta el |título= (ayuda) Computerworld (en inglés). Archivado
44. Conte Menabrea Menabrea, L. F., Federico desde el original (http://www.computerworl
Luigi (1842). «Sketch of the Analytic d.com/action/article.do?command=viewArti
Engine Invented by Charles Babbage» (htt cleBasic&articleId=65878) el 4 de junio de
p://www.fourmilab.ch/babbage/sketch.html) 2008. Consultado el 1 de agosto de 2008.
(en inglés). Bibliothèque Universelle de 50. Patterson y Hennessy, p. 749.
Genève. Consultado el 7 de noviembre de
2007.
45. Patterson y Hennessy, p. 753.
46. da Cruz, Frank (2003). «Columbia
University Computing History: The IBM
704» (http://www.columbia.edu/acis/history/
704.html) (en inglés). Columbia University.
Consultado el 1 de agosto de 2008.
Bibliografía
Singh, David Culler; J.P. (1997). Parallel computer architecture (https://archive.org/details/pa
rallelcomputer00cull) (en inglés) (Nachdr. edición). San Francisco: Morgan Kaufmann Publ.
p. 15 (https://archive.org/details/parallelcomputer00cull/page/n11). ISBN 1-55860-343-3.
Hennessy, John L.; Patterson, David A. (27 de septiembre de 2006). Computer Architecture:
A Quantitative Approach [Arquitectura de computadoras: un enfoque cuantitativo] (en inglés)
(4ta edición). Morgan Kaufmann. ISBN 0123704901.
Patterson, David A.; Hennessy, John L. (9 de noviembre de 2011). Computer Organization
and Design, Fourth Edition: The Hardware/Software Interface [Organización y diseño de
computadoras, 4ta edición: La interfaz hardware/software] (https://archive.org/details/comput
erorganiza0000patt) (en inglés) (4ta edición). Morgan Kaufmann. ISBN 0123747503.
Lectura adicional
Rodriguez, C.; Villagra, M.; Baran, B. (29 de agosto de 2008). «Asynchronous team
algorithms for Boolean Satisfiability» (http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnum
ber=4610083). Bio-Inspired Models of Network, Information and Computing Systems, 2007.
Bionetics 2007. 2nd (en inglés): 66-69. doi:10.1109/BIMNICS.2007.4610083 (https://dx.doi.org/10.110
9%2FBIMNICS.2007.4610083).
Enlaces externos
Wikilibros alberga un libro o manual sobre Distributed Systems.
Wikimedia Commons alberga una galería multimedia sobre Computación paralela.
OpenHMPP, A New Standard for Manycore (https://web.archive.org/web/20130616205308/h
ttp://openhmpp.org/) (en inglés)
Internet Parallel Computing Archive (https://web.archive.org/web/20021012122919/http://wot
ug.ukc.ac.uk/parallel/) (en inglés)
Universal Parallel Computing Research Center (https://web.archive.org/web/200810200522
47/http://www.upcrc.illinois.edu/) (en inglés)
Designing and Building Parallel Programs, by Ian Foster (https://web.archive.org/web/20061
128063307/http://www-unix.mcs.anl.gov/dbpp/) (en inglés)
Go Parallel: Translating Multicore Power into Application Performance (https://web.archive.o
rg/web/20120909155247/http://goparallel.sourceforge.net/) (en inglés)
What makes parallel programming hard? (https://web.archive.org/web/20110529133159/htt
p://www.futurechips.org/tips-for-power-coders/parallel-programming.html) (en inglés)
Course in Parallel Computing at University of Wisconsin-Madison (https://web.archive.org/w
eb/20110826190010/http://sbel.wisc.edu/Courses/ME964/2011/index.htm) (en inglés)
Parallel and distributed Grobner bases computation in JAS (http://arxiv.org/PS_cache/arxiv/p
df/1008/1008.0011v1.pdf) (en inglés)
Parallel Computing Works Free On-line Book (http://www.new-npac.org/projects/cdroms/ce
wes-1998-05/copywrite/pcw/book.html) (en inglés)
Comparing programmability of Open MP and pthreads (https://web.archive.org/web/2011052
9192843/http://www.futurechips.org/tips-for-power-coders/open-mp-pthreads.html) (en
inglés)
Lawrence Livermore National Laboratory: Introduction to Parallel Computing (http://www.llnl.
gov/computing/tutorials/parallel_comp/) (en inglés)
Course in Parallel Programming at Columbia University (in collaboration with IBM T.J
Watson X10 project) (https://web.archive.org/web/20100122110043/http://ppppcourse.ning.c
om/) (en inglés)
Frontiers of Supercomputing Free On-line Book Covering topics like algorithms and
industrial applications (http://ark.cdlib.org/ark:/13030/ft0f59n73z/) (en inglés)
Parallel processing topic area at IEEE Distributed Computing Online (https://web.archive.or
g/web/20110928211245/http://dsonline.computer.org/portal/site/dsonline/index.jsp?pageID=
dso_level1_home&path=dsonline%2Ftopics%2Fparallel&file=index.xml&xsl=generic.xsl)
(en inglés)
Esta obra contiene una traducción derivada de «Parallel_computing» de Wikipedia en
inglés, publicada por sus editores (https://en.wikipedia.org/wiki/Parallel_computing?action=
history) bajo la Licencia de documentación libre de GNU y la Licencia Creative Commons
Atribución-CompartirIgual 3.0 Unported.
Obtenido de «https://es.wikipedia.org/w/index.php?title=Computación_paralela&oldid=145467018»
Esta página se editó por última vez el 19 ago 2022 a las 18:21.
El texto está disponible bajo la Licencia Creative Commons Atribución Compartir Igual 3.0;
pueden aplicarse
cláusulas adicionales. Al usar este sitio, usted acepta nuestros términos de uso y nuestra política de privacidad.
Wikipedia® es una marca registrada de la Fundación Wikimedia, Inc., una organización sin ánimo de lucro.