SlideShare ist ein Scribd-Unternehmen logo
1 von 14
Downloaden Sie, um offline zu lesen
Computación de Propósito General en
        Unidades de Procesamiento Gráfico
                     (GPGPU)

                  E. Dufrechou, P. Ezzatti y M. Pedemonte
                     Dufrechou,




Clase 3 – Programación paralela                             GPGPU




                                Clases 3
                          Programación paralela




Clase 3 – Programación paralela                             GPGPU




                                  Contenido

   • Conceptos básicos de programación paralela
   • Herramientas para GPU (básico)
         – Compilación
         – Hello world




Clase 3 – Programación paralela                             GPGPU




                                                                    1
Conceptos básicos de
                          Programación Paralela




Clase 3 – Programación paralela                            GPGPU




    Conceptos Básicos de Programación Paralela


     • Múltiples unidades de cómputo trabajando en forma
       coordinada
           • Comunicación
           • Sincronización
     • División
           • De tareas
           • De datos




Clase 3 – Programación paralela                            GPGPU




    Conceptos Básicos de Programación Paralela


      • Paralelismo de
            • Memoria compartida (multi-core)
            • Memoria distribuida (cluster)
      • Contexto
            • Homogéneo
            • Heterogéneo
      • Balance de carga




Clase 3 – Programación paralela                            GPGPU




                                                                   2
Conceptos Básicos de Programación Paralela

   En este caso:


   • Muchas unidades de cómputo trabajando en forma
        coordinada.

   • División de datos.

   • Paralelismo “similar” a paralelismo a memoria compartida
        (multi-core).

   • Unidades de procesamiento homogéneas.


Clase 3 – Programación paralela                                            GPGPU




    Conceptos Básicos de Programación Paralela

   En los ejemplos que se verán a continuación:


   • Se utilizará una sintaxis inspirada en la de Matlab.

   • El código escrito en color negro ejecuta en forma secuencial.

   • El código escrito en color azul indica palabras reservadas que son
        directivas para el manejo de paralelismo.

   • El código escrito en color rojo indica el punto de ramificación del
        paralelismo.

   • El código escrito en color verde es el código que es ejecutado en forma
        paralela por cada una de las unidades de procesamiento.

Clase 3 – Programación paralela                                            GPGPU




    Conceptos Básicos de Programación Paralela
   Ejemplo 0:

   • Se tiene una matriz con
     4 columnas y se quiere
     obtener la suma por
     columnas de la matriz.
   • Se dispone de una única
     unidad de
     procesamiento.




Clase 3 – Programación paralela                                            GPGPU




                                                                                   3
Conceptos Básicos de Programación Paralela
   Ejemplo 0:

  Res = zeros(1,4)
  [m,n] = size(Mat)
  For j = 1:4
       For i = 1 : m
           Res(j) = Res(j) +
       Mat(i,j)




Clase 3 – Programación paralela             GPGPU




    Conceptos Básicos de Programación Paralela
   Ejemplo 1:

   • Se tiene una matriz con
     4 columnas y se quiere
     obtener la suma por
     columnas de la matriz.
   • Se dispone de cuatro
     unidades de
     procesamiento.




Clase 3 – Programación paralela             GPGPU




    Conceptos Básicos de Programación Paralela
   Ejemplo 1:
Res = zeros(1,4)
[m,n] = size(Mat)
begin_parallel(4)
For j = 1:4
     For i = 1 : m
            Res(j) = Res(j) + Mat(i,j)
end_parallel




Clase 3 – Programación paralela             GPGPU




                                                    4
Conceptos Básicos de Programación Paralela
   Ejemplo 2:

   • Se tiene una matriz con 400 columnas y se quiere obtener la
     suma por columnas de la matriz.
   • Se dispone de cuatro unidades de procesamiento.




Clase 3 – Programación paralela                                    GPGPU




    Conceptos Básicos de Programación Paralela
   Ejemplo 2:

Res = zeros(1,400)
[m,n] = size(Mat)
begin_parallel(4)
For j = 1:400
     For i = 1 : m
            Res(j) = Res(j) + Mat(i,j)
end_parallel




Clase 3 – Programación paralela                                    GPGPU




    Conceptos Básicos de Programación Paralela
   Ejemplo 3:

   • Se tiene una matriz con 400 columnas y se quiere obtener la
     suma por columnas de la matriz.
   • Se sabe que el trabajo para realizar la suma de una columna es
     irregular (por ejemplo, sumar 0 es menos costoso
     computacionalmente que sumar otro número).
   • Se dispone de cuatro unidades de procesamiento.




Clase 3 – Programación paralela                                    GPGPU




                                                                           5
Conceptos Básicos de Programación Paralela

                                  Distribución de datos




         Distribución por bloque                    Distribución cíclica

Clase 3 – Programación paralela                                            GPGPU




    Conceptos Básicos de Programación Paralela
   Ejemplo 3:

   • Es posible achicar el tamaño de los bloques.
   • Por ejemplo: de 100 columnas pasar a 10 columnas por bloque.

             Res = zeros(1,400)
             [m,n] = size(Mat)
             begin_parallel(40)
             For j = 1:400
                 For i = 1 : m
                        Res(j) = Res(j) + Mat(i,j)
             end_parallel



Clase 3 – Programación paralela                                            GPGPU




    Conceptos Básicos de Programación Paralela

   Ejemplo 4:

   • Se tiene una matriz con 400 columnas y se quiere obtener la
     suma por columnas de la matriz.
   • Se sabe que el trabajo para realizar la suma de una columna es
     irregular (por ejemplo, sumar 0 es menos costoso
     computacionalmente que sumar otro número).
   • Se dispone de cuatro unidades de procesamiento.
   • En este caso, además se quiere obtener la suma parcial por
     unidad de procesamiento.




Clase 3 – Programación paralela                                            GPGPU




                                                                                   6
Conceptos Básicos de Programación Paralela

   Ejemplo 4:




Clase 3 – Programación paralela                                     GPGPU




    Conceptos Básicos de Programación Paralela
   Ejemplo 4:
 Res = zeros(1,400)
 Res2 = zeros(1,4)
 [m,n] = size(Mat)
 begin_parallel(40)
 For j = 1:400
     private idP = myId()
      For i = 1 : m
             Res(j) = Res(j) + Mat(i,j)
     Res2(idP) = Res2(idP) + Res(j)
 end_parallel



Clase 3 – Programación paralela                                     GPGPU




    Conceptos Básicos de Programación Paralela

    Ejemplo 5:

    • Se tiene una matriz con 400 columnas y se quiere obtener la
      suma de todos los elementos de la matriz.
    • Se dispone de cuatro unidades de procesamiento.




Clase 3 – Programación paralela                                     GPGPU




                                                                            7
Conceptos Básicos de Programación Paralela

   Solución 1
   • Se suma por columna




   • Luego se suma todo el vector intermedio


Clase 3 – Programación paralela                                   GPGPU




    Conceptos Básicos de Programación Paralela

   Solución 1

   • Se suma por columna y luego se suma el vector intermedio.
                            Res = zeros(1,400)
                            [m,n] = size(Mat)
                            begin_parallel(4)
                            For j = 1:400
                                  For i = 1 : m
                                     Res(j) = Res(j) + Mat(i,j)
                            end_parallel
                            For j = 1:400
                                  Sum = Sum + Res(j)


Clase 3 – Programación paralela                                   GPGPU




    Conceptos Básicos de Programación Paralela
   Solución 2
   • Se suma por columnas para cada unidad de procesamiento.




   • Luego se suma el vector intermedio.


Clase 3 – Programación paralela                                   GPGPU




                                                                          8
Conceptos Básicos de Programación Paralela
   Solución 2
                                     Res = zeros(1,4)
   • Se suma por columnas [m,n] = size(Mat)
     para cada unidad de   begin_parallel(4)
     procesamiento y luego For j = 1:400
     se suma el vector       private idP = myId ()
     intermedio.             For i = 1 : m
                                           Res(idP) = Res(idP) +
                                       Mat(i,j)
                                     end_parallel
                                     For j = 1:4
                                       Sum = Sum + Res(j)




Clase 3 – Programación paralela                                           GPGPU




    Conceptos Básicos de Programación Paralela

Solución 3
                                  Res = zeros(1,4)
• Sumo por columna                [m,n] = size(Mat)
  y actualizo el                  begin_parallel(4)
  resultado.                      For j = 1:400
                                    private idP = myId ()
                                    For i = 1 : m
• Concepto de
                                       Res(idP) = Res(idP) + Mat(i,j)
  reduce
                                  end_parallel
                                  begin_parallel(2)
                                  For j = 1:4
                                    Sum = Sum + Res(j)
                                  end_parallel

Clase 3 – Programación paralela                                           GPGPU




    Conceptos Básicos de Programación Paralela
                                                    Race condition:
Res = zeros(1,4)
                                                    - Los hilos compiten por
[m,n] = size(Mat)
                                                      el acceso a los
begin_parallel(4)
                                                      registros.
For j = 1:400
                                                    - Pueden haber distintos
    private idP = myId ()
                                                      ordenes de ejecución.
    For i = 1 : m
           Res(idP) = Res(idP) +Mat(i,j)            - Distinto orden de
end_parallel
                                                      ejecución produce
                                                      resultados
begin_parallel(2)
                                                      diferentes!!!
For j = 1:4
    Sum = Sum + Res(j)
                                                    - Este problema también
                                                      aparece en circuitos
end_parallel
                                                      electrónicos, base de
                                                      datos, etc.
Clase 3 – Programación paralela                                           GPGPU




                                                                                  9
Conceptos Básicos de Programación Paralela

                                               Reduce:
       [m,n] = size(Mat)
                                               - Generalmente están
       begin_parallel(4)                          disponibles diversas
       private Res                                operaciones:
       For j = 1:400
                                                   • +
           %private idP = myId ()
                                                   • *
           For i = 1 : m
                   Res = Res + Mat(i,j)            • min
       end_parallel (reduce(+,Res))                • max




Clase 3 – Programación paralela                                     GPGPU




    Conceptos Básicos de Programación Paralela

   Consideremos el
     siguiente código:             Res = zeros(1,11)
                                   aux = 11
   • Hay problemas por el          begin_parallel(400)
     acceso concurrente a          For j = 1:400
     la variable aux.                private idP = myId ()
                                     if (aux == 1)
                                           aux = aux + 10
                                     else
                                           aux = aux - 1
                                     end
                                     Res(aux) = Res(aux) +Mat(j)
                                   end_parallel

Clase 3 – Programación paralela                                     GPGPU




    Conceptos Básicos de Programación Paralela

   Diferentes formas de
      resolverlo:                 Res = zeros(1,11)
                                  aux = 11
   • Semáforos                    begin_parallel(400)
   • Zonas mutuo                  For j = 1:400
     excluidas                      private idP = myId ()
   • Operaciones atómicas           if (aux == 1)
                                          aux = aux + 10
                                    else
                                          aux = aux - 1
                                    end
                                    Res(aux) = Res(aux) +Mat(i,j)
                                  end_parallel

