【问题标题】:CUDA/Python: conversion error for matrix operationCUDA/Python:矩阵运算的转换错误
【发布时间】:2016-01-19 13:15:52
【问题描述】:

我正在尝试使用 NumbaPro CUDA Python 在矩阵上执行一个非常基本的邻域算法。

功能:

@autojit(target="gpu")    
def removeNeighboursMatCUDA(tmp_frame):
    for j in range(255):
        for i in range(255):
            if tmp_frame[i][j]!=0:
                if tmp_frame[i+1][j]!=0: 
                    tmp_frame[i][j]=0
                    tmp_frame[i][j+1]=0
                if tmp_frame[i][j+1]!=0:
                    tmp_frame[i][j]=0
                    tmp_frame[i+1][j]=0
                if tmp_frame[i+1][j+1]!=0:
                    tmp_frame[i][j]=0
                    tmp_frame[i+1][j+1]=0
                if i>0 and tmp_frame[i-1][j-1]!=0:
                    tmp_frame[i][j]=0
                    tmp_frame[i-1][j-1]=0
    return tmp_frame

函数输入是一个二维数组(256x256):

tmp_frame = coo_matrix((c_tmp,(x_tmp,y_tmp)),shape=(256,256)).todense()
M = removeNeighboursMatCUDA(tmp_frame)

当目标是 CPU 时,此代码执行没有任何问题,但对于 GPU,我收到以下错误:

TypingError: No conversion from array(int16, 2d, C) to none for '$333.2'

我找不到有关此错误的任何信息。任何人都知道出了什么问题或问题可能是什么?

EDIT:错误是由return 语句引起的。删除return 可以修复代码。

【问题讨论】:

    标签: python numba numba-pro


    【解决方案1】:

    我自己发现的。如编辑中所述,问题在于return 语句。下面附上固定代码:

    @jit(target="gpu")  
    def removeNeighboursMatCUDA(tmp_frame,res_frame):
        for j in range(255):
            for i in range(255):
                if tmp_frame[i][j]!=0:
                    if tmp_frame[i+1][j]!=0: 
                        res_frame[i][j]=0
                        res_frame[i][j+1]=0
                    if tmp_frame[i][j+1]!=0:
                        res_frame[i][j]=0
                        res_frame[i+1][j]=0
                    if tmp_frame[i+1][j+1]!=0:
                        res_frame[i][j]=0
                        res_frame[i+1][j+1]=0
                    if i>0 and tmp_frame[i-1][j-1]!=0:
                        res_frame[i][j]=0
                        res_frame[i-1][j-1]=0
        tmp_frame=res_frame
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 2017-09-26
      • 2020-02-28
      • 2011-07-22
      • 1970-01-01
      • 2012-02-19
      • 2016-04-14
      相关资源
      最近更新 更多