1 / 31

Programación Paralela

Programación Paralela. Niveles de Paralelismo en un programa. Grano Fino: ILP, Vectorización. Grano Medio: A nivel de thread. Grano Grueso: nivel de Proceso. Arquitecturas / Lenguajes. Vectorización: mediante el compilador, pero con ayuda del programador (-;

gafna
Download Presentation

Programación Paralela

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programación Paralela

  2. Niveles de Paralelismo en un programa • Grano Fino: ILP, Vectorización. • Grano Medio: A nivel de thread. • Grano Grueso: nivel de Proceso.

  3. Arquitecturas / Lenguajes • Vectorización: mediante el compilador, pero con ayuda del programador (-; • OpenMP: Directivas / llamadas a func. • HPF: Directivas. • Caso de estudio multiplicación de matrices. • Caso práctico RMA2.

  4. Vectorización

  5. Multiples Lanes

  6. Ejemplo Mult de matrices #1 DO I=1,N DO J=1, N DO K=1,N D(I,J) = D(I,J) + A(I,K)*B(K,J) END DO END DO END DO

  7. Ejemplo Mult de matrices #2 DO J=1,N DO K=1, N DO I=1,N C(I,J) = C(I,J) + A(I,K)*B(K,J) END DO END DO END DO Fortran utiliza Column Major Order!

  8. OpenMP • API: Paralelismo multihilo explícito y de memoria compartida. • Compuesto por: Directivas de compilador, Rutinas de librería, Variables de entorno. • API para C/C++, Fortran. • Cantidad de hilos dinámicamente modificable.

  9. ¿Cuándo conviene paralelizar? SAXPY(Scalar Alpha X Plus Y) A = Ax + Y

  10. Programa Ejemplo matmul Código Serial !$omp parallel do private(J,K) DO I=1,N DO J=1, N DO K=1,N C(I,J) = C(I,J) + A(I,K)*B(K,J) END DO END DO END DO !$omp end parallel do Más código serial

  11. Comparación vectorización, OpenMP, Vectorización + OpenMP Datos de Máquinas Comunes y silvestres!!

  12. Superlinealidad??? • Con N=400 el speedup entre la línea roja y la negra es sp=5.4 • Pero supuestamente el máximo teórico es de 2!!!!!!! • Qué ocurre en este caso??

  13. HPF

  14. Métodos de distribución de datos

  15. PROGRAM ABmult IMPLICIT NONE INTEGER, PARAMETER :: N = 100 INTEGER, DIMENSION (N,N) :: A, B, C INTEGER :: i, j !HPF$ PROCESSORS square(2,2) !HPF$ DISTRIBUTE (BLOCK, BLOCK) ONTO square :: C !HPF$ ALIGN A(i,*) WITH C(i,j) ! replicate copies of row A(i,*) onto processors which compute C(i,j) !HPF$ ALIGN B(*,j) WITH C(i,j) ! replicate copies of column B(*,j) onto processors which compute C(i,j) A = 1 B = 2 C = 0 DO i = 1, N DO j = 1, N ! All the work is local due to ALIGNs C(i,j) = DOT_PRODUCT(A(i,:), B(:,j)) END DO END DO WRITE(*,*) C END

  16. Caso Práctico: RMA2 Puente entre Santa Fé y Corrientes

  17. Carga Computacional

  18. Métodos Finitos Suma Eliminación: Ensamblado: Las etapas de eliminación no tienen que esperar a las de ensamblado!

  19. Método Frontal Generation Addition N≈≈8000 Elimination

  20. Tipo de carga La eliminación está compuesta de bucles de la siguiente forma La vectorización aplicada en estos bucles da un speedup de 2.7. Un resultado bueno, pero no suficiente. El algoritmo del método frontal es muy viejo e introduce mucha sobrecarga, además no es paralelizable. Para mejorar más, hay que cambiar de algoritmo!.

  21. Nuevo Algoritmo propuesto

  22. Representación de matrices Ralas • La dendidad es mu baja 0,05% de elementos no nulos • Una matriz típica tiene un tamaño 32000x32000. Esto con valores float de 4bytes puede llegar a dar: 32000x32000x4= 3906,25MB • No entra en la memoria, menos en la cache. • Row Major Format, soportado por PARDISO

  23. Sorting Paralelo • La mejora introducida en el paso anterior es grande. • Con la nueva distribución de la carga el Sorting ocupa un 18% del total. • Todavía se puede mejorar más paralelizando del Sorting. • El Sorting se puede paralelizar fácilmente con OpenMP

  24. Sorting Paralelo • NUMBER_OF_THREADS = OMP_GET_MAX_THREADS() • CHUNK_SIZE = I / NUMBER_OF_THREADS • !$omp parallel • !$omp+ private(IAM, LOWER, UPPER, SWAPPED, J, K, TEMPCOL, TEMPVAL) • IAM = OMP_GET_THREAD_NUM() • !Set Upper and Lower limits for each threads • LOWER = (IAM*CHUNK_SIZE) + 1 • !Consider an inexact division • IF (IAM.EQ.(NUMBER_OF_THREADS - 1)) THEN • UPPER = I - 1 • ELSE • UPPER = LOWER + CHUNK_SIZE - 1 • END IF • !SortElements using Bubble Sort • DO 700 J = LOWER, UPPER • SORT VALUES FROM LOWER TO UPPER • 700 CONTINUE • !$omp end parallel

  25. Mejoras para cada optimización

  26. Speedups

More Related