SlideShare uma empresa Scribd logo
1 de 30
Multiplicação de Matrizes em CUDA Divino César SoaresPontifícia Universidade Católica de Goiás (CMP/PUC-GO)
O Problema ,[object Object]
 Gerar uma matriz resultado C com as mesmas dimensões das matrizes A e B.
 Cada elemento (i, j) da matriz C é o produto (interno) da linha i de A pela coluna j de B.
 Para cada elemento (i, j) de C:for (k=1; k<=LARGURA; k++) 	C[i][j] += (A[i][k] * B[k][j]);
Implementação Sequencial void multiplica(int *A[], int *B[], int *C[]) { for (int i=1; i<=LARGURA; i++) { for (int j=1; j<=LARGURA; j++) { for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } } } 1 2 3 4 ,[object Object],L = 4 	i  = 1 	j  = 1 	k = 1 4 1 2 3
Implementação Sequencial void multiplica(int *A[], int *B[], int *C[]) { for (int i=1; i<=LARGURA; i++) { for (int j=1; j<=LARGURA; j++) { for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } } } 1 2 3 4 ,[object Object],L = 4 	i  = 1 	j  = 1 	k = 2 4 1 2 3
Implementação Sequencial void multiplica(int *A[], int *B[], int *C[]) { for (int i=1; i<=LARGURA; i++) { for (int j=1; j<=LARGURA; j++) { for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } } } 1 2 3 4 ,[object Object],L = 4 	i  = 1 	j  = 1 	k = 3 4 1 2 3
Implementação Sequencial void multiplica(int *A[], int *B[], int *C[]) { for (int i=1; i<=LARGURA; i++) { for (int j=1; j<=LARGURA; j++) { for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } } } 1 2 3 4 ,[object Object],L = 4 	i  = 1 	j  = 1 	k = 4 4 1 2 3
Implementação Sequencial void multiplica(int *A[], int *B[], int *C[]) { for (int i=1; i<=LARGURA; i++) { for (int j=1; j<=LARGURA; j++) { for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } } } 1 2 3 4 ,[object Object],L = 4 	i  = 1 	j  = 2 	k = 1 4 1 2 3
Implementação Sequencial void multiplica(int *A[], int *B[], int *C[]) { for (int i=1; i<=LARGURA; i++) { for (int j=1; j<=LARGURA; j++) { for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } } } 1 2 3 4 ,[object Object],L = 4 	i  = 1 	j  = 2 	k = 2 4 1 2 3
Implementação Sequencial void multiplica(int *A[], int *B[], int *C[]) { for (int i=1; i<=LARGURA; i++) { for (int j=1; j<=LARGURA; j++) { for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } } } 1 2 3 4 ,[object Object],L = 4 	i  = 1 	j  = 2 	k = 3 4 1 2 3
Implementação Sequencial void multiplica(int *A[], int *B[], int *C[]) { for (int i=1; i<=LARGURA; i++) { for (int j=1; j<=LARGURA; j++) { for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } } } 1 2 3 4 ,[object Object],L = 4 	i  = 1 	j  = 2 	k = 4 4 1 2 3
Estrutura da Solução Alocar memória na GPU. Copia dados de entrada. Da CPU para a GPU. Configura execução. Número de threads e blocos. Copia resultados.  cudaMalloc((void **)&A_d, size_A); cudaMalloc((void**)&B_d, size_B); cudaMalloc((void**)&C_d, size_C); cudaMemcpy(A_d, A, size_A, cudaMemcpyHostToDevice); cudaMemcpy(B_d, B, size_B , cudaMemcpyHostToDevice); cudaMemcpy(C_d, C, size_C , cudaMemcpyHostToDevice); dim3 gride(X, Y)dim3 bloco(Z, W, K)meu_kernel<<<gride, bloco>>>(A, B, C); cudaMemcpy(C, C_d, size_C , cudaMemcpyDeviceToHost);
Primeira Abordagem
Kernel 1 dim3 gride(1, 1) dim3 bloco(4, 4, 1) dim3 gride(2, 1) dim3 bloco(4, 4, 1) dim3 gride(1, 1) dim3 bloco(30, 30, 1) Gride Gride Gride << Launcherror >>> Bloco com 600 threads Bloco 0 Bloco 0 Bloco 1
Kernel 1 dim3 gride(1, 1) dim3 bloco(LARGURA, LARGURA, 1) Gride LARGURA LARGURA Bloco 0
Kernel 1 dim3 gride(1, 1) dim3 bloco(LARGURA, LARGURA, 1) Gride __global__voidmulGpu(int *A[], int *B[], int *C[]) { int i = threadIdx.x; int j = threadIdx.y; for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } LARGURA LARGURA Bloco 0 Kernel 1: Multiplicação na GPU
Kernel 1 1 Instante de tempo t=0 2 __global__voidmulGpu(int *A[], int *B[], int *C[]) { int i = threadIdx.x; int j = threadIdx.y; for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } 3 4 Kernel 1: Multiplicação na GPU 4 1 2 3
Kernel 1 1 Instante de tempo t=1 2 __global__voidmulGpu(int *A[], int *B[], int *C[]) { int i = threadIdx.x; int j = threadIdx.y; for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } 3 4 Kernel 1: Multiplicação na GPU 4 1 2 3
Kernel 1 1 Instante de tempo t=2 2 __global__voidmulGpu(int *A[], int *B[], int *C[]) { int i = threadIdx.x; int j = threadIdx.y; for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } 3 4 Kernel 1: Multiplicação na GPU 4 1 2 3
Kernel 1 1 Instante de tempo t=L 2 __global__voidmulGpu(int *A[], int *B[], int *C[]) { int i = threadIdx.x; int j = threadIdx.y; for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } 3 4 Kernel 1: Multiplicação na GPU 4 1 2 3
Vantagens/Desvantagens ,[object Object],cada elemento de C é calculado em paralelo.  ,[object Object],Restrição do formato das matrizes. Elas devem ser quadradas.  Restrição da quantidade de elementos em cada matriz. Menor que 512.  Usa apenas a memória global da GPU. A memória global apresenta grande latência.  Apenas um bloco de threads, com poucas threads. Tamanho do maior bloco 22 x 22.  Os mesmos dados são buscados várias vezes da memória.  Resultado: Subutilização dos recursos da GPU.
Segunda Abordagem
Kernel 2 dim3 gride(2, 2) dim3 bloco(15, 15, 1) dim3 gride(1, 1) dim3 bloco(30, 30, 1) Gride Gride << Launcherror >>> Bloco com 600 threads Bloco 0, 0 Bloco 0, 1 Bloco 1, 0 Bloco 1, 1
Kernel 2 dim3 gride(2, 2) dim3 bloco(15, 15, 1) Gride Bloco 0, 0 Bloco 0, 1 225 threads por bloco.Total de 900 threads. Bloco 1, 0 Bloco 1, 1
Kernel 2 dim3 gride(2, 2) dim3 bloco(15, 15, 1) Gride __global__void mulGpu2(int *A[], int *B[], int *C[]) { int i = blockIdx.x * SUB_LARGURA + threadIdx.x; int j = blockIdx.y * SUB_LARGURA + threadIdx.y; for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } Bloco 0, 0 Bloco 0, 1 Kernel 2: Multiplicação na GPU Bloco 1, 0 Bloco 1, 1
Kernel 2 1 2 __global__void mulGpu2(int *A[], int *B[], int *C[]) { int i = blockIdx.x * SUB_LARGURA + threadIdx.x; int j = blockIdx.y * SUB_LARGURA + threadIdx.y; for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } 3 4 Kernel 2: Multiplicação na GPU 4 1 2 3
Kernel 2 1 2 __global__void mulGpu2(int *A[], int *B[], int *C[]) { int i = blockIdx.x * SUB_LARGURA + threadIdx.x; int j = blockIdx.y * SUB_LARGURA + threadIdx.y; for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } 3 4 Kernel 2: Multiplicação na GPU 4 1 2 3
Kernel 2 1 2 __global__void mulGpu2(int *A[], int *B[], int *C[]) { int i = blockIdx.x * SUB_LARGURA + threadIdx.x; int j = blockIdx.y * SUB_LARGURA + threadIdx.y; for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } 3 4 Kernel 2: Multiplicação na GPU 4 1 2 3

