【问题标题】:calculate Matrix Vector multiplication with python in cuda在 cuda 中用 python 计算矩阵向量乘法
【发布时间】:2017-09-24 23:36:32
【问题描述】:

我正在尝试使用 numbapro 在下面编写一个简单的矩阵向量乘法:

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)

但是当我开始运行时,函数 **cu_matrix_vector ** 参数 2: 错误类型出现错误

cu_matrix_vector[(m+511)/512, 512](dA, dB, dC) 调用中的文件“C:\Anaconda3\lib\site-packages\numba\cuda\compiler.py”,第 359 行 sharedmem=self.sharedmem) _kernel_call 中的文件“C:\Anaconda3\lib\site-packages\numba\cuda\compiler.py”,第 433 行 cu_func(*内核参数) 调用中的文件“C:\Anaconda3\lib\site-packages\numba\cuda\cudadrv\driver.py”,第 1116 行 self.sharedmem,流句柄,参数) 文件“C:\Anaconda3\lib\site-packages\numba\cuda\cudadrv\driver.py”,第 1160 行,在 launch_kernel 没有) 文件“C:\Anaconda3\lib\site-packages\numba\cuda\cudadrv\driver.py”,第 221 行,在 safe_cuda_api_call retcode = libfn(*args) ctypes.ArgumentError: 参数 2: : 错误类型

【问题讨论】:

    标签: python-3.x cuda numba numba-pro


    【解决方案1】:

    问题出在这里:

    cu_matrix_vector[(m+511)/512, 512](dA, dB, dC)
    

    在 Python 3 中,(m+511)/512 = 196.310546875。将浮点值作为启动参数传递是非法的,这是您看到的类型冲突错误的根源。你想做的事:

    cu_matrix_vector[(m+511)//512, 512](dA, dB, dC)
    

    这将产生一个整数值并且应该允许代码正确运行。

    【讨论】:

      猜你喜欢
      • 2013-09-02
      • 2011-08-23
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多