universidad nacional autÓnoma de mÉxico facultad de...
TRANSCRIPT
![Page 1: UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Facultad de ...lcomp89.fi-b.unam.mx/licad/assets/CUDA/04_Matrices.pdf · 07_matrices_02.cu 08_matrices_03.cu Ejercicio: Hacer un programa](https://reader034.vdocuments.net/reader034/viewer/2022050104/5f428814483755283a37ceba/html5/thumbnails/1.jpg)
UNIVERSIDAD NACIONAL AUTÓNOMA DE
MÉXICO
Facultad de IngenieríaIntroducción a CUDA C
Laboratorio de Intel para la Academia y
Cómputo de alto desempeño
Elaboran: Ariel Ulloa TrejoFernando Pérez Franco
Revisión: Ing. Laura Sandoval Montaño
![Page 2: UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Facultad de ...lcomp89.fi-b.unam.mx/licad/assets/CUDA/04_Matrices.pdf · 07_matrices_02.cu 08_matrices_03.cu Ejercicio: Hacer un programa](https://reader034.vdocuments.net/reader034/viewer/2022050104/5f428814483755283a37ceba/html5/thumbnails/2.jpg)
Temario
1.Antecedentes2.El GPU3.Funciones y vectores4.Manejo de matrices5.Memoria compartida
![Page 3: UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Facultad de ...lcomp89.fi-b.unam.mx/licad/assets/CUDA/04_Matrices.pdf · 07_matrices_02.cu 08_matrices_03.cu Ejercicio: Hacer un programa](https://reader034.vdocuments.net/reader034/viewer/2022050104/5f428814483755283a37ceba/html5/thumbnails/3.jpg)
4 MatricesErrores
Vimos en las funcionespasadas que regresan un valorcudaError_t.Éste es usado para detectarerrores; si la ejecución fueexitosa, regresa uncudaSucces. En otro caso, elcódigo del error seráregresado.
Para poder leer los códigos delos errores, usamoscudaGetErrorString().cudaGetLastError() envía elúltimo error. Si hubo uno antesde éste, no es reportado.
![Page 4: UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Facultad de ...lcomp89.fi-b.unam.mx/licad/assets/CUDA/04_Matrices.pdf · 07_matrices_02.cu 08_matrices_03.cu Ejercicio: Hacer un programa](https://reader034.vdocuments.net/reader034/viewer/2022050104/5f428814483755283a37ceba/html5/thumbnails/4.jpg)
Como los kernels sonasíncronos, es necesariobloquear la ejecución hastaque el dispositivo hayaterminado su trabajo. Paraesto utilizamos la funcióncudaDeviceSynchronice().
Errores comunes:
Utilizar variables en unsegmento de código donde noexisten.La configuración de ejecuciónes inválida.
05_errores_01.cu
![Page 5: UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Facultad de ...lcomp89.fi-b.unam.mx/licad/assets/CUDA/04_Matrices.pdf · 07_matrices_02.cu 08_matrices_03.cu Ejercicio: Hacer un programa](https://reader034.vdocuments.net/reader034/viewer/2022050104/5f428814483755283a37ceba/html5/thumbnails/5.jpg)
Más de grids, bloques e hilos:
CUDA permite la ejecución degrids compuestos por bloqueshasta de 3 dimensiones, y a suvez, cada bloque compuestopor hilos en 3d.Para hacerlo, utilizamos dim3(para encapsular datosmultidimensionales).
![Page 6: UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Facultad de ...lcomp89.fi-b.unam.mx/licad/assets/CUDA/04_Matrices.pdf · 07_matrices_02.cu 08_matrices_03.cu Ejercicio: Hacer un programa](https://reader034.vdocuments.net/reader034/viewer/2022050104/5f428814483755283a37ceba/html5/thumbnails/6.jpg)
Kernel<<<dim3(Ax, Ay, Az), dim3(Bx,By,Bz)>>>()
Kernel<<<dim3(10, 32), dim3(10, 10)>>>()
En caso de que una dimensión no sea especificada, es reemplazada automáticamente por 1.
![Page 7: UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Facultad de ...lcomp89.fi-b.unam.mx/licad/assets/CUDA/04_Matrices.pdf · 07_matrices_02.cu 08_matrices_03.cu Ejercicio: Hacer un programa](https://reader034.vdocuments.net/reader034/viewer/2022050104/5f428814483755283a37ceba/html5/thumbnails/7.jpg)
Ejemplo:
Una matriz de 6x6 es mapeada en un arreglo de 36 elementos.El objetivo es dividir la matriz en 4 bloques de 3x3 y el kernelsumará a cada elemento el primero de cada bloque. Elresultado se guarda en otra matriz del mismo tamaño.
Consideremos dos datos:
BLOCK_SIZE = 3 (longitud de cadabloque)STRIDE = 6 (longitud de la matrizcompleta)
![Page 8: UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Facultad de ...lcomp89.fi-b.unam.mx/licad/assets/CUDA/04_Matrices.pdf · 07_matrices_02.cu 08_matrices_03.cu Ejercicio: Hacer un programa](https://reader034.vdocuments.net/reader034/viewer/2022050104/5f428814483755283a37ceba/html5/thumbnails/8.jpg)
En el dispositivo, cadapequeño bloque serámapeado en un bloque dentrodel grid y para cada operación,existirá un hilo. Por lo tantoexisten tantos hilos comoelementos de la matriz.
La configuración de laejecución será, por lo tanto:
dim3 ThreadsBlocks( 3, 3 );
dim3 GridBlocks( 2 , 2);
![Page 9: UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Facultad de ...lcomp89.fi-b.unam.mx/licad/assets/CUDA/04_Matrices.pdf · 07_matrices_02.cu 08_matrices_03.cu Ejercicio: Hacer un programa](https://reader034.vdocuments.net/reader034/viewer/2022050104/5f428814483755283a37ceba/html5/thumbnails/9.jpg)
El truco está en generar losíndices viendo a la memoriacomo un arreglo de 36 en lugarde una matriz de 6x6.
Los índices de los valores a sumar son entonces:
{0, 3, 18, 21}
![Page 10: UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Facultad de ...lcomp89.fi-b.unam.mx/licad/assets/CUDA/04_Matrices.pdf · 07_matrices_02.cu 08_matrices_03.cu Ejercicio: Hacer un programa](https://reader034.vdocuments.net/reader034/viewer/2022050104/5f428814483755283a37ceba/html5/thumbnails/10.jpg)
Para asignar los índices de cada elemento de la matriz a los hilos:int bx = blockIdx.x;int by = blockidx.y;Int tx = threadIdx.x;Int ty = threadIdx.y;d_a[ (by * BLOCK_SIZE + ty) * STRIDE + (bx * BLOCKSIZE + tx)
];Para encontrar el elemento que se sumará a cada uno,simplemente cambiamos el índice del hilo a 0:
06_matrices_01.cu
![Page 11: UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Facultad de ...lcomp89.fi-b.unam.mx/licad/assets/CUDA/04_Matrices.pdf · 07_matrices_02.cu 08_matrices_03.cu Ejercicio: Hacer un programa](https://reader034.vdocuments.net/reader034/viewer/2022050104/5f428814483755283a37ceba/html5/thumbnails/11.jpg)
Ejemplo: Programa que sumados matrices cuadradas.
07_matrices_02.cu 08_matrices_03.cu
Ejercicio: Hacer un programaque sume dos matricescuadradas de 250x250.
![Page 12: UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Facultad de ...lcomp89.fi-b.unam.mx/licad/assets/CUDA/04_Matrices.pdf · 07_matrices_02.cu 08_matrices_03.cu Ejercicio: Hacer un programa](https://reader034.vdocuments.net/reader034/viewer/2022050104/5f428814483755283a37ceba/html5/thumbnails/12.jpg)
Ejemplo: Programa que hace latranspuesta de una matrizpequeña.
Ejercicio: Programa queobtiene la transpuesta de unamatriz grande.
09_matrices_04.cu 10_matrices_05.cu
![Page 13: UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO Facultad de ...lcomp89.fi-b.unam.mx/licad/assets/CUDA/04_Matrices.pdf · 07_matrices_02.cu 08_matrices_03.cu Ejercicio: Hacer un programa](https://reader034.vdocuments.net/reader034/viewer/2022050104/5f428814483755283a37ceba/html5/thumbnails/13.jpg)