Roteiro do Encontro
- Implementação de um algoritmo para multiplicar matrizes;
- Paralelização do algoritmo;
- Coleta de dados;
Implementação do Algoritmo
Para multiplicar as matrizes A e B, devemos verificar se o número de colunas da matriz A é igual ao número de linhas da matriz B. Este requisito é básico e não deve ser violado.Implementamos em C o seguinte algoritmo para multiplicação de matrizes:
programa
multiplica_matrizes_sequencial;
matriz mat1, mat2, mat3;
inteiro linha, coluna, i, acumula;
"leia mat1";
"leia mat2";
"verifique se numero de colunas de mat1 é igual numero de linhas de mat2";
para linha de 1 até "numero de linhas de mat1" faça
para coluna de 1 até "numero de colunas de mat2" faça
acumula=0;
para i de 1 até "numero de colunas de mat1" faça
acumula=acumula+mat1[linha][i]*mat2[i][coluna];
fimpara;
mat3[linha][coluna]=acumula;
fimpara;
fimpara;
imprima mat3;
fim programa;
matriz mat1, mat2, mat3;
inteiro linha, coluna, i, acumula;
"leia mat1";
"leia mat2";
"verifique se numero de colunas de mat1 é igual numero de linhas de mat2";
para linha de 1 até "numero de linhas de mat1" faça
para coluna de 1 até "numero de colunas de mat2" faça
acumula=0;
para i de 1 até "numero de colunas de mat1" faça
acumula=acumula+mat1[linha][i]*mat2[i][coluna];
fimpara;
mat3[linha][coluna]=acumula;
fimpara;
fimpara;
imprima mat3;
fim programa;
Paralelização do Algoritmo
Paralelizamos o primeiro laço com openMP, usando "#pragma omp for".Coleta de Dados
Os testes foram executados no SO Ubuntu (kernel 3.2.0-24) rodando sob um computador com processador Intel Core i7 2630QM, 2.0~2.9 GHz, com 8Gb memória DDR3.
Matriz | Tempo Sequencial | Tempo 2 Threads | Tempo 4 Threads |
1000x1000 | 15,416 s | 7,554 s | 4,12 s |
2000x2000 | 2 min 14,89 s | 1 min 4,846 s | 36,115 s |
Nenhum comentário:
Postar um comentário