Mais conteúdo relacionado

Mais procurados

Introduction to python
Introduction to pythonIntroduction to python
Introduction to pythonYi-Fan Chu
 
Network programming Using Python
Network programming Using PythonNetwork programming Using Python
Network programming Using PythonKarim Sonbol
 
Fun with Lambdas: C++14 Style (part 1)
Fun with Lambdas: C++14 Style (part 1)Fun with Lambdas: C++14 Style (part 1)
Fun with Lambdas: C++14 Style (part 1)Sumant Tambe
 
Niger National Flag
Niger National FlagNiger National Flag
Niger National FlagSH Rajøn
 
Implementation of k-means clustering algorithm in C
Implementation of k-means clustering algorithm in CImplementation of k-means clustering algorithm in C
Implementation of k-means clustering algorithm in CKasun Ranga Wijeweera
 
3 data-types-in-c
3 data-types-in-c3 data-types-in-c
3 data-types-in-cteach4uin
 
深入淺出C語言
深入淺出C語言深入淺出C語言
深入淺出C語言Simen Li
 
Basics of Model/View Qt programming
Basics of Model/View Qt programmingBasics of Model/View Qt programming
Basics of Model/View Qt programmingICS
 
Keywords, identifiers ,datatypes in C++
Keywords, identifiers ,datatypes in C++Keywords, identifiers ,datatypes in C++
Keywords, identifiers ,datatypes in C++Ankur Pandey
 
