Python 矩阵向量乘法
我尝试使用numbapro编写一个简单的矩阵向量乘法,如下所示:Python 矩阵向量乘法,python,numpy,cuda,numba,numba-pro,Python,Numpy,Cuda,Numba,Numba Pro,我尝试使用numbapro编写一个简单的矩阵向量乘法,如下所示: from numbapro import cuda from numba import * import numpy as np import math from timeit import default_timer as time n = 100 @cuda.jit('void(float32[:,:], float32[:], float32[:])') def cu_matrix_vector(A, b, c):
from numbapro import cuda
from numba import *
import numpy as np
import math
from timeit import default_timer as time
n = 100
@cuda.jit('void(float32[:,:], float32[:], float32[:])')
def cu_matrix_vector(A, b, c):
y, x = cuda.grid(2)
if y < n:
c[y] = 0.0
if x < n and y < n:
for i in range(n):
c[y] += A[y, i] * b[i]
A = np.array(np.random.random((n, n)), dtype=np.float32)
B = np.array(np.random.random((n, 1)), dtype=np.float32)
C = np.empty_like(B)
s = time()
dA = cuda.to_device(A)
dB = cuda.to_device(B)
dC = cuda.to_device(C)
cu_matrix_vector(dA, dB, dC)
dC.to_host()
e = time()
tcuda = e - s
从numbapro导入cuda
从一个进口*
将numpy作为np导入
输入数学
从timeit导入默认的\u计时器作为时间
n=100
@jit('void(float32[:,:],float32[:],float32[:]))
def cu_矩阵_向量(A、b、c):
y、 x=cuda.grid(2)
如果y
但我得到了以下错误:
numbapro.cudadrv.error.CUDADRIVERROR:CUDA\u错误\u启动\u复制内存D->H失败
我不明白为什么设备到主机的拷贝失败了。请帮助您的代码有多个问题
cuda memcheck
是您的朋友!)nvprof
是您的朋友!)sgemv
(它也在NumbaPro中公开)
从numbapro导入cuda
从一个进口*
将numpy作为np导入
输入数学
从timeit导入默认的\u计时器作为时间
m=100000
n=100
@jit('void(f4[:,:],f4[:],f4[:]))
def cu_矩阵_向量(A、b、c):
行=cuda.grid(1)
如果(行
即使进行了编辑,我仍然会遇到同样的错误。具体错误是:回溯(最近一次调用last):dC.to_host()中文件“matrixVector.py”第34行中的文件“”第1行未能复制内存D->hyu是正确的。实际上还有更多的问题——我重写了我的答案。
from numbapro import cuda
from numba import *
import numpy as np
import math
from timeit import default_timer as time
m = 100000
n = 100
@cuda.jit('void(f4[:,:], f4[:], f4[:])')
def cu_matrix_vector(A, b, c):
row = cuda.grid(1)
if (row < m):
sum = 0
for i in range(n):
sum += A[row, i] * b[i]
c[row] = sum
A = np.array(np.random.random((m, n)), dtype=np.float32)
B = np.array(np.random.random(m), dtype=np.float32)
C = np.empty_like(B)
s = time()
dA = cuda.to_device(A)
dB = cuda.to_device(B)
dC = cuda.to_device(C)
cu_matrix_vector[(m+511)/512, 512](dA, dB, dC)
dC.to_host()
print C
e = time()
tcuda = e - s