[英]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内核),但要快得多。
编辑
我记得刚才碰到了这篇文章
这可能有助于说服您错误的实现(由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.