Clase 3 – Programación paralela                                     GPGPU




                                                                            10
Conceptos Básicos de Programación Paralela

                                       Res = zeros(1,11)
 Con zonas mutuo
                                       begin_parallel(400)
   excluidas
                                       For j = 1:400
                                          begin_mutex()
 Solo un “hilo de                         if (aux == 1)
   ejecución” entra en la                       aux = aux + 10
   zona.                                 else
                                                aux = aux - 1
                                          end
                                         Res(aux) = Res(aux) +Mat(aux,j)
                                         end_mutex()
                                       end_parallel


Clase 3 – Programación paralela                                          GPGPU




    Conceptos Básicos de Programación Paralela
                                       Res = zeros(1,11)
                                       begin_parallel(400)
 Con zonas mutuo                       private aux2
   excluidas y                         For j = 1:400
   operaciones atómicas                  begin_mutex()
                                          if (aux == 1)
                                                aux = aux + 10
                                         else
                                                aux = aux - 1
                                          end
                                          aux2=aux
                                         end_mutex()
                                         begin_atomic()
                                         Res(aux2) = Res(aux2) +Mat(aux2,j)
                                         end_atomic()
                                       end_parallel
Clase 3 – Programación paralela                                          GPGPU




    Conceptos Básicos de Programación Paralela

      Diferentes caminos dependiendo del thread (similar a zonas
                           mutuo excluidas)
                         begin_parallel(400)
                         For j = 1:400
                              private idP = myId ()
                              if (mod(idP,2) == 0)
                                    Mat(j) = Mat(j) + 4
                             else
                                    Mat(j) = Mat(j) + 2
                              end
                         end_parallel
   • Estrategia comúnmente utilizada para implementar el
     modelo de paralelismo Maestro-Esclavo: if soyMaestro()
Clase 3 – Programación paralela                                          GPGPU




                                                                                 11
Conceptos Básicos de Programación Paralela

   Conceptos vistos


   • Paralelismo
   • Estrategias de scheduling y balance de carga
   • Distribución de datos
   • Utilizar información del thread
   • Reducciones
   • Race conditions
   • Operaciones atómicas



Clase 3 – Programación paralela                                   GPGPU




    Conceptos Básicos de Programación Paralela

       Es conveniente tener en cuenta:


       • La importancia del scheduling, distribución de datos y
         control de sincronizaciones para un buen desempeño.


       • Si bien parece obvio, además de buen desempeño es
         necesario correctitud. Sin embargo, esto es más
         complejo de comprobar que en programas secuenciales.




Clase 3 – Programación paralela                                   GPGPU




                         Herramientas para GPU




Clase 3 – Programación paralela                                   GPGPU




                                                                          12
Compilación
                                        C/C++ CUDA
                                        Application


                                          NVCC           CPU Code



                                        PTX Code



                                    PTX to Target
                                        Compiler



                                  G80       …      GPU

                                    Target code
Clase 3 – Programación paralela                                     GPGPU




                                    Compilación

     Compilación:

                              nvcc algo.cu –o algo
                                 nvcc –c algo.cu

      Salidas:
          • Código C code (código del host)
               • Se compila con una herramienta tradicional
                 (automáticamente).
          • Código PTX
               • Directamente código objeto.
               • Para interpretar en tiempo de ejecución.
Clase 3 – Programación paralela                                     GPGPU




                                    Compilación

     Enlazado

     Los códigos CUDA requieren dos librerias dinámicas:
           • The CUDA runtime library (cudart)
                            #include <cuda_runtime_api.h>
           • The CUDA core library (cuda)
                            #include <cuda.h>



Clase 3 – Programación paralela                                     GPGPU




                                                                            13
Hello World

           #include <stdio.h>

           __global__ void kernel() {
           }


           int main( void ) {
               kernel<<<1,1>>>();
               printf( "Hello, World!n" );
               return 0;
           }




Clase 3 – Programación paralela                 GPGPU




                                                        14

Weitere ähnliche Inhalte

Andere mochten auch

Niilm cms placements 2013- cocoberry retail pvt ltd.
Niilm  cms placements 2013- cocoberry retail pvt ltd.Niilm  cms placements 2013- cocoberry retail pvt ltd.
Niilm cms placements 2013- cocoberry retail pvt ltd.sumit19342
 
21 November Daily Market Report
21 November Daily Market Report 21 November Daily Market Report
21 November Daily Market Report QNB Group
 
Pilot Fietsmodel Regio Utrecht
Pilot Fietsmodel Regio UtrechtPilot Fietsmodel Regio Utrecht
Pilot Fietsmodel Regio UtrechtHerbert Tiemens
 
ICT and Education. Cosa succede all'estero
ICT and Education. Cosa succede all'esteroICT and Education. Cosa succede all'estero
ICT and Education. Cosa succede all'esteroelena caldirola
 
Malaysian Higher Ed-UN Learning
Malaysian Higher Ed-UN LearningMalaysian Higher Ed-UN Learning
Malaysian Higher Ed-UN LearningWayne Hodgins
 
Presentatie NVC 2010 Herbert Tiemens
Presentatie NVC 2010 Herbert TiemensPresentatie NVC 2010 Herbert Tiemens
Presentatie NVC 2010 Herbert TiemensHerbert Tiemens
 
Trabjo de tic definitivo 2
Trabjo de tic definitivo 2Trabjo de tic definitivo 2
Trabjo de tic definitivo 2jjeronimoluis
 
HARDWARE - UNIDADES DE MEDIDA DE ALMACENAMIENTO Y PROCESAMIENTO
HARDWARE - UNIDADES DE MEDIDA DE ALMACENAMIENTO Y PROCESAMIENTOHARDWARE - UNIDADES DE MEDIDA DE ALMACENAMIENTO Y PROCESAMIENTO
HARDWARE - UNIDADES DE MEDIDA DE ALMACENAMIENTO Y PROCESAMIENTORurus9
 
Unidades de medida de almacenamiento y procesamiento
Unidades de medida de almacenamiento y procesamientoUnidades de medida de almacenamiento y procesamiento
Unidades de medida de almacenamiento y procesamientoCindy Gonzalez
 
Unidades de medida de almacenamiento de información
Unidades de medida de almacenamiento de informaciónUnidades de medida de almacenamiento de información
Unidades de medida de almacenamiento de informaciónKatherine Mejia
 
Super Cycleways in the Netherlands
Super Cycleways in the NetherlandsSuper Cycleways in the Netherlands
Super Cycleways in the NetherlandsHerbert Tiemens
 
Digitaal lesmateriaal.pptx
Digitaal lesmateriaal.pptxDigitaal lesmateriaal.pptx
Digitaal lesmateriaal.pptxena01
 

Andere mochten auch (12)

Niilm cms placements 2013- cocoberry retail pvt ltd.
Niilm  cms placements 2013- cocoberry retail pvt ltd.Niilm  cms placements 2013- cocoberry retail pvt ltd.
Niilm cms placements 2013- cocoberry retail pvt ltd.
 
21 November Daily Market Report
21 November Daily Market Report 21 November Daily Market Report
21 November Daily Market Report
 
Pilot Fietsmodel Regio Utrecht
Pilot Fietsmodel Regio UtrechtPilot Fietsmodel Regio Utrecht
Pilot Fietsmodel Regio Utrecht
 
ICT and Education. Cosa succede all'estero
ICT and Education. Cosa succede all'esteroICT and Education. Cosa succede all'estero
ICT and Education. Cosa succede all'estero
 
Malaysian Higher Ed-UN Learning
Malaysian Higher Ed-UN LearningMalaysian Higher Ed-UN Learning
Malaysian Higher Ed-UN Learning
 
Presentatie NVC 2010 Herbert Tiemens
Presentatie NVC 2010 Herbert TiemensPresentatie NVC 2010 Herbert Tiemens
Presentatie NVC 2010 Herbert Tiemens
 
Trabjo de tic definitivo 2
Trabjo de tic definitivo 2Trabjo de tic definitivo 2
Trabjo de tic definitivo 2
 
HARDWARE - UNIDADES DE MEDIDA DE ALMACENAMIENTO Y PROCESAMIENTO
HARDWARE - UNIDADES DE MEDIDA DE ALMACENAMIENTO Y PROCESAMIENTOHARDWARE - UNIDADES DE MEDIDA DE ALMACENAMIENTO Y PROCESAMIENTO
HARDWARE - UNIDADES DE MEDIDA DE ALMACENAMIENTO Y PROCESAMIENTO
 
Unidades de medida de almacenamiento y procesamiento
Unidades de medida de almacenamiento y procesamientoUnidades de medida de almacenamiento y procesamiento
Unidades de medida de almacenamiento y procesamiento
 
Unidades de medida de almacenamiento de información
Unidades de medida de almacenamiento de informaciónUnidades de medida de almacenamiento de información
Unidades de medida de almacenamiento de información
 
Super Cycleways in the Netherlands
Super Cycleways in the NetherlandsSuper Cycleways in the Netherlands
Super Cycleways in the Netherlands
 
Digitaal lesmateriaal.pptx
Digitaal lesmateriaal.pptxDigitaal lesmateriaal.pptx
Digitaal lesmateriaal.pptx
 

Ähnlich wie GPGPU Introducción Programación Paralela

Fundamentos de Programacion - Unidad 5 arreglos (vectores)
Fundamentos de Programacion - Unidad 5 arreglos (vectores)Fundamentos de Programacion - Unidad 5 arreglos (vectores)
Fundamentos de Programacion - Unidad 5 arreglos (vectores)José Antonio Sandoval Acosta
 
Fundamentos de Programación - Unidad IV: Arreglos (Vectores)
Fundamentos de Programación - Unidad IV: Arreglos (Vectores)Fundamentos de Programación - Unidad IV: Arreglos (Vectores)
Fundamentos de Programación - Unidad IV: Arreglos (Vectores)José Antonio Sandoval Acosta
 
Diseño eficiente de algoritmos Parallel Prefix sobre GPUs
Diseño eficiente de algoritmos Parallel Prefix sobre GPUsDiseño eficiente de algoritmos Parallel Prefix sobre GPUs
Diseño eficiente de algoritmos Parallel Prefix sobre GPUsFacultad de Informática UCM
 
Unidad 2 introducción a los algoritmos
Unidad 2 introducción a los algoritmosUnidad 2 introducción a los algoritmos
Unidad 2 introducción a los algoritmosAlexandra Ochoa
 
Unidad 1 Introducción a los Algoritmos.ppt
Unidad 1 Introducción a los Algoritmos.pptUnidad 1 Introducción a los Algoritmos.ppt
Unidad 1 Introducción a los Algoritmos.pptssuser6eba56
 
Manual algoritmos y_estructura_de_datos
Manual algoritmos y_estructura_de_datosManual algoritmos y_estructura_de_datos
Manual algoritmos y_estructura_de_datosJuan Timoteo Cori
 
Diseño de Algoritmos Paralelos.pptx
Diseño de Algoritmos Paralelos.pptxDiseño de Algoritmos Paralelos.pptx
Diseño de Algoritmos Paralelos.pptxyadhirafelizfajardo
 
3 programacion estructurada
3 programacion estructurada3 programacion estructurada
3 programacion estructuradacortezbfajardo
 
Ing. Mecatronica Prog. Básica U4 Arreglos y estructuras
Ing. Mecatronica Prog. Básica U4 Arreglos y estructurasIng. Mecatronica Prog. Básica U4 Arreglos y estructuras
Ing. Mecatronica Prog. Básica U4 Arreglos y estructurasJosé Antonio Sandoval Acosta
 
Estructura de datos Algorítmica
Estructura de datos Algorítmica Estructura de datos Algorítmica
Estructura de datos Algorítmica MarianoBobadilla
 
FdP_Diapositivas_2018
FdP_Diapositivas_2018FdP_Diapositivas_2018
FdP_Diapositivas_2018ead1943
 
Análisis de algoritmo
Análisis de algoritmoAnálisis de algoritmo
Análisis de algoritmoGaston Demundo
 
Paper Mmulfpuna Mpi Cparra Fmancia
Paper Mmulfpuna Mpi Cparra FmanciaPaper Mmulfpuna Mpi Cparra Fmancia
Paper Mmulfpuna Mpi Cparra FmanciaFcoKraken
 
Paper Mmulfpuna Mpi Cparra Fmancia
Paper Mmulfpuna Mpi Cparra FmanciaPaper Mmulfpuna Mpi Cparra Fmancia
Paper Mmulfpuna Mpi Cparra FmanciaFcoKraken
 
ALP Unidad 3: Tipos de datos estructurados y punteros
ALP Unidad 3: Tipos de datos estructurados y punterosALP Unidad 3: Tipos de datos estructurados y punteros
ALP Unidad 3: Tipos de datos estructurados y punterosFranklin Parrales Bravo
 

Ähnlich wie GPGPU Introducción Programación Paralela (20)

Fundamentos de Programacion - Unidad 5 arreglos (vectores)
Fundamentos de Programacion - Unidad 5 arreglos (vectores)Fundamentos de Programacion - Unidad 5 arreglos (vectores)
Fundamentos de Programacion - Unidad 5 arreglos (vectores)
 
Fundamentos de Programación - Unidad IV: Arreglos (Vectores)
Fundamentos de Programación - Unidad IV: Arreglos (Vectores)Fundamentos de Programación - Unidad IV: Arreglos (Vectores)
Fundamentos de Programación - Unidad IV: Arreglos (Vectores)
 
Diseño eficiente de algoritmos Parallel Prefix sobre GPUs
Diseño eficiente de algoritmos Parallel Prefix sobre GPUsDiseño eficiente de algoritmos Parallel Prefix sobre GPUs
Diseño eficiente de algoritmos Parallel Prefix sobre GPUs
 
Unidad 2 introducción a los algoritmos
Unidad 2 introducción a los algoritmosUnidad 2 introducción a los algoritmos
Unidad 2 introducción a los algoritmos
 
Aritmetica
AritmeticaAritmetica
Aritmetica
 
Unidad 1 Introducción a los Algoritmos.ppt
Unidad 1 Introducción a los Algoritmos.pptUnidad 1 Introducción a los Algoritmos.ppt
Unidad 1 Introducción a los Algoritmos.ppt
 
analisis de los algoritmos
analisis de los algoritmosanalisis de los algoritmos
analisis de los algoritmos
 
Manual algoritmos y_estructura_de_datos
Manual algoritmos y_estructura_de_datosManual algoritmos y_estructura_de_datos
Manual algoritmos y_estructura_de_datos
 
Manual estructura de_datos_2010___h._caselli_g
Manual estructura de_datos_2010___h._caselli_gManual estructura de_datos_2010___h._caselli_g
Manual estructura de_datos_2010___h._caselli_g
 
Diseño de Algoritmos Paralelos.pptx
Diseño de Algoritmos Paralelos.pptxDiseño de Algoritmos Paralelos.pptx
Diseño de Algoritmos Paralelos.pptx
 
3 programacion estructurada
3 programacion estructurada3 programacion estructurada
3 programacion estructurada
 
Ing. Mecatronica Prog. Básica U4 Arreglos y estructuras
Ing. Mecatronica Prog. Básica U4 Arreglos y estructurasIng. Mecatronica Prog. Básica U4 Arreglos y estructuras
Ing. Mecatronica Prog. Básica U4 Arreglos y estructuras
 
Complejidad de Algoritmos
Complejidad de AlgoritmosComplejidad de Algoritmos
Complejidad de Algoritmos
 
Complejidad Computacional
Complejidad ComputacionalComplejidad Computacional
Complejidad Computacional
 
Estructura de datos Algorítmica
Estructura de datos Algorítmica Estructura de datos Algorítmica
Estructura de datos Algorítmica
 
FdP_Diapositivas_2018
FdP_Diapositivas_2018FdP_Diapositivas_2018
FdP_Diapositivas_2018
 
Análisis de algoritmo
Análisis de algoritmoAnálisis de algoritmo
Análisis de algoritmo
 
Paper Mmulfpuna Mpi Cparra Fmancia
Paper Mmulfpuna Mpi Cparra FmanciaPaper Mmulfpuna Mpi Cparra Fmancia
Paper Mmulfpuna Mpi Cparra Fmancia
 
Paper Mmulfpuna Mpi Cparra Fmancia
Paper Mmulfpuna Mpi Cparra FmanciaPaper Mmulfpuna Mpi Cparra Fmancia
Paper Mmulfpuna Mpi Cparra Fmancia
 
