python實現簡單的並行矩陣乘法

本文采用的矩陣乘法方式是利用一個矩陣的行和二個矩陣的列相乘時不會互相影響。假設A(m,n)表示矩陣的m行,n列。那麼C(m,m)=A(m,n) * B(n,m) :
計算C矩陣時候分解成:

process-1:
C(1,1) = A(1,:) * B(:,1)

process-2:
C(1,2) = A(1,:) * B(:,2)

..........

process-m
C(m,m) = A(m,:) * B(:,m)

實現源碼:

import multiprocessing     #導入多進程模塊,實現多進程
import os    #驗證,打印進程的id
import numpy as np    #這個模塊是爲了實現矩陣乘法

def matrix_muti(i,j):
        print('Current process is {0}'.format(os.getpid()))   #打印執行該函數時候的進程
        A = [[1, 2], [5, 8]]
        B = [[4, 8], [6, 5]]
        A = np.array(A)
        B = np.array(B)
        #print(i,j)
try:
    print(sum(A[i,:]*B[:,j]))
except:
    pass

if __name__ == '__main__':
        m=1
        n=0
        print('parent process is {0}'.format(os.getpid()))   #獲取父進程id
        for i in range(4):
                #控制矩陣的行列數字變化
                n=n+1             
                if n % 3 == 0:
                        m = m + 1
                        n = 1

            #查看下標變化是否正確
    print('下標變化:',m-1,n-1)
    p = multiprocessing.Process(target=matrix_muti,args=(m-1,n-1,))   #固定格式,使用4個子進程求矩陣的乘積
    p.start()   #開始

p.join()

複製時候運行了下,發現複製到Pycharm時代碼縮進變了,需要手動調整下,不然會報錯

貼出運行結果如下:
python實現簡單的並行矩陣乘法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章