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实现简单的并行矩阵乘法

转载于:https://blog.51cto.com/13155409/2120153

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Python和TVM实现GPU上并行矩阵乘法简单示例: ```python import numpy as np import tvm from tvm import te, autotvm # 定义矩阵乘法运算 def matmul(n, m, p): # 定义输入矩阵 A = te.placeholder((n, m), name='A') B = te.placeholder((m, p), name='B') # 定义输出矩阵 k = te.reduce_axis((0, m), name='k') C = te.compute((n, p), lambda i, j: te.sum(A[i, k] * B[k, j], axis=k), name='C') # 创建计算图 s = te.create_schedule(C.op) # 选择目标设备 target = 'cuda' # 编译 func = tvm.build(s, [A, B, C], target=target) # 生成随机输入数据 a_np = np.random.uniform(size=(n, m)).astype(np.float32) b_np = np.random.uniform(size=(m, p)).astype(np.float32) c_np = np.zeros((n, p), dtype=np.float32) # 将数据上传到GPU ctx = tvm.gpu() a_tvm = tvm.nd.array(a_np, ctx) b_tvm = tvm.nd.array(b_np, ctx) c_tvm = tvm.nd.array(c_np, ctx) # 执行 func(a_tvm, b_tvm, c_tvm) tvm.testing.assert_allclose(c_np, c_tvm.asnumpy(), rtol=1e-5) # 测试 matmul(128, 256, 512) ``` 以上代码中,我们首先使用TVM的API定义了矩阵乘法运算,并创建了计算图。然后,我们选择了目标设备为GPU,并使用TVM的编译器将计算图编译为针对GPU的高效代码。接着,我们生成了随机的输入数据,并将其上传到GPU。最后,我们调用生成的代码执行矩阵乘法运算,并将输出结果与预期结果进行比对。 需要注意的是,在实际使用中,我们可能需要使用TVM的调度器对计算图进行优化,以进一步提高性能。同时,我们还可以使用TVM的自动调优工具Autotvm,自动选择最优的计算图和参数组合,以获得最佳性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值