CUDA NPP - GPU错误检查时出现未知错误



我试图将图像中的所有像素相加,并使用CUDA NPP库获得所有像素的平均值。我的像是w256 x h1024维的8-bit unsigned char grayscale像。我试图遵循所有必要的规则来声明指针,并将相应的NPP类型的指针传递给NPP函数。

然而,当我对我的代码执行GPU错误检查时,我得到了unknown error。我试着调试它,但是,我似乎无法弄清楚我在哪里出错,我想要一些帮助,请吗?

我使用OpenCV除此之外做我的处理,因此一些OpenCV代码将存在。

EDIT:代码已更新

#define gpuErrchk(ans) { gpuAssert((ans), __FILE__, __LINE__); }
inline void gpuAssert(cudaError_t code, char *file, int line, bool abort=true)
{
    if (code != cudaSuccess) 
    {
        fprintf(stderr,"GPUassert: %s %s %dn", cudaGetErrorString(code), file, line);
        if (abort) getchar();
    }
}
// process image here 
// device_pointer initializations
unsigned char *device_input;
unsigned char *device_output;    
size_t d_ipimgSize = input.step * input.rows;
size_t d_opimgSize = output.step * output.rows;
gpuErrchk( cudaMalloc( (void**) &device_input, d_ipimgSize) );
gpuErrchk( cudaMalloc( (void**) &device_output, d_opimgSize) );
gpuErrchk( cudaMemcpy(device_input, input.data, d_ipimgSize, cudaMemcpyHostToDevice) );
// Median filter the input image here
// .......
// start summing all pixels 
Npp64s *partialSum = 0; 
partialSum = (Npp64s *) malloc(sizeof(Npp64s));
int bytes = input.cols*input.rows;
Npp8u *scratch = nppsMalloc_8u(bytes);
int ostep = input.step; 
NppiSize imSize; 
imSize.width = input.cols; 
imSize.height = input.rows;
// copy processed image data into a source_pointer
unsigned char *odata; 
odata = (unsigned char*) malloc( sizeof(unsigned char) * input.rows * input.cols);
memcpy(odata, output.data, sizeof(unsigned char) * input.rows * input.cols);
// compute the sum over all the pixels
nppiSum_8u64s_C1R( odata, ostep, imSize, scratch, partialSum );
// print sum 
printf( "n Total Sum cuda %d n",  *partialSum) ;
gpuErrchk(cudaFree(device_input));   // <--- Unknown error here
gpuErrchk(cudaFree(device_output)); 

nppiSum_8u64s_C1R中的partialSum参数应该是设备分配的内存。

进一步分配图像大小的刮擦缓冲区。有一个名为nppiSumGetBufferHostSize_8u64s_C1R的函数可以为您提供刮痧缓冲区的确切大小,该大小可能大于图像本身(对于简单的求和不太可能,但有可能)。

和Cuda一样,总是检查NPP中的返回值。nppiSum_8u64s_C1R可能不会返回NPP_NO_ERROR

最新更新