CUDA/Python: ошибка преобразования для матричной операции
Я пытаюсь выполнить очень простой алгоритм соседа на матрице, используя 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)
Этот код выполняется без проблем, когда целью является процессор, но для графического процессора я получаю следующую ошибку:
TypingError: No conversion from array(int16, 2d, C) to none for '$333.2'
Я не могу найти ничего об этой ошибке. Кто-нибудь знает, что не так или в чем может быть проблема?
РЕДАКТИРОВАТЬ: ошибка вызвана return
заявление. Удаление return
исправляет код
1 ответ
Я сам это выяснил. Как уже говорилось в 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