У меня есть школьный проект, где я должен выполнить некоторую параллельную функцию Python.Одним из них является умножение матриц (я не могу использовать NumPy).Я пытался сделать это в многопоточности, но это было слишком медленно, и мне рекомендовали делать это в многопроцессорной среде.Это намного быстрее, но есть одна проблема.Я получаю правильную матрицу только тогда, когда использую один процесс.Кто-нибудь может помочь?Вот код:
import numpy as np
import time
import multiprocessing.dummy as mp
min = -10
max = 10
n = 10
x = ((np.random.rand(n, n) * (max - min) ) + min).astype('int')
y = ((np.random.rand(n, n) * (max - min) ) + min).astype('int')
z = [[0 for i in range(n)] for j in range(n)]
jump = 0
def matrixMult(start):
for i in range(start, start + jump):
print("HEJ")
for k in range(n):
for j in range(n):
z[i][j] += x[i][k] * y[k][j]
def multPrepare(x, y, i):
pool = mp.Pool(i)
pool.map(matrixMult, range(0, n, jump))
return z
if __name__ == '__main__':
i = 1
while i < 5:
start_time = time.time()
jump = int(round(n / i))
z = multPrepare(x, y, i)
print("number of cores: " + str(i) + ", TIME: "+ str(time.time()-start_time) + " seconds")
i += 1
print(z)
print(z == x.dot(y))
Матрица результата верна только тогда, когда я = 1.