ALP Unidad 3: Tipos de datos estructurados y punteros
ALP Unidad 3: Tipos de datos estructurados y punterosALP Unidad 3: Tipos de datos estructurados y punteros
ALP Unidad 3: Tipos de datos estructurados y punteros
 

Mehr von Xavier Davias

Metodos numericos-3-1212530740013750-9
Metodos numericos-3-1212530740013750-9Metodos numericos-3-1212530740013750-9
Metodos numericos-3-1212530740013750-9Xavier Davias
 
Heckbert p s__adaptive_radiosity_textures_for_bidirectional_r
Heckbert p s__adaptive_radiosity_textures_for_bidirectional_rHeckbert p s__adaptive_radiosity_textures_for_bidirectional_r
Heckbert p s__adaptive_radiosity_textures_for_bidirectional_rXavier Davias
 
Fourier transforms & fft algorithm (paul heckbert, 1998) by tantanoid
Fourier transforms & fft algorithm (paul heckbert, 1998) by tantanoidFourier transforms & fft algorithm (paul heckbert, 1998) by tantanoid
Fourier transforms & fft algorithm (paul heckbert, 1998) by tantanoidXavier Davias
 
Systems interfacesanddeployment
Systems interfacesanddeploymentSystems interfacesanddeployment
Systems interfacesanddeploymentXavier Davias
 
Oracle b tree index internals - rebuilding the thruth
Oracle b tree index internals - rebuilding the thruthOracle b tree index internals - rebuilding the thruth
Oracle b tree index internals - rebuilding the thruthXavier Davias
 
Simulacion sistemas tema6pr-2
Simulacion sistemas tema6pr-2Simulacion sistemas tema6pr-2
Simulacion sistemas tema6pr-2Xavier Davias
 
El hombre anumerico john allen paulos
El hombre anumerico  john allen paulosEl hombre anumerico  john allen paulos
El hombre anumerico john allen paulosXavier Davias
 

Mehr von Xavier Davias (20)

Metodos numericos-3-1212530740013750-9
Metodos numericos-3-1212530740013750-9Metodos numericos-3-1212530740013750-9
Metodos numericos-3-1212530740013750-9
 
Heckbert p s__adaptive_radiosity_textures_for_bidirectional_r
Heckbert p s__adaptive_radiosity_textures_for_bidirectional_rHeckbert p s__adaptive_radiosity_textures_for_bidirectional_r
Heckbert p s__adaptive_radiosity_textures_for_bidirectional_r
 
Fourier transforms & fft algorithm (paul heckbert, 1998) by tantanoid
Fourier transforms & fft algorithm (paul heckbert, 1998) by tantanoidFourier transforms & fft algorithm (paul heckbert, 1998) by tantanoid
Fourier transforms & fft algorithm (paul heckbert, 1998) by tantanoid
 
03.problemas
03.problemas03.problemas
03.problemas
 
Systems interfacesanddeployment
Systems interfacesanddeploymentSystems interfacesanddeployment
Systems interfacesanddeployment
 
Oracle b tree index internals - rebuilding the thruth
Oracle b tree index internals - rebuilding the thruthOracle b tree index internals - rebuilding the thruth
Oracle b tree index internals - rebuilding the thruth
 
Sistemas temaii 5
Sistemas temaii 5Sistemas temaii 5
Sistemas temaii 5
 
Simulacion sistemas tema6pr-2
Simulacion sistemas tema6pr-2Simulacion sistemas tema6pr-2
Simulacion sistemas tema6pr-2
 
El hombre anumerico john allen paulos
El hombre anumerico  john allen paulosEl hombre anumerico  john allen paulos
El hombre anumerico john allen paulos
 
Cap04
Cap04Cap04
Cap04
 
Cap2
Cap2Cap2
Cap2
 
Cap1
Cap1Cap1
Cap1
 
Aic multiproc
Aic multiprocAic multiproc
Aic multiproc
 
Aa
AaAa
Aa
 
08 0300 cs
08 0300 cs08 0300 cs
08 0300 cs
 
Cp223
Cp223Cp223
Cp223
 
Cap04
Cap04Cap04
Cap04
 
Ejercicios tema7
Ejercicios tema7Ejercicios tema7
Ejercicios tema7
 
Ejercicios tema6
Ejercicios tema6Ejercicios tema6
Ejercicios tema6
 
Ejercicios tema5
Ejercicios tema5Ejercicios tema5
Ejercicios tema5
 

