繁体   English   中英

为什么对于简单的阈值设置,我的OpenCV CUDA运行速度比CPU慢?

[英]Why my OpenCV CUDA is running slower than CPU for simple thresholding?

我的CPU是Intel Core2 Duo T5550,GPU是GeForce 8400MG。CUDA版本5.5.22,OpenCV版本2.4.8。

测试代码如下:

double t = (double)getTickCount();

gpu::threshold(src, dst, thres, binMax, THRESH_BINARY);

t = ((double)getTickCount() - t)/getTickFrequency();
cout << "Times passed in seconds: " << t << endl;

对于3648 * 2736的图像,结果是

CPU: Times passed in seconds: 0.0136336
GPU: Times passed in seconds: 0.0217714

谢谢!

也许这并不令人惊讶。

GeForce 8400M G是仅具有8个内核的旧移动卡,请参阅GeForce 8M系列规格 ,因此您不能从中提取太多的并行性。

简而言之,当您能够通过大量内核大规模提取并行性时,GPU优于多核CPU。 换句话说,要通过缓慢的从属(GPU内核)快速建立埃及金字塔,您需要大量的从属。 如果只有很少的慢速从属(在您的情况下为8个),那么最好有更少的从属(例如2个CPU内核),但要快得多。

编辑

我记得刚才碰到了这篇文章

在GPU中寻找最小值要比CPU慢

这可能有助于说服您错误的实现(由Abid Rahman和Mailerdaimon强调)可能导致GPU代码比CPU代码慢。 如上面回答中所指出的,如果您在已经有限的GeForce 8400M G卡上还托管X显示器,情况就更糟了。

除了@JackOLantern所说的:

每个涉及GPU的复制操作都需要时间! 与仅使用CPU进行计算相比,要花费很多时间。 这就是@Abid Rahman K评论是一个好主意的原因,他建议使用更复杂的Code再次进行测试。 GPU的优势在于快速并行处理,其缺点是在与GPU之间复制数据时传输速率相对较低。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM