OpenCV CUDA模块设备层-----检查 CUDA 错误并输出调试信息内联函数checkCudaError()
- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
在主机端(Host)检查 CUDA API 调用是否返回错误,并在出错时打印错误信息和调用堆栈,然后终止程序。
它类似于标准的 CUDA 错误检查宏(如常见的 cudaCheckError() 或 checkCudaErrors()),但它是 OpenCV 内部实现的一个封装。
函数原型
__host__ __forceinline__ void cv::cudev::checkCudaError
(cudaError_t err,const char * file,const int line,const char * func
)
参数
参数名 | 类型 | 描述 |
---|---|---|
err | cudaError_t | CUDA API 返回的错误码(如 cudaSuccess, cudaErrorMemoryAllocation 等) |
file | const char* | 当前源文件名(通常由 FILE 宏传入) |
line | int | 当前行号(通常由 LINE 宏传入) |
func | const char* | 当前函数名(可选,可以传入 FUNCTION 或 “”) |
代码示例
#include <opencv2/core/cuda.hpp>
#include <opencv2/cudev/common.hpp> // 包含 checkCudaError 和 CV_CUDEV_SAFE_CALL
#include <iostream>using namespace cv::cudev;// 示例函数:分配 GPU 内存并进行简单操作
void testGpuMemory() {float* d_data = nullptr;size_t size = 1024 * 1024 * 10; // 分配 10MB 空间(合理大小)std::cout << "Allocating GPU memory..." << std::endl;CV_CUDEV_SAFE_CALL(cudaMalloc(&d_data, size));std::cout << "Setting memory to zero..." << std::endl;CV_CUDEV_SAFE_CALL(cudaMemset(d_data, 0, size));std::cout << "Freeing GPU memory..." << std::endl;cudaFree(d_data);
}int main() {try {testGpuMemory();std::cout << "GPU memory operations succeeded." << std::endl;} catch (...) {std::cerr << "An exception occurred during GPU operation." << std::endl;return -1;}return 0;
}
运行结果
Allocating GPU memory...
Setting memory to zero...
Freeing GPU memory...
GPU memory operations succeeded.