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

関数の入力は 2D 配列 (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すると、コードが修正されます。

4

1 に答える 1

3

私はそれを自分で見つけました。EDITですでに述べたように、問題は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 に答える