Structure and Typedef
Structure and TypedefStructure and Typedef
Structure and TypedefAcad
 
C++ Unit testing - the good, the bad & the ugly
C++ Unit testing - the good, the bad & the uglyC++ Unit testing - the good, the bad & the ugly
C++ Unit testing - the good, the bad & the uglyDror Helper
 
Notes about moving from python to c++ py contw 2020
Notes about moving from python to c++ py contw 2020Notes about moving from python to c++ py contw 2020
Notes about moving from python to c++ py contw 2020Yung-Yu Chen
 
An introduction to Rust: the modern programming language to develop safe and ...
An introduction to Rust: the modern programming language to develop safe and ...An introduction to Rust: the modern programming language to develop safe and ...
An introduction to Rust: the modern programming language to develop safe and ...Claudio Capobianco
 

Mais procurados (20)

Structure in c#
Structure in c#Structure in c#
Structure in c#
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to python
 
Network programming Using Python
Network programming Using PythonNetwork programming Using Python
Network programming Using Python
 
Fun with Lambdas: C++14 Style (part 1)
Fun with Lambdas: C++14 Style (part 1)Fun with Lambdas: C++14 Style (part 1)
Fun with Lambdas: C++14 Style (part 1)
 
Pointer in C
Pointer in CPointer in C
Pointer in C
 
Niger National Flag
Niger National FlagNiger National Flag
Niger National Flag
 
Implementation of k-means clustering algorithm in C
Implementation of k-means clustering algorithm in CImplementation of k-means clustering algorithm in C
Implementation of k-means clustering algorithm in C
 
Graphical representation of Stack
Graphical representation of StackGraphical representation of Stack
Graphical representation of Stack
 
Function in C
Function in CFunction in C
Function in C
 
3 data-types-in-c
3 data-types-in-c3 data-types-in-c
3 data-types-in-c
 
Structure in c
Structure in cStructure in c
Structure in c
 
深入淺出C語言
深入淺出C語言深入淺出C語言
深入淺出C語言
 
