Introducción Algoritmos secuenciales: secuencia de pasos. El orden de la ejecución se puede conocer de antemano (a menos que haya aleatoriedad en el algoritmo) Algoritmos paralelos: hay el detalle extra de la concurrencia (que pasos se pueden hacer en paralelo) y el no determinismo del orden de ejecución.
Un algoritmo paralelo no trivial necesita: Definir que porciones del algoritmo se pueden hacer en paralelo Mapear esas porciones en los CPUs correspondientes Distribuir la data (input, output y variables intermedias) entre CPUs y/o memorias. Administrar el acceso a la data compartida entre varios CPUs. Sincronizar los procesos cuando convenga.
Qué se puede y qué no se puede paralelizar? La suma de dos matrices es fácilmente paralelizable
Pero se puede paralelizar esto? A=B+C D=A+E + A=B+C D=A+E A=B+C D=A+E
Dependencia de data y de flujo Relación de bloqueo: write after read F=G+D G=H+I Si i>j, el output de la oper.j es el input de la oper.i Se puede solucionar usando variables auxiliares: AUX=G F=AUX+D G=H+I Dependencia de flujo: if A>B then C=D+E. Primero hay que hacer la comparación antes de tocar C. Si antes alguna operación modificaba A ó B, debe ser antes tocar C. SI NO hay ninguna de estas dependencias, se puede paralelizar a lo bestia y funcionará bien. Por que entonces no hay carreras por la data ?localidad
Descomposición de y=Ab
Ejemplo: descomponer un query MODEL="Civic" AND YEAR="2001" AND (COLOR="Green" OR COLOR="White")
Grafo de Dependencia 1
Grafo de dependencia 2
Página siguiente |