Descargar

Metodología de programación paralela

Enviado por Pablo Turmero


Partes: 1, 2

    edu.red

    1 ¿Qué es paralelismo? Dos o más procesos o hilos se ejecutan al mismo tiempo Paralelismo para arquitecturas con varios núcleos Múltiples procesos Comunicación a través de IPCs (Inter-Process Communication) Un solo proceso, múltiples hilos Comunicación a través de memoria compartida

    edu.red

    2 (Gp:)

    n = número de procesadores

    (Gp:) Tparalelo = {(1-P) + P/n} Tserial (Gp:) Aceleración = Tserial / Tparalelo

    Ley de Amdahl Describe el límite máximo de aceleración con ejecución paralela

    El código serial limita la aceleración (Gp:) (1-P) (Gp:) P (Gp:) T (Gp:) serial

    (Gp:) (1-P)

    (Gp:) P/2

    (Gp:) 0.5 + 0.25 (Gp:) 1.0/0.75 = 1.33

    n = 2 n = 8 (Gp:) P/8 (Gp:) .

    (Gp:) 0.5 + 0.0 (Gp:) 1.0/0.5 = 2.0

    edu.red

    3 Procesos e Hilos Los sistemas operativos modernos cargan programas como procesos Tiene recursos Ejecución Un proceso inicia ejecutando su punto de entrada como un hilo Los hilos pueden crear otros hilos dentro del proceso Cada hilo obtiene su propio stack Todos los hilos dentro de un proceso comparten código y segmentos de datos Procesos e Hilos (Gp:) Code segment (Gp:) Data segment

    thread main() (Gp:) . (Gp:) thread (Gp:) thread

    (Gp:) Stack (Gp:) Stack (Gp:) Stack

    edu.red

    4 Hilos – Beneficios y riesgos Beneficios Mayor rendimiento y mejor utilización de recursos Incluso en sistemas con un solo procesador – para esconder latencia e incrementar el tiempo de respuesta Comunicación entre procesos a través de memoria compartida es más eficiente Riesgos Incrementa la complejidad de la aplicación Difícil de depurar (condiciones de concurso, interbloqueos, etc.)

    edu.red

    5 Preguntas comunes cuando se paralelizan aplicaciones ¿Dónde paralelizar? ¿Cuánto tiempo lleva paralelizar? ¿Cuánto esfuerzo para rediseñar se requiere? ¿Es útil paralelizar una región específica? ¿Qué tanto se espera acelerar? ¿El rendimiento va de acuerdo a mis expectativas? ¿Será escalable a más hilos/datos añadidos? ¿Qué modelo de paralelización utilizar?

    edu.red

    6 Generación de Números Primos bool TestForPrime(int val) { // let's start checking from 3 int limit, factor = 3; limit = (long)(sqrtf((float)val)+0.5f); while( (factor < = limit) && (val % factor) ) factor += 2;

    return (factor > limit); }

    void FindPrimes(int start, int end) { int range = end – start + 1; for( int i = start; i < = end; i += 2 ) { if( TestForPrime(i) ) globalPrimes[gPrimesFound++] = i; ShowProgress(i, range); } } (Gp:) i (Gp:) factor

    61 3 5 7 63 3 65 3 5 67 3 5 7 69 3 71 3 5 7 73 3 5 7 9 75 3 5 77 3 5 7 79 3 5 7 9

    edu.red

    7 Actividad 1 Ejecutar la versión serial de los números primos Buscar el directorio PrimeSingle Compilar con Intel® Parallel Composer en Visual Studio Ejecutar algunas veces con rangos diferentes

    edu.red

    8 Metodología de Desarrollo Análisis Buscar código donde se realiza cómputo intensivo Diseño (Introducir Hilos) Determinar como implementar una solución paralelizada Depurar Detectar cualquier problema como resultado de usar hilos Afinar para mejorar el rendimiento Lograr el mejor rendimiento en paralelo

    edu.red

    9 Ciclo de Desarrollo

    Análisis Intel® Parallel Amplifier Diseño (Introducir Hilos) Intel® Performance libraries: IPP y MKL OpenMP* (Intel® Parallel Composer) Creción explícita de hilos (Win32*, Pthreads*) Depuración Intel® Parallel Inspector Intel Debugger Afinar para mejorar el rendimiento Intel® Parallel Amplifier

    edu.red

    10 Usaremos el proyecto PrimeSingle para el análisis PrimeSingle < inicio> < fin>

    Ejemplo: ./PrimeSingle 1 1000000

    Análisis de Hotspot Usa Parallel Amplifier para encontrar los hotspots en la aplicación bool TestForPrime(int val) { // let's start checking from 3 int limit, factor = 3; limit = (long)(sqrtf((float)val)+0.5f); while( (factor < = limit) && (val % factor)) factor ++;

    return (factor > limit); }

    void FindPrimes(int start, int end) { // start is always odd int range = end – start + 1; for( int i = start; i < = end; i+= 2 ){ if( TestForPrime(i) ) globalPrimes[gPrimesFound++] = i; ShowProgress(i, range); } } Identifica las regiones que consumen tiempo

    edu.red

    11 Análisis – Call Stack Inspeccionar el código desde el nodo (TestForPrime) Buscar un loop para paralelizar Si no se encuentra ninguno, avanza en el call stack hasta encontrar un ciclo adecuado o llamada a función para paralelizar Este es el nivel en el árbol de llamadas donde necesitamos paralelizar Usado para encontrar el nível apropiado en el árbol de llamadas para paralelizar

    edu.red

    12 Actividad 2 Ejecuta el código con el rango de '1 5000000' para obtener la medición base Tomar nota para referencias futuras Hacer el análisis de Hotspots en el código serial ¿Qué función se lleva la mayor parte del tiempo?

    Partes: 1, 2
    Página siguiente