Basics of Model/View Qt programming
Basics of Model/View Qt programmingBasics of Model/View Qt programming
Basics of Model/View Qt programming
 
Keywords, identifiers ,datatypes in C++
Keywords, identifiers ,datatypes in C++Keywords, identifiers ,datatypes in C++
Keywords, identifiers ,datatypes in C++
 
Object-Oriented Programming Using C++
Object-Oriented Programming Using C++Object-Oriented Programming Using C++
Object-Oriented Programming Using C++
 
Structure and Typedef
Structure and TypedefStructure and Typedef
Structure and Typedef
 
C++ Unit testing - the good, the bad & the ugly
C++ Unit testing - the good, the bad & the uglyC++ Unit testing - the good, the bad & the ugly
C++ Unit testing - the good, the bad & the ugly
 
Notes about moving from python to c++ py contw 2020
Notes about moving from python to c++ py contw 2020Notes about moving from python to c++ py contw 2020
Notes about moving from python to c++ py contw 2020
 
Array
ArrayArray
Array
 
An introduction to Rust: the modern programming language to develop safe and ...
An introduction to Rust: the modern programming language to develop safe and ...An introduction to Rust: the modern programming language to develop safe and ...
An introduction to Rust: the modern programming language to develop safe and ...
 

Destaque

Multiplicação de matrizes
Multiplicação de matrizesMultiplicação de matrizes
Multiplicação de matrizesDiego Lusa
 
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...Eduardo de Lucena Falcão
 
Multiplicação de Matrizes
Multiplicação de MatrizesMultiplicação de Matrizes
Multiplicação de MatrizesDiego Lusa
 
Multiplicacao de matrizes
Multiplicacao de matrizesMultiplicacao de matrizes
Multiplicacao de matrizesGlauber Cruz
 
Matriz curric. matematica e.médio 2010
Matriz curric. matematica  e.médio 2010Matriz curric. matematica  e.médio 2010
Matriz curric. matematica e.médio 2010Creison
 
Plano de aula: Aspectos Didático-pedagógicos da Matemática no Ensino Médio II
Plano de aula: Aspectos Didático-pedagógicos da Matemática no Ensino Médio IIPlano de aula: Aspectos Didático-pedagógicos da Matemática no Ensino Médio II
Plano de aula: Aspectos Didático-pedagógicos da Matemática no Ensino Médio IIElton Ribeiro da Cruz
 
Planejamento Matrizes e determinantes
Planejamento Matrizes e determinantesPlanejamento Matrizes e determinantes
Planejamento Matrizes e determinantesMarcieleEuzebio
 

Destaque (8)

Aula 09 08-2013
Aula 09 08-2013Aula 09 08-2013
Aula 09 08-2013
 
Multiplicação de matrizes
Multiplicação de matrizesMultiplicação de matrizes
Multiplicação de matrizes
 
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...
II EPI - Estudo e Avaliação do Problema de Otimização da Multiplicação de Cad...
 
Multiplicação de Matrizes
Multiplicação de MatrizesMultiplicação de Matrizes
Multiplicação de Matrizes
 
Multiplicacao de matrizes
Multiplicacao de matrizesMultiplicacao de matrizes
Multiplicacao de matrizes
 
Matriz curric. matematica e.médio 2010
Matriz curric. matematica  e.médio 2010Matriz curric. matematica  e.médio 2010
Matriz curric. matematica e.médio 2010
 
Plano de aula: Aspectos Didático-pedagógicos da Matemática no Ensino Médio II
Plano de aula: Aspectos Didático-pedagógicos da Matemática no Ensino Médio IIPlano de aula: Aspectos Didático-pedagógicos da Matemática no Ensino Médio II
Plano de aula: Aspectos Didático-pedagógicos da Matemática no Ensino Médio II
 
Planejamento Matrizes e determinantes
Planejamento Matrizes e determinantesPlanejamento Matrizes e determinantes
Planejamento Matrizes e determinantes
 

