4000-520-616
欢迎来到免疫在线!(蚂蚁淘生物旗下平台)  请登录 |  免费注册 |  询价篮
主营:原厂直采,平行进口,授权代理(蚂蚁淘为您服务)
咨询热线电话
4000-520-616
当前位置: 首页 > 新闻动态 >
新闻详情
python – Numba矩阵向量乘法
来自 : www.icode9.com/content-1-1932. 发布时间:2021-03-25
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.cudadrv.error.CudaDriverError: CUDA_ERROR_LAUNCH_FAILED Failed to copy memory D- H

我不明白为什么主机副本的设备失败.请帮忙

解决方法:

您的代码有多个问题.

B和C向量是Nx1 2D矩阵,而不是1D向量,但是内核的类型签名将它们列为“float32 [:]” – 1D向量.它还使用单个索引对它们编制索引,由于访问不对齐而导致GPU上的运行时错误(cuda-memcheck是您的朋友!)
你的内核假设一个2D网格,但只使用它的一列 – 这意味着许多线程进行相同的计算并相互覆盖.
没有给出执行配置,因此NumbaPro正在启动一个包含1个1个线程的内核. (nvprof是你的朋友!)

这是一个有效的代码.请注意,这使用1D网格的1D网格,并在矩阵的列上循环.因此,它针对向量/矩阵中的行数较大的情况进行了优化.针对短矩阵和宽矩阵进行优化的内核需要使用另一种方法(并行缩减).但我会使用CUBLAS sgemv(也在NumbaPro中公开).

from numbapro import cudafrom numba import *import numpy as npimport mathfrom timeit import default_timer as timem = 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] = sumA = 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 Ce = time()tcuda = e - s

2019年5月17日我正在尝试使用numbapro编写一个简单的矩阵向量乘法: fromnumbaproimportcudafromnumbaimport*importnumpyasnpimportmathfromtimeitimportdefault_tim...python – Numba矩阵向量乘法我正在尝试使用numbapro编写一个简单的矩阵向量乘法:fromnumbaproimportcudafromnumbaimport*importnumpyasnpimportmathfromtimeitimportdefault_timerastimen=100@cuda.jit('void(float32[:,:],float32[:],float32[:])')defcu_matrix_vector(A,b,python – Numba矩阵向量乘法

本文链接: http://procudan.immuno-online.com/view-771295.html

发布于 : 2021-03-25 阅读(0)