Матричное умножение, возвращающее неверную матрицу Python параллельно - PullRequest
0 голосов
/ 01 марта 2019

У меня есть школьный проект, где я должен выполнить некоторую параллельную функцию 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.

...