Semelhante a Multiplicação de matrizes em cuda

Grafos e Algoritimos - Dr. Julio Cesar de Araujo Menezes
Grafos e Algoritimos - Dr. Julio Cesar de Araujo MenezesGrafos e Algoritimos - Dr. Julio Cesar de Araujo Menezes
Grafos e Algoritimos - Dr. Julio Cesar de Araujo MenezesJulio Menezes
 
Funções (exercícios)
Funções (exercícios)Funções (exercícios)
Funções (exercícios)Kleber Miranda
 
Aplicação do k-NN utilizando Bitonic Sort
Aplicação do k-NN utilizando Bitonic SortAplicação do k-NN utilizando Bitonic Sort
Aplicação do k-NN utilizando Bitonic SortVinicius Coelho
 
Lista 1 - Robótica (Jim & Ronie)
Lista 1 - Robótica (Jim & Ronie)Lista 1 - Robótica (Jim & Ronie)
Lista 1 - Robótica (Jim & Ronie)Jim Naturesa
 
Gabarito funcoes
Gabarito funcoesGabarito funcoes
Gabarito funcoesbferes
 

Semelhante a Multiplicação de matrizes em cuda (6)

Grafos e Algoritimos - Dr. Julio Cesar de Araujo Menezes
Grafos e Algoritimos - Dr. Julio Cesar de Araujo MenezesGrafos e Algoritimos - Dr. Julio Cesar de Araujo Menezes
Grafos e Algoritimos - Dr. Julio Cesar de Araujo Menezes
 
Funções (exercícios)
Funções (exercícios)Funções (exercícios)
Funções (exercícios)
 
4 tur11
4 tur114 tur11
4 tur11
 
Aplicação do k-NN utilizando Bitonic Sort
Aplicação do k-NN utilizando Bitonic SortAplicação do k-NN utilizando Bitonic Sort
Aplicação do k-NN utilizando Bitonic Sort
 
Lista 1 - Robótica (Jim & Ronie)
Lista 1 - Robótica (Jim & Ronie)Lista 1 - Robótica (Jim & Ronie)
Lista 1 - Robótica (Jim & Ronie)
 
Gabarito funcoes
Gabarito funcoesGabarito funcoes
Gabarito funcoes
 

Último

Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesFabianeMartins35
 
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....LuizHenriquedeAlmeid6
 
Slides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptxSlides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptxMauricioOliveira258223
 
Bloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docxBloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docxkellyneamaral
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéisines09cachapa
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfTutor de matemática Ícaro
 
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSOLeloIurk1
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)ElliotFerreira
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdfAna Lemos
 
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfplanejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfmaurocesarpaesalmeid
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...azulassessoria9
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...azulassessoria9
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfLeloIurk1
 
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇJaineCarolaineLima
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdfLeloIurk1
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...azulassessoria9
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números Mary Alvarenga
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médiorosenilrucks
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdfLeloIurk1
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxLuizHenriquedeAlmeid6
 

Último (20)

Revolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividadesRevolução russa e mexicana. Slides explicativos e atividades
Revolução russa e mexicana. Slides explicativos e atividades
 
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
Slides Lição 5, Betel, Ordenança para uma vida de vigilância e oração, 2Tr24....
 
Slides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptxSlides sobre as Funções da Linguagem.pptx
Slides sobre as Funções da Linguagem.pptx
 
Bloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docxBloco de português com artigo de opinião 8º A, B 3.docx
Bloco de português com artigo de opinião 8º A, B 3.docx
 
About Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de HotéisAbout Vila Galé- Cadeia Empresarial de Hotéis
About Vila Galé- Cadeia Empresarial de Hotéis
 
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdfCurrículo - Ícaro Kleisson - Tutor acadêmico.pdf
Currículo - Ícaro Kleisson - Tutor acadêmico.pdf
 
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
2° ANO - ENSINO FUNDAMENTAL ENSINO RELIGIOSO
 
Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)Análise poema país de abril (Mauel alegre)
Análise poema país de abril (Mauel alegre)
 
