Умножение двух матриц 100х100 (многопоточность)
Столкнулся с такой задачей: нужно умножить две матрицы размером 100х100, при этом используя метод синхронизации потоков - СЕМАФОР. Не до конца понял как нужно работать с семафором. Смог переделать свой код для умножения матриц. Но вопрос остается открытый: как к этому добавить многопоточность.
import numpy as np
a = np.arange(0, 10000).reshape(100, 100)
b = np.arange(10000, 20000).reshape(100, 100)
print(np.dot(a, b))
Прошу, подскажите, как можно реализовать такое?
Ответы (1 шт):
Автор решения: eri
→ Ссылка
Вот так можно распаралелить первый цикл на каноничном алгоритме:
import numpy as np
import multiprocessing as mp
import os
a = np.arange(0, 10000).reshape(100, 100)
b = np.arange(10000, 20000).reshape(100, 100)
N = 100
c = np.zeros((N,N))
def forcolumn(i):
row = np.zeros((1,N))
for j in range(N):
row[0,j] = sum(a[i, k] * b[k, j] for k in range(N))
return i,row
pool = mp.Pool()
for i,row in pool.imap_unordered(forcolumn, range(N), N//os.cpu_count()//2):
c[i,:] = row[0,:]
print(c)
Семафор воткнуть некуда.