A multiplicação de matrizes é uma das mais importantes operações da matemática e possui diversas aplicações na computação, como em Jogos Eletrônicos, Modelagem 3D, na Inteligência Artificial usando Redes Neurais, além de ser utilizada em diversos campos.
Ela é amplamente estudada e muitas otimizações são atualmente conhecidas. Nesta questão, iremos estudar um pouco essa operação e vamos explorar um pouco o paralelismo. O objetivo é realizar a multiplicação das matrizes A, B na matriz resultante C. E então, imprimir toda a matriz C.
Por exemplo, considera a matriz A (2x3):
| 5 | 3 | 7 |
|---|---|---|
| 9 | 1 | 4 |
Considere também a matriz B (3x2):
| 1 | 5 |
|---|---|
| 2 | 6 |
| 4 | 7 |
O resultado, será a matriz C (2x2), onde o elemento (1,1) será o elemento (1,2) será , como mostra a Tabela abaixo:
Assim, a matriz C (2x2) será:
| 39 | 92 |
|---|---|
| 27 | 79 |
Neste exercício, você deve explorar o paralelismo! Todas as células podem ser calculadas em paralelo.
A primeira linha é composta por 3 números inteiros: , e . Depois, a matriz é dada como entrada, onde nas próximas linhas, números são passados em cada. Depois, a matriz é a entrada. Onde nas próximas linhas, números são passados.
Seu programa deve imprimir a matriz, , com linhas e colunas. A matriz é de ponto flutuante de precisão dupla (double) e deve ser impresso apenas 2 casas decimais.
Seu programa deve ser construído em OpenMP.
4 4 4
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
0 0 0 1
0 0 1 0
0 1 0 0
1 0 0 0
1.00 1.00 1.00 1.00
2.00 2.00 2.00 2.00
3.00 3.00 3.00 3.00
4.00 4.00 4.00 4.00
2 4 2
1 1 2 3
2 3 4 5
4 4
1 2
2 3
2 3
15.00 21.00
29.00 41.00
Nos últimos casos de teste, serão testadas matrizes 512x512 e 1024x1024. É esperado que, com o uso de paralelismo, seu programa consiga executar em menos de 4 segundos