社区
工具平台和程序库
帖子详情
OpenCV GPU加速cuda初始化耗时太长
lingdu320
2018-02-27 11:42:15
在做OpenCV的GPU加速模块,执行 cudaSetDevice(0);
cudaFree(0);这两句其实是进行cuda初始化,但是耗时长达40多秒,在 http://answers.opencv.org/question/1670/huge-time-to-upload-data-to-gpu/#1676 中看到cuda初始化确实耗时,但是不至于那么长,有大神知道可能是哪儿问题了吗?
...全文
1072
4
打赏
收藏
OpenCV GPU加速cuda初始化耗时太长
在做OpenCV的GPU加速模块,执行 cudaSetDevice(0); cudaFree(0);这两句其实是进行cuda初始化,但是耗时长达40多秒,在 http://answers.opencv.org/question/1670/huge-time-to-upload-data-to-gpu/#1676 中看到cuda初始化确实耗时,但是不至于那么长,有大神知道可能是哪儿问题了吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ClouddRenn
2020-04-09
打赏
举报
回复
int InitCudaLib(int iGpu = 0)
{
ck(cuInit(0));
int nGpu = 0; // 总的GPU的数目
ck(cuDeviceGetCount(&nGpu));
if (iGpu < 0 || iGpu >= nGpu)
{
std::cout << "GPU ordinal out of range. Should be within [" << 0 << ", " << nGpu - 1 << "]" << std::endl;
return -1;
}
CUdevice cuDevice = 0;
ck(cuDeviceGet(&cuDevice, iGpu));
char szDeviceName[80];
ck(cuDeviceGetName(szDeviceName, sizeof(szDeviceName), cuDevice));
std::cout << szDeviceName << std::endl; //打印设备名称测试
for (auto &cuContext : cuContextArr)
{
ck(cuCtxCreate(&cuContext, 0, cuDevice)); //创建当前主机线程的上下文
}
return 0;
}
1、这个是我写的初始化部分代码
2、性能测试可以使用nvprof、nvvp等工具
赵4老师
2018-02-27
打赏
举报
回复
1
初始化时间再长,这辈子做一次不就好了。 就不能初始化好之后,就再也不关闭Device和exe和电脑吗?
赵4老师
2018-02-27
打赏
举报
回复
试试使用驱动精灵软件升级能升级的显卡驱动。
lingdu320
2018-02-27
打赏
举报
回复
是只初始化一次,但是做个应用,因为这个启动就要接近1分钟,有点受不了,在http://www.it1352.com/491157.html 这儿看到人家是毫秒级,我的直接就50秒了
一文彻底搞懂为什么
OpenCV
用
GPU
/
cuda
跑得比用CPU慢?
最近项目需要,发现了这个问题。网上找原因,汇总起来,有以下几点原因:1、首先对于任何一个
CUDA
程序,在调用它的第一个
CUDA
API时后都要花费秒级的时间去
初始化
运行环境,后续还要分配显存,传输数据,启动内核,每一样都有延迟。这样如果你一个任务CPU运算都仅要几十毫秒,相比而言必须带上这些延迟的
GPU
程序就会显得非常慢。2、其次,一个运算量很小的程序,你的
CUDA
内核不可能启动太多的线程,没有足够的线程来屏蔽算法执行时从显存加载数据到
GPU
SM中的时延,这就没有发挥
GPU
的真正功能。
opencv
-
cuda
开发(1):
opencv
-
cuda
对比CPU的
加速
测试
问:为什么会出现使用cv::
cuda
::absdiff的处理函数,运算速度还比不过CPU版本的cv::absdiff?答:使用处理函数时,
CUDA
加速
的性能优势并不是绝对的,它取决于很多因素。数据传输开销:
CUDA
涉及将数据从主机(CPU)传输到
GPU
,以及从
GPU
传输回主机。如果处理的图像大小较小,数据传输的开销可能会导致
CUDA
版本的运算速度比CPU版本慢。启动开销:在
CUDA
版本中,启动
GPU
核函数涉及
GPU
上下文的切换和其他开销,这可能在处理小图像时成为瓶颈。
为什么
opencv
用
GPU
实现比用CPU实现的慢?
打算通过
OpenCV
的
GPU
模块优化现有代码的运行效率,怀抱着美好愿望开始了代码的改写工作。改写的过程并不顺利,遇到了不少问题。例如,
gpu
模块提供的接口非常坑爹,相当一部分不支持浮点类型(像histogram、integral这类常用的都不支持);又如,遇到阈值判断的地方,就必须传回cpu处理,因为
gpu
函数都是并行处理的,每改写完一个算法模块,就测试一下运行效率,有的时候是振奋人心,有的时候则
OpenCV
CUDA
编程Issue:
Gpu
Mat::upload()第一次调用速度很慢问题
文章目录Issue描述Issue分析实验结果总结 Issue描述 之前一直在学习
OpenCV
CUDA
编程,遇到一问题:第一次调用
Gpu
Mat::upload()函数时,速度出奇的慢,大约要2-4分钟才能继续运行,后面调用
Gpu
Mat::upload()函数则没有这个问题。 Issue分析 在网上查找原因,说的最多的就是第一次调用upload()函数需要
初始化
CUDA
,所以第一次花费比较长时间也是合理的。还有另外的说法,即CMake
Opencv
CUDA
库时,没有配置正确
GPU
设备的计算能力值,即配置
[
cuda
技术总结1] 第一次调用
cuda
库函数
耗时
很长
在
cuda
编程中,发现调用
cuda
文件总
耗时
一百多ms,而纯kernel计算时间才3ms。时间都去哪了?查资料,trouble shooting,最后才发现这多出来的时间,就是第一次调用
cuda
api的时间:隐式
cuda
初始化
,加载上下文…2.Linux下将驱动加载的默认模式改成“持久保存”
工具平台和程序库
24,854
社区成员
27,343
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章