Você está na página 1de 8

Pablo Pereira Pupulin

200910330092

Relatrio de Multiplicao de Matrizes usando pthread


Especificaes Tcnicas do Computador
1. Processador Intel Core i7-3632QM CPU @2.20GHz
2. Memria (RAM) 8GB
3. Ubuntu 13.10 (saucy) 64Bits
Mtodos do Programa
1. TratarArgumentos():
Este mtodo tem como funo fazer o tratamento dos
argumentos passados ao iniciar o programa.
2. leArquivo():
Faz a leitura dos arquivos A.txt e B.txt, e insere os
devidos valores nas Matrizes A e B.
3. CriaMatriz():
Este mtodo cria e inicializa matrizes, passada por
parmetro para ele.
4. DeletaMatriz():
Este mtodo deleta a matriz que foi passada por
parmetro para ele.
5. MultiplicaPelaArea():
Faz a multiplicao por blocos da matriz.
6. CriaMatrizAleatoria():
Neste mtodo gerado duas matrizes com nmeros
aleatrios, a matriz A e a matriz B, e so gravadas em
A.txt e B.txt respectivamente.
7. Multiplica():
onde se faz a multiplicao da matriz.
8. gravaMatrizR():
Aps o termino da multiplicao das matrizes, gerada
uma matriz R e esse mtodo grava est matriz em um
arquivo chamado R.txt.
9. DivideMatriz():
Neste mtodo que feita a diviso da matriz em blocos
para facilitar o calculo usando threads.
10. calcula():
Metodo que tem como funo iniciar a multiplicao dos
blocos.

11. main():
o mtodo principal do programa, no qual nele que se
faz todas as chamadas para os outros mtodos.

Execuo do cdigo
1. Para a compilao do cdigo usar o seguinte comando:
+ + .
2. Para executar o cdigo, existe trs modos de ser executado:

a) Com nenhum parmetro.


1) Ambas as matrizes A e B sero matrizes de tamanho 9x9
2) As matrizes A e B sero divididas em 2 blocos.
3) O programa executara 4 threads para fazer os clculos.

b) Com 4 parmetros nos os quais so:


1)
2)
3)
4)

Quantidade de linhas da matriz A.


Quantidade de colunas da matriz A.
Quantidade de linhas da matriz B.
Quantidade de colunas da matriz B.

5) As matrizes A e B sero divididas em 2 blocos.


6) O programa executara 4 threads para fazer os clculos.

c) E com 5 parmetros nos quais so:


1)
2)
3)
4)
5)
6)

Quantidade de linhas da matriz A.


Quantidade de colunas da matriz A.
Quantidade de linhas da matriz B.
Quantidade de colunas da matriz B.
Quantidade de blocos das matrizes.
O programa executara a qtdBlocos2 threads para fazer os
clculos.
3. A resposta final gravada em um arquivo no disco chamado R.txt, no
terminal apenas exibido o tempo gasto para fazer os clculos.

Algoritmo de Multiplicaao de Matriz


O algoritmo implementado para a multiplicao de matrizes o seguinte:
( = 0; < ; + +)
( = 0; < ; + +)
( = 0; < ; + +)
[][]+= [][] [][];

Sendo que linhas A a quantidade de linhas na matriz A, colunas B a


quantidade de colunas na matriz B e colunas A a quantidade de colunas na
matriz A.

Desempenho do Algoritmo
Segue abaixo as tabelas de desempenho do algoritmo:
Tamanho da Matriz A
3x3
9x9
50x50
15x15
100x100
150x150
200x200
300x300
400x400
500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
4000x4000
5000x5000
15x15
3x3
9x9
50x50
100x100
150x150
200x200
300x300
400x400
500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
4000x4000
5000x5000

Tamanho da Matriz A2
3x3
9x9
50x50
15x15
100x100
150x150
200x200
300x300
400x400
500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
4000x4000
5000x5000
15x15
3x3
9x9
50x50
100x100
150x150
200x200
300x300
400x400
500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
4000x4000
5000x5000

Quantidade Threads
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4
4

TEMPO(s)
0,000222
0,000369
0,000913
0,002120
0,005479
0,020779
0,041922
0,137089
0,346449
0,700466
13,038327
47,460789
132,709369
271,481848
508,582564
1282,523300
2696,138331
0,000238
0,000324
0,000339
0,001232
0,003745
0,017494
0,030677
0,054090
0,131285
0,214619
2,521701
15,569058
43,870464
77,449538
146,948922
386,753820
748,062864

9x9
3x3
15x15
50x50
100x100
150x150
200x200
300x300
400x400
500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
4000x4000
5000x5000
3x3
9x9
50x50
100x100
15x15
150x150
200x200
300x300
400x400
500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
4000x4000
5000x5000
15x15
50x50
3x3
9x9
100x100
150x150
200x200
300x300
400x400
500x500
1000x1000

9x9
3x3
15x15
50x50
100x100
150x150
200x200
300x300
400x400
500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
4000x4000
5000x5000
3x3
9x9
50x50
100x100
15x15
150x150
200x200
300x300
400x400
500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
4000x4000
5000x5000
15x15
50x50
3x3
9x9
100x100
150x150
200x200
300x300
400x400
500x500
1000x1000

9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
16
16
16
16
16
16
16
16
16
16
16
16
16
16
16
16
16
25
25
25
25
25
25
25
25
25
25
25

