-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmulMatricesCREWproc.py
More file actions
98 lines (80 loc) · 2.85 KB
/
Copy pathmulMatricesCREWproc.py
File metadata and controls
98 lines (80 loc) · 2.85 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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# practica 7: Multiplicación Matrices CREW (procesos)
# Autor: Jorge de Jesús Jiménez Servín, Jose Daniel Perez Mejia, Kennet Kael Mendoza Pliego
from multiprocessing import Process, Value, Lock
import math
import time
def proc1(i, j, k, A, B, C, lock):
with lock:
C[k][i][j].value = int(A[i][k].value) * int(B[k][j].value)
time.sleep(0.1)
def proc2(i, j, k, l, C, C2, lock):
with lock:
if (((2 * k) % (2 ** l)) == 0):
C2[2 * k][i][j].value = int(C[2 * k][i][j].value + C[2 * k - (2 ** l)][i][j].value)
time.sleep(0.2)
def main():
lock = Lock()
A = [[Value('i', 0) for _ in range(2)] for _ in range(2)] # value
B = [[Value('i', 0) for _ in range(2)] for _ in range(2)]
C = [[[Value('i', 0) for _ in range(2)] for _ in range(2)] for _ in range(2)]
C2 = [[[Value('i', 0) for _ in range(2)] for _ in range(2)] for _ in range(2)]
lg = int(math.log(2, 2))
print ("\nFunciona INSERTANDO MATRIZ 2X2 DESEADA\n\nEstablecer matriz A:")
i = 0
while i < 2:
j = 0
while j < 2:
print ("Valor componente [", i + 1, ", ", j + 1, " ]: ")
x = int(input())
A[i][j].value = x
j += 1
i += 1
print ("\nEstablecer matriz B:")
i = 0
while i < 2:
j = 0
while j < 2:
print ("Valor componente [", i + 1, ",", j + 1, "]")
x = int(input())
B[i][j].value = x
j += 1
i += 1
print ("\nProcedimiento de multiplicación de matrices: \n")
print ("[ ", A[0][0].value, " ", A[0][1].value, " ] X [ ", B[0][0].value, " ", B[0][1].value, " ]")
print ("[ ", A[1][0].value, " ", A[1][1].value, " ] X [ ", B[1][0].value, " ", B[1][1].value, " ]")
k = 0
while k < 2:
i=0
while(i<2):
j=0
while(j<2):
t1=Process(target=proc1,args=(i,j,k,A,B,C,lock))
t1.start()
t1.join()
j=j+1
i=i+1
k=k+1
print ("\n\nPrimer paso: \n[",C[0][0][0].value, ',',C[0][0][1].value,']')
print ('[',C[0][1][0].value,',',C[0][1][1].value,']')
print ('[',C[1][0][0].value, ',',C[1][0][1].value,']')
print ('[',C[1][1][0].value, ',',C[1][1][1].value,']')
l=0
while(l<lg):
i=0
while(i<2):
j=0
while(j<2):
k=0
while(k<1):
t2=Process(target=proc2,args=(i,j,k,l,C,C2,lock))
t2.start()
t2.join()
k=k+1
j=j+1
i=i+1
l=l+1
print ("\nSegundo paso: [A]*[B] = \n")
print ("[ ", C2[0][0][0].value, " ", C2[0][0][1].value, " ]") # se accede a lo valores con value
print ("[ ", C2[0][1][0].value, " ", C2[0][1][1].value, " ]")
if __name__ == "__main__":
main()