-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
53 lines (44 loc) · 1.53 KB
/
main.py
File metadata and controls
53 lines (44 loc) · 1.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy
import random
import time
import multiprocessing
def cria_matriz(linhas, colunas):
A = []
for i in range(linhas):
linha = []
for j in range(colunas):
linha = linha + [random.randint(1, 10)]
A = A + [linha]
return A
def multiplica_linha_coluna(queue, queue_resultados, matrizA, matrizB):
while True:
i, j = queue.get()
valor = 0
for k in range(len(matrizB)):
valor = valor + matrizA[i][k] * matrizB[k][j]
queue.task_done()
queue_resultados.put((i, j, valor))
if __name__ == '__main__':
linhas, colunas = 100, 100
print("{}: Gerando matrizes".format(time.strftime('%c')))
matrizA = cria_matriz(linhas, colunas)
matrizB = cria_matriz(linhas, colunas)
matrizC = numpy.zeros(shape=(linhas,colunas))
print("{}: Multiplicando matrizes".format(time.strftime('%c')))
queue = multiprocessing.JoinableQueue()
queue_resultados = multiprocessing.JoinableQueue()
for i in range(3):
worker = multiprocessing.Process(target=multiplica_linha_coluna, args=(queue, queue_resultados, matrizA, matrizB,))
worker.daemon = True
worker.start()
for i in range(len(matrizA)):
for j in range(len(matrizA[0])):
queue.put((i, j))
queue.join()
while not queue_resultados.empty():
i, j, valor = queue_resultados.get()
matrizC[i][j] = valor
queue_resultados.task_done()
print("{}: Resultado:{}".format(time.strftime('%c'), matrizC))