PyCUDA数组点乘

mport pycuda.gpuarray as gpuarray
import pycuda.driver as drv
import pycuda.autoinit
import numpy
import time

n=10
a=numpy.float32(numpy.random.randint(1,5,(n,n)))
b=numpy.float32(numpy.random.randint(1,5,(n,n)))
       
tic=time.time()
axb=a*b

toc=time.time()-tic
print("Dot Product on CPU")
print(toc,"s")

start = drv.Event()
end=drv.Event()
start.record()
a_gpu = gpuarray.to_gpu(a)
b_gpu = gpuarray.to_gpu(b)
axbGPU = gpuarray.dot(a_gpu,b_gpu)
end.record()
end.synchronize()
secs = start.time_till(end)*1e-3
print("Dot Product on GPU")
print("%fs" % (secs))
if(numpy.sum(axb)==axbGPU.get()):
    print("The computed dor product is correct")

两个向量各有100个元素,用随机整数初始化以计算点乘,用Python 的time模块来计算点乘所需的时间。*运算符用于计算两个向量的元素相乘,其结果相加以计算整体点乘。请注意,numpy.dot方法只用于矩阵乘法,而不能用于点乘。
使用to_gpu方法将两个向量上传给GPU执行点乘计算。gpuarray类提供了一个点乘方法可以直接计算点乘,需要两个GPU数组作为参数,使用get()方法将计算结果下载回主机。计算结果和使用CUDA事件测量的时间显示在控制台。

你可能感兴趣的:(PyCUDA,python,cuda)