A QUATRO MÃOS - MARILDA CASTANHA . pdf
A QUATRO MÃOS  -  MARILDA CASTANHA . pdfA QUATRO MÃOS  -  MARILDA CASTANHA . pdf
A QUATRO MÃOS - MARILDA CASTANHA . pdf
 
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdfplanejamento_estrategico_-_gestao_2021-2024_16015654.pdf
planejamento_estrategico_-_gestao_2021-2024_16015654.pdf
 
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...Considere a seguinte situação fictícia:  Durante uma reunião de equipe em uma...
Considere a seguinte situação fictícia: Durante uma reunião de equipe em uma...
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: COMUNICAÇÃO ASSERTIVA E INTERPESS...
 
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdfENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
ENSINO RELIGIOSO 7º ANO INOVE NA ESCOLA.pdf
 
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
ATIVIDADE - CHARGE.pptxDFGHJKLÇ~ÇLJHUFTDRSEDFGJHKLÇ
 
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
421243121-Apostila-Ensino-Religioso-Do-1-ao-5-ano.pdf
 
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
PROVA - ESTUDO CONTEMPORÂNEO E TRANSVERSAL: LEITURA DE IMAGENS, GRÁFICOS E MA...
 
CRUZADINHA - Leitura e escrita dos números
CRUZADINHA   -   Leitura e escrita dos números CRUZADINHA   -   Leitura e escrita dos números
CRUZADINHA - Leitura e escrita dos números
 
apostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médioapostila projeto de vida 2 ano ensino médio
apostila projeto de vida 2 ano ensino médio
 
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
5 bloco 7 ano - Ensino Relogioso- Lideres Religiosos _ Passei Direto.pdf
 
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptxSlides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
Slides Lição 05, Central Gospel, A Grande Tribulação, 1Tr24.pptx
 

