调用cuMemcpyDtoH会导致带有Numba guVectorize标记的未知错误

2024-09-29 23:15:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图得到一个python双边过滤器,我写的工作在我的GPU上,但我不断遇到错误,我得到了一个对我来说非常神秘的。当我运行代码时,我得到

Call to cuMemcpyDtoH results in UNKNOWN_CUDA_ERROR

从其他帖子来看,似乎是内存问题?但是,由于我没有在cuda中编写代码,也没有弄乱内存(我只是添加了一些标签,让它在GPU上运行),所以我不确定解决这个问题的最佳方法是什么。我是否错误地将代码转换为在GPU上运行

import numpy as np
import cv2
import sys
import math
import cmath
import tqdm
from numba import jit, cuda, vectorize, guvectorize, float64, int64

sIntesity = 12.0
sSpace = 16.0
diameter = 100

@guvectorize([(float64[:,:], float64[:,:])],  '(n,m)->(n,m)',target='cuda',nopython =True)
def apply_filter(img, filteredImage):

    #imh, imw = img.shape[:2]
    imh = 600
    imw = 600
    hd = int((diameter - 1) / 2)

    for h in range(hd, imh - hd):
        for w in range(hd, imw - hd):
            Wp = 0
            filteredPixel = 0
            radius = diameter // 2
            for x in range(0, diameter):
                for y in range(0, diameter):

                    currentX = w - (radius - x)
                    cureentY = h - (radius - y)

                    intensityDifferent = img[currentX][cureentY] - img[w][h]
                    intensity = (1.0/ (2 * math.pi * (sIntesity ** 2))* math.exp(-(intensityDifferent ** 2) / (2 * sIntesity ** 2)))
                    foo = (currentX - w) ** 2 + (cureentY - h) ** 2
                    distance = cmath.sqrt(foo)
                    smoothing = (1.0 / (2 * math.pi * (sSpace ** 2))) * math.exp( -(distance.real ** 2) / (2 * sSpace ** 2))
                    weight = intensity * smoothing
                    filteredPixel += img[currentX][cureentY] * weight
                    Wp += weight

            filteredImage[h][w] = int(round(filteredPixel / Wp))


if __name__ == "__main__":
    src = cv2.imread("messy2.png", cv2.IMREAD_GRAYSCALE)
    src = src.astype(float)
    filtered_image_own = np.zeros(src.shape)
    print(type(src),type(filtered_image_own))
    apply_filter(src, filtered_image_own)
    filtered_image_own = filtered_image_own.astype(np.uint8) 
    cv2.imwrite("filtered_image4.png", filtered_image_own)

Tags: inimageimportsrcimgforrangemath

热门问题