numpy比pandas运算快,numpy速度快的原因
要使用数字报创建简单的矩阵向量乘法:
从数字报进口库达
来自数字迷情导入*
导入编号为公证人
导入匹配
fromtimeitimportdefault _ timerastime
n=100
@cuda .JIT(void ) float 32 [ : ]、float 32 [ : ]、float 32 [ : ])
EFCu_matrix_vector(a,b,c):
y,x=cuda.grid (2((2)2)))))))))))))。
如果是n:
c[y]=0.0
如果x n和y n:
forIinrange(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。至_设备(三)
Cu_matrix_vector(da,dB,dC))。
dC.to_host()
e=time())
tcuda=e - s
但是,我得到了以下错误:
numba pro。cuda drv。错误。cudadrivererror:cuda _ error _ launch _ failedfailedtocopymemoryd-h
我不知道为什么主机复制的设备失败了。请帮帮我
解决方法:
代码有多个问题。
b向量和c向量是Nx1 2D矩阵而不是1D向量,但在内核类型签名中列为"浮舟32[:]”——1D向量。此外,还使用单个索引创建索引,从而导致国家政治保卫局。参见国家政治保卫局上的运行时错误()
你的内核假设是2D网格,但只使用那一列。这意味着许多线程进行相同的计算,并相互覆盖
由于未给出运行配置,NumbaPro正在启动包含一个线程的内核(nvprof是你的朋友!)
这是有效的代码。请注意,这是使用1D网格的1D网格,在矩阵列中循环。因此,在向量/矩阵行数较多的情况下进行了优化。针对短矩阵和宽矩阵优化的内核需要不同的方法(并行缩小)。但是,我要用库布拉斯斯盖姆夫。(
从数字报进口库达
来自数字迷情导入*
导入编号为公证人
导入匹配
fromtimeitimportdefault _ timerastime
m=100000
n=100
@ cuda .JIT (void (F4 [ : ]、F4 [ : ]、F4 [ : ]))
EFCu_matrix_vector(a,b,c):
row=cuda.grid(1)))))。
if(rowm):
总和=0
forIinrange(n):
sum=A[row,i] * b[i]
c[行]=总和
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。至_设备(三)
Cu _ matrix _ vector [ [ m511 ]/512,512 ] [ da,dB,DC]
dC.to_host()
打印C
e=time())
tcuda=e - s
标签:python、numpy、cuda、numba、numba-pro
资料来源https://codeday.me/bug/2019 05 17 1120484。超文本标记语言
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。