Multiplicação de matrizes em cuda

  • 1. Multiplicação de Matrizes em CUDA Divino César SoaresPontifícia Universidade Católica de Goiás (CMP/PUC-GO)
  • 2.
  • 3. Gerar uma matriz resultado C com as mesmas dimensões das matrizes A e B.
  • 4. Cada elemento (i, j) da matriz C é o produto (interno) da linha i de A pela coluna j de B.
  • 5. Para cada elemento (i, j) de C:for (k=1; k<=LARGURA; k++) C[i][j] += (A[i][k] * B[k][j]);
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14. Estrutura da Solução Alocar memória na GPU. Copia dados de entrada. Da CPU para a GPU. Configura execução. Número de threads e blocos. Copia resultados. cudaMalloc((void **)&A_d, size_A); cudaMalloc((void**)&B_d, size_B); cudaMalloc((void**)&C_d, size_C); cudaMemcpy(A_d, A, size_A, cudaMemcpyHostToDevice); cudaMemcpy(B_d, B, size_B , cudaMemcpyHostToDevice); cudaMemcpy(C_d, C, size_C , cudaMemcpyHostToDevice); dim3 gride(X, Y)dim3 bloco(Z, W, K)meu_kernel<<<gride, bloco>>>(A, B, C); cudaMemcpy(C, C_d, size_C , cudaMemcpyDeviceToHost);
  • 16. Kernel 1 dim3 gride(1, 1) dim3 bloco(4, 4, 1) dim3 gride(2, 1) dim3 bloco(4, 4, 1) dim3 gride(1, 1) dim3 bloco(30, 30, 1) Gride Gride Gride << Launcherror >>> Bloco com 600 threads Bloco 0 Bloco 0 Bloco 1
  • 17. Kernel 1 dim3 gride(1, 1) dim3 bloco(LARGURA, LARGURA, 1) Gride LARGURA LARGURA Bloco 0
  • 18. Kernel 1 dim3 gride(1, 1) dim3 bloco(LARGURA, LARGURA, 1) Gride __global__voidmulGpu(int *A[], int *B[], int *C[]) { int i = threadIdx.x; int j = threadIdx.y; for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } LARGURA LARGURA Bloco 0 Kernel 1: Multiplicação na GPU
  • 19. Kernel 1 1 Instante de tempo t=0 2 __global__voidmulGpu(int *A[], int *B[], int *C[]) { int i = threadIdx.x; int j = threadIdx.y; for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } 3 4 Kernel 1: Multiplicação na GPU 4 1 2 3
  • 20. Kernel 1 1 Instante de tempo t=1 2 __global__voidmulGpu(int *A[], int *B[], int *C[]) { int i = threadIdx.x; int j = threadIdx.y; for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } 3 4 Kernel 1: Multiplicação na GPU 4 1 2 3
  • 21. Kernel 1 1 Instante de tempo t=2 2 __global__voidmulGpu(int *A[], int *B[], int *C[]) { int i = threadIdx.x; int j = threadIdx.y; for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } 3 4 Kernel 1: Multiplicação na GPU 4 1 2 3
  • 22. Kernel 1 1 Instante de tempo t=L 2 __global__voidmulGpu(int *A[], int *B[], int *C[]) { int i = threadIdx.x; int j = threadIdx.y; for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } 3 4 Kernel 1: Multiplicação na GPU 4 1 2 3
  • 23.
  • 25. Kernel 2 dim3 gride(2, 2) dim3 bloco(15, 15, 1) dim3 gride(1, 1) dim3 bloco(30, 30, 1) Gride Gride << Launcherror >>> Bloco com 600 threads Bloco 0, 0 Bloco 0, 1 Bloco 1, 0 Bloco 1, 1
  • 26. Kernel 2 dim3 gride(2, 2) dim3 bloco(15, 15, 1) Gride Bloco 0, 0 Bloco 0, 1 225 threads por bloco.Total de 900 threads. Bloco 1, 0 Bloco 1, 1
  • 27. Kernel 2 dim3 gride(2, 2) dim3 bloco(15, 15, 1) Gride __global__void mulGpu2(int *A[], int *B[], int *C[]) { int i = blockIdx.x * SUB_LARGURA + threadIdx.x; int j = blockIdx.y * SUB_LARGURA + threadIdx.y; for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } Bloco 0, 0 Bloco 0, 1 Kernel 2: Multiplicação na GPU Bloco 1, 0 Bloco 1, 1
  • 28. Kernel 2 1 2 __global__void mulGpu2(int *A[], int *B[], int *C[]) { int i = blockIdx.x * SUB_LARGURA + threadIdx.x; int j = blockIdx.y * SUB_LARGURA + threadIdx.y; for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } 3 4 Kernel 2: Multiplicação na GPU 4 1 2 3
  • 29. Kernel 2 1 2 __global__void mulGpu2(int *A[], int *B[], int *C[]) { int i = blockIdx.x * SUB_LARGURA + threadIdx.x; int j = blockIdx.y * SUB_LARGURA + threadIdx.y; for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } 3 4 Kernel 2: Multiplicação na GPU 4 1 2 3
  • 30. Kernel 2 1 2 __global__void mulGpu2(int *A[], int *B[], int *C[]) { int i = blockIdx.x * SUB_LARGURA + threadIdx.x; int j = blockIdx.y * SUB_LARGURA + threadIdx.y; for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } 3 4 Kernel 2: Multiplicação na GPU 4 1 2 3
  • 31. Kernel 2 1 Instante de tempo t=L 2 __global__void mulGpu2(int *A[], int *B[], int *C[]) { int i = blockIdx.x * SUB_LARGURA + threadIdx.x; int j = blockIdx.y * SUB_LARGURA + threadIdx.y; for (int k=1; k<=LARGURA; k++) { C[i][j] += (A[i][k] * B[k][j]); } } 3 4 Kernel 2: Multiplicação na GPU 4 1 2 3
  • 32.