gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:37:41 24 4
gpt4 key购买 nike

我正在尝试对图像中的所有像素求和,并使用 CUDA NPP 库获取所有像素的平均值。我的图像是尺寸为 w256 x h10248 位 unsigned char 灰度图像。我已尝试遵循声明指针并将相应的 NPP 类型指针传递给 NPP 函数的所有必需规则。

但是,当我对我的代码执行 GPU 错误检查时,我遇到了一个未知错误。我试图调试它,但我似乎无法弄清楚我哪里出错了,我需要一些帮助吗?

除此之外,我还使用 OpenCV 进行处理,因此会出现一些 OpenCV 代码。

编辑:代码已更新

#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 %d\n", 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

关于c++ - CUDA NPP - GPU 错误检查时出现未知错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22546805/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com