GPGPU Introducción Programación Paralela

  • 1. Computación de Propósito General en Unidades de Procesamiento Gráfico (GPGPU) E. Dufrechou, P. Ezzatti y M. Pedemonte Dufrechou, Clase 3 – Programación paralela GPGPU Clases 3 Programación paralela Clase 3 – Programación paralela GPGPU Contenido • Conceptos básicos de programación paralela • Herramientas para GPU (básico) – Compilación – Hello world Clase 3 – Programación paralela GPGPU 1
  • 2. Conceptos básicos de Programación Paralela Clase 3 – Programación paralela GPGPU Conceptos Básicos de Programación Paralela • Múltiples unidades de cómputo trabajando en forma coordinada • Comunicación • Sincronización • División • De tareas • De datos Clase 3 – Programación paralela GPGPU Conceptos Básicos de Programación Paralela • Paralelismo de • Memoria compartida (multi-core) • Memoria distribuida (cluster) • Contexto • Homogéneo • Heterogéneo • Balance de carga Clase 3 – Programación paralela GPGPU 2
  • 3. Conceptos Básicos de Programación Paralela En este caso: • Muchas unidades de cómputo trabajando en forma coordinada. • División de datos. • Paralelismo “similar” a paralelismo a memoria compartida (multi-core). • Unidades de procesamiento homogéneas. Clase 3 – Programación paralela GPGPU Conceptos Básicos de Programación Paralela En los ejemplos que se verán a continuación: • Se utilizará una sintaxis inspirada en la de Matlab. • El código escrito en color negro ejecuta en forma secuencial. • El código escrito en color azul indica palabras reservadas que son directivas para el manejo de paralelismo. • El código escrito en color rojo indica el punto de ramificación del paralelismo. • El código escrito en color verde es el código que es ejecutado en forma paralela por cada una de las unidades de procesamiento. Clase 3 – Programación paralela GPGPU Conceptos Básicos de Programación Paralela Ejemplo 0: • Se tiene una matriz con 4 columnas y se quiere obtener la suma por columnas de la matriz. • Se dispone de una única unidad de procesamiento. Clase 3 – Programación paralela GPGPU 3
  • 4. Conceptos Básicos de Programación Paralela Ejemplo 0: Res = zeros(1,4) [m,n] = size(Mat) For j = 1:4 For i = 1 : m Res(j) = Res(j) + Mat(i,j) Clase 3 – Programación paralela GPGPU Conceptos Básicos de Programación Paralela Ejemplo 1: • Se tiene una matriz con 4 columnas y se quiere obtener la suma por columnas de la matriz. • Se dispone de cuatro unidades de procesamiento. Clase 3 – Programación paralela GPGPU Conceptos Básicos de Programación Paralela Ejemplo 1: Res = zeros(1,4) [m,n] = size(Mat) begin_parallel(4) For j = 1:4 For i = 1 : m Res(j) = Res(j) + Mat(i,j) end_parallel Clase 3 – Programación paralela GPGPU 4
  • 5. Conceptos Básicos de Programación Paralela Ejemplo 2: • Se tiene una matriz con 400 columnas y se quiere obtener la suma por columnas de la matriz. • Se dispone de cuatro unidades de procesamiento. Clase 3 – Programación paralela GPGPU Conceptos Básicos de Programación Paralela Ejemplo 2: Res = zeros(1,400) [m,n] = size(Mat) begin_parallel(4) For j = 1:400 For i = 1 : m Res(j) = Res(j) + Mat(i,j) end_parallel Clase 3 – Programación paralela GPGPU Conceptos Básicos de Programación Paralela Ejemplo 3: • Se tiene una matriz con 400 columnas y se quiere obtener la suma por columnas de la matriz. • Se sabe que el trabajo para realizar la suma de una columna es irregular (por ejemplo, sumar 0 es menos costoso computacionalmente que sumar otro número). • Se dispone de cuatro unidades de procesamiento. Clase 3 – Programación paralela GPGPU 5
  • 6. Conceptos Básicos de Programación Paralela Distribución de datos Distribución por bloque Distribución cíclica Clase 3 – Programación paralela GPGPU Conceptos Básicos de Programación Paralela Ejemplo 3: • Es posible achicar el tamaño de los bloques. • Por ejemplo: de 100 columnas pasar a 10 columnas por bloque. Res = zeros(1,400) [m,n] = size(Mat) begin_parallel(40) For j = 1:400 For i = 1 : m Res(j) = Res(j) + Mat(i,j) end_parallel Clase 3 – Programación paralela GPGPU Conceptos Básicos de Programación Paralela Ejemplo 4: • Se tiene una matriz con 400 columnas y se quiere obtener la suma por columnas de la matriz. • Se sabe que el trabajo para realizar la suma de una columna es irregular (por ejemplo, sumar 0 es menos costoso computacionalmente que sumar otro número). • Se dispone de cuatro unidades de procesamiento. • En este caso, además se quiere obtener la suma parcial por unidad de procesamiento. Clase 3 – Programación paralela GPGPU 6
  • 7. Conceptos Básicos de Programación Paralela Ejemplo 4: Clase 3 – Programación paralela GPGPU Conceptos Básicos de Programación Paralela Ejemplo 4: Res = zeros(1,400) Res2 = zeros(1,4) [m,n] = size(Mat) begin_parallel(40) For j = 1:400 private idP = myId() For i = 1 : m Res(j) = Res(j) + Mat(i,j) Res2(idP) = Res2(idP) + Res(j) end_parallel Clase 3 – Programación paralela GPGPU Conceptos Básicos de Programación Paralela Ejemplo 5: • Se tiene una matriz con 400 columnas y se quiere obtener la suma de todos los elementos de la matriz. • Se dispone de cuatro unidades de procesamiento. Clase 3 – Programación paralela GPGPU 7
  • 8. Conceptos Básicos de Programación Paralela Solución 1 • Se suma por columna • Luego se suma todo el vector intermedio Clase 3 – Programación paralela GPGPU Conceptos Básicos de Programación Paralela Solución 1 • Se suma por columna y luego se suma el vector intermedio. Res = zeros(1,400) [m,n] = size(Mat) begin_parallel(4) For j = 1:400 For i = 1 : m Res(j) = Res(j) + Mat(i,j) end_parallel For j = 1:400 Sum = Sum + Res(j) Clase 3 – Programación paralela GPGPU Conceptos Básicos de Programación Paralela Solución 2 • Se suma por columnas para cada unidad de procesamiento. • Luego se suma el vector intermedio. Clase 3 – Programación paralela GPGPU 8
  • 9. Conceptos Básicos de Programación Paralela Solución 2 Res = zeros(1,4) • Se suma por columnas [m,n] = size(Mat) para cada unidad de begin_parallel(4) procesamiento y luego For j = 1:400 se suma el vector private idP = myId () intermedio. For i = 1 : m Res(idP) = Res(idP) + Mat(i,j) end_parallel For j = 1:4 Sum = Sum + Res(j) Clase 3 – Programación paralela GPGPU Conceptos Básicos de Programación Paralela Solución 3 Res = zeros(1,4) • Sumo por columna [m,n] = size(Mat) y actualizo el begin_parallel(4) resultado. For j = 1:400 private idP = myId () For i = 1 : m • Concepto de Res(idP) = Res(idP) + Mat(i,j) reduce end_parallel begin_parallel(2) For j = 1:4 Sum = Sum + Res(j) end_parallel Clase 3 – Programación paralela GPGPU Conceptos Básicos de Programación Paralela Race condition: Res = zeros(1,4) - Los hilos compiten por [m,n] = size(Mat) el acceso a los begin_parallel(4) registros. For j = 1:400 - Pueden haber distintos private idP = myId () ordenes de ejecución. For i = 1 : m Res(idP) = Res(idP) +Mat(i,j) - Distinto orden de end_parallel ejecución produce resultados begin_parallel(2) diferentes!!! For j = 1:4 Sum = Sum + Res(j) - Este problema también aparece en circuitos end_parallel electrónicos, base de datos, etc. Clase 3 – Programación paralela GPGPU 9
  • 10. Conceptos Básicos de Programación Paralela Reduce: [m,n] = size(Mat) - Generalmente están begin_parallel(4) disponibles diversas private Res operaciones: For j = 1:400 • + %private idP = myId () • * For i = 1 : m Res = Res + Mat(i,j) • min end_parallel (reduce(+,Res)) • max Clase 3 – Programación paralela GPGPU Conceptos Básicos de Programación Paralela Consideremos el siguiente código: Res = zeros(1,11) aux = 11 • Hay problemas por el begin_parallel(400) acceso concurrente a For j = 1:400 la variable aux. private idP = myId () if (aux == 1) aux = aux + 10 else aux = aux - 1 end Res(aux) = Res(aux) +Mat(j) end_parallel Clase 3 – Programación paralela GPGPU Conceptos Básicos de Programación Paralela Diferentes formas de resolverlo: Res = zeros(1,11) aux = 11 • Semáforos begin_parallel(400) • Zonas mutuo For j = 1:400 excluidas private idP = myId () • Operaciones atómicas if (aux == 1) aux = aux + 10 else aux = aux - 1 end Res(aux) = Res(aux) +Mat(i,j) end_parallel Clase 3 – Programación paralela GPGPU 10
  • 11. Conceptos Básicos de Programación Paralela Res = zeros(1,11) Con zonas mutuo begin_parallel(400) excluidas For j = 1:400 begin_mutex() Solo un “hilo de if (aux == 1) ejecución” entra en la aux = aux + 10 zona. else aux = aux - 1 end Res(aux) = Res(aux) +Mat(aux,j) end_mutex() end_parallel Clase 3 – Programación paralela GPGPU Conceptos Básicos de Programación Paralela Res = zeros(1,11) begin_parallel(400) Con zonas mutuo private aux2 excluidas y For j = 1:400 operaciones atómicas begin_mutex() if (aux == 1) aux = aux + 10 else aux = aux - 1 end aux2=aux end_mutex() begin_atomic() Res(aux2) = Res(aux2) +Mat(aux2,j) end_atomic() end_parallel Clase 3 – Programación paralela GPGPU Conceptos Básicos de Programación Paralela Diferentes caminos dependiendo del thread (similar a zonas mutuo excluidas) begin_parallel(400) For j = 1:400 private idP = myId () if (mod(idP,2) == 0) Mat(j) = Mat(j) + 4 else Mat(j) = Mat(j) + 2 end end_parallel • Estrategia comúnmente utilizada para implementar el modelo de paralelismo Maestro-Esclavo: if soyMaestro() Clase 3 – Programación paralela GPGPU 11
  • 12. Conceptos Básicos de Programación Paralela Conceptos vistos • Paralelismo • Estrategias de scheduling y balance de carga • Distribución de datos • Utilizar información del thread • Reducciones • Race conditions • Operaciones atómicas Clase 3 – Programación paralela GPGPU Conceptos Básicos de Programación Paralela Es conveniente tener en cuenta: • La importancia del scheduling, distribución de datos y control de sincronizaciones para un buen desempeño. • Si bien parece obvio, además de buen desempeño es necesario correctitud. Sin embargo, esto es más complejo de comprobar que en programas secuenciales. Clase 3 – Programación paralela GPGPU Herramientas para GPU Clase 3 – Programación paralela GPGPU 12
  • 13. Compilación C/C++ CUDA Application NVCC CPU Code PTX Code PTX to Target Compiler G80 … GPU Target code Clase 3 – Programación paralela GPGPU Compilación Compilación: nvcc algo.cu –o algo nvcc –c algo.cu Salidas: • Código C code (código del host) • Se compila con una herramienta tradicional (automáticamente). • Código PTX • Directamente código objeto. • Para interpretar en tiempo de ejecución. Clase 3 – Programación paralela GPGPU Compilación Enlazado Los códigos CUDA requieren dos librerias dinámicas: • The CUDA runtime library (cudart) #include <cuda_runtime_api.h> • The CUDA core library (cuda) #include <cuda.h> Clase 3 – Programación paralela GPGPU 13
  • 14. Hello World #include <stdio.h> __global__ void kernel() { } int main( void ) { kernel<<<1,1>>>(); printf( "Hello, World!n" ); return 0; } Clase 3 – Programación paralela GPGPU 14