python实现简单的并行矩阵乘法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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实现简单的并行矩阵乘法的主要内容,如果未能解决你的问题,请参考以下文章

矩阵向量乘法的更快实现【并行计算】

利用MPI实现Cannon算法并行矩阵乘法

利用MPI实现Cannon算法并行矩阵乘法

利用MPI实现Cannon算法并行矩阵乘法

需要帮助使用 MPI 调试并行矩阵乘法

基于MapReduce的并行化大矩阵乘法