2

我正在尝试使用 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'

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

编辑:错误是由return语句引起的。删除return修复代码。

4

1 回答 1

3

我自己发现了。如编辑中所述,问题在于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
于 2016-01-20T13:00:21.787 回答