python 矩阵乘法算法 不加包_Numbapro:矩阵乘法没有加速

在过去的几天里,我一直在试图理解为什么Numbapro(来自Continuum Analytics,Inc.的加速版;我运行的是30天试用版)在我的MacBook Pro(Intel Core i7,2.6GHz,16GB RAM,NVIDIA GeForce GT 650M,PCI总线上1GB)上为什么不能加速。在

我从(NxM)x(MxN)矩阵乘法的代码中取了一个例子,Continuum Analytics,Inc.声称通过CUDA加速计算,我比较了库达.JIT还有numpy。我的想法是运行例如1e4迭代并且矩阵B在每次迭代中都是随机的。在下面我使用的代码下面,我引用了我获得的时间。有什么解决办法吗?谢谢!在from numbapro import *

from numba import *

import numpy as np

import math

from timeit import default_timer as timer

m=1000

n=1000

A = np.array(np.random.random((n,m)), dtype=np.float32)

C = np.empty([n,n])

iterations = 10000

start = timer()

for i in range(iterations):

B = np.array(np.random.random((m,n)), dtype=np.float32)

X=np.dot(A,B)

numpy_time=(timer() - start)

@cuda.jit(void(float32[:,:],float32[:,:],float32[:,:]))

def cu_square_matrix_mul(A, B, C):

tx = cuda.threadIdx.x

ty = cuda.threadIdx.y

bx = cuda.blockIdx.x

by = cuda.blockIdx.y

bw = cuda.blockDim.x

bh = cuda.blockDim.y

x = tx + bx * bw

y = ty + by * bh

n = C.shape[0]

if x >= n or y >= n:

return

cs = 0

for i in range(n):

cs += A[y,i]*B[i,x]

C[y,x]= cs

cuda.syncthreads()

blockdim = 256,3

griddim = 10,3

stream = cuda.stream()

dA = cuda.to_device(A, stream)

dC = cuda.to_device(C, stream)

start = timer()

for i in range(iterations):

B = np.array(np.random.random((m,n)), dtype=np.float32)

dB = cuda.to_device(B, stream)

cu_square_matrix_mul[griddim,blockdim,stream](dA, dB, dC)

dC.to_host()

stream.synchronize()

cuda_time = (timer() - start)

print

print("Numpy took %f seconds" % numpy_time)

print("CUDA JIT took %f seconds, %.5fx speedup" % (cuda_time, numpy_time / cuda_time))

结果:

^{pr2}$

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值