0,000672
0,000928
0,000999
0,001464
0,003472
0,010555
0,026686
0,039843
0,091253
0,184479
3,205763
11,310645
26,721007
54,566712
95,416192
256,284407
572,358917
0,001335
0,001847
0,001933
0,005318
0,009470
0,013508
0,022384
0,046608
0,089276
0,170958
1,503722
10,265965
26,155021
53,939226
92,751526
237,227736
563,018276
0,001741
0,001770
0,001860
0,002039
0,005670
0,012932
0,017929
0,042568
0,084257
0,166908
1,437003

1500x1500
2000x2000
2500x2500
3000x3000
4000x4000
5000x5000
15x15
3x3
9x9
50x50
100x100
150x150
200x200
300x300
400x400
500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
4000x4000
5000x5000
15x15
50x50
9x9
3x3
100x100
150x150
200x200
300x300
400x400
500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
4000x4000
5000x5000
15x15
9x9
3x3
50x50
100x100

1500x1500
2000x2000
2500x2500
3000x3000
4000x4000
5000x5000
15x15
3x3
9x9
50x50
100x100
150x150
200x200
300x300
400x400
500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
4000x4000
5000x5000
15x15
50x50
9x9
3x3
100x100
150x150
200x200
300x300
400x400
500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
4000x4000
5000x5000
15x15
9x9
3x3
50x50
100x100

25
25
25
25
25
25
36
36
36
36
36
36
36
36
36
36
36
36
36
36
36
36
36
49
49
49
49
49
49
49
49
49
49
49
49
49
49
49
49
49
64
64
64
64
64

8,344321
25,099458
52,694042
91,772854
230,975750
534,743911
0,002035
0,002192
0,002458
0,003040
0,005489
0,016698
0,022123
0,058391
0,094192
0,161626
1,378262
6,829333
22,574809
49,849600
91,479005
231,565470
505,839456
0,002645
0,002680
0,002967
0,003011
0,004531
0,008288
0,016063
0,053745
0,087985
0,157484
1,319498
5,908261
18,266284
44,363555
88,572784
228,272017
491,551292
0,003482
0,003493
0,003690
0,003717
0,005914

150x150
200x200
300x300
400x400
500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
4000x4000
5000x5000
50x50
15x15
9x9
100x100
3x3
150x150
200x200
300x300
400x400
500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
4000x4000
5000x5000
150x150
15x15
200x200
9x9
3x3
300x300
50x50
100x100
400x400
500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
4000x4000

150x150
200x200
300x300
400x400
500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
4000x4000
5000x5000
50x50
15x15
9x9
100x100
3x3
150x150
200x200
300x300
400x400
500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
4000x4000
5000x5000
150x150
15x15
200x200
9x9
3x3
300x300
50x50
100x100
400x400
500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
4000x4000

64
64
64
64
64
64
64
64
64
64
64
64
81
81
81
81
81
81
81
81
81
81
81
81
81
81
81
81
81
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100
100

0,009008
0,014862
0,038383
0,087156
0,157048
1,306796
5,243215
14,883904
37,057415
84,447202
226,514223
487,089378
0,004370
0,004520
0,004586
0,005644
0,008507
0,008671
0,016294
0,037511
0,087227
0,154876
1,360946
4,952457
12,854479
33,513709
77,288089
226,695811
486,471827
0,009508
0,013123
0,014085
0,020568
0,032378
0,038216
0,049730
0,071515
0,086872
0,159296
1,394607
4,928028
11,398498
30,307328
66,935636
217,971120

5000x5000

5000x5000

100

480,798933

Matriz x Threads x Tempo


2850,000000
2775,000000
2700,000000
2625,000000
2550,000000
2475,000000
2400,000000
2325,000000
2250,000000
2175,000000
2100,000000
2025,000000
1950,000000
1875,000000
1800,000000
1725,000000
1650,000000
1575,000000
1500,000000
1425,000000
1350,000000
1275,000000
1200,000000
1125,000000
1050,000000
975,000000
900,000000
825,000000
750,000000
675,000000
600,000000
525,000000
450,000000
375,000000
300,000000
225,000000
150,000000
75,000000
0,000000

120

100

80

60

40

20

3x3
200x200
2000x2000
3x3
300x300
2500x2500
15x15
400x400
3000x3000
100x100
500x500
4000x4000
100x100
1000x1000
5000x5000
150x150
1500x1500
15x15
200x200
2000x2000
9x9
300x300
2500x2500
9x9
400x400
3000x3000
9x9
500x500
4000x4000

TEMPO(s)

Quantidade Threads

Analise dos resultados


Analisando os resultados obtidos, pode se ver que matriz que possui menores
tamanho, usar apenas uma thread pode ser ter menor custo do que se utilizar
de programao paralela, porm pode se ver que quanto maior a matriz, maior
o ganho se utilizar programao paralela, mas tambm pode se notar que
quanto maior a quantidade de threads menor a significncia do custo gerado,
isto por conta do custo que as threads tem para se comunicar reduz o ganho
e tambm por conta da limitao do hardware, caso houvesse mais ncleos de
processador para poder executar as threads haveria maior ganho, como a

quantidade de ncleos menor que a quantidade de threads a ser executado,


acaba-se tendo um afunilamento no ganho relao a tempo.