当前位置: 首页 > news >正文

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 
) 		

参数

参数名类型描述
errcudaError_tCUDA API 返回的错误码(如 cudaSuccess, cudaErrorMemoryAllocation 等)
fileconst char*当前源文件名(通常由 FILE 宏传入)
lineint当前行号(通常由 LINE 宏传入)
funcconst 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.

相关文章:

  • 网站透明flash竞价推广托管公司介绍
  • 基于php做的网站下载百度客户端电脑版下载
  • 西安网站建设seo怎样上百度做广告
  • wordpress-5.6.20下载关键词排名优化公司
  • 网站怎么做移动图片不显示不出来英文关键词seo
  • wordpress get_search_form()谷歌搜索引擎优化
  • 网络安全攻防:2025年新型钓鱼攻击防御指南
  • 安卓android com.google.android.material.tabs.TabLayout 设置下拉图标无法正常显示
  • Rust 项目实战:单线程 Web 服务器
  • RabbitMQ + JMeter 深度集成指南:中间件性能优化全流程解析!
  • 国际数字影像产业园2.0:数字技术赋能影像文创的生态重构
  • STM32[笔记]--4.嵌入式硬件基础
  • ingress-nginx的443端口不监听了
  • WPF/Net Core 简单显示PDF
  • HTML炫酷烟花
  • 【51单片机外部中断0控制流水灯2次】2022-5-4
  • 【大模型问题】ms-swift微调时,显存持续增长原因分析与解决方案
  • AIoT时代指纹模块的三大颠覆性进化
  • 论文阅读:2025 arxiv Qwen3 Technical Report
  • ros(一)使用消息传递图像+launch启动文件
  • Linux平台Oracle开机自启动设置
  • 【innovus基础】- 对某根线单独route
  • 基于深度学习的双色球智能预测系统:从原理到实现
  • Java并发编程中高效缓存设计的哲学
  • vscode 插件
  • AngularJS 待办事项 App