为什么我的OpenCV CUDA运行速度比CPU慢,以便进行简单的阈值处理?

时间:2014-01-08 01:23:15

标签: opencv cuda gpu

我的CPU是Intel Core2 Duo T5550,GPU是GeForce 8400M G. 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

谢谢!

2 个答案:

答案 0 :(得分:2)

也许这并不令人惊讶。

You GeForce 8400M G是一款只有8个核心的旧移动卡,请参阅GeForce 8M series specifications,因此您无法从中提取多少并行性。

粗略地说,当您能够通过大量内核大规模提取并行性时,GPU优于多核CPU。换句话说,要通过慢速奴隶(GPU核心)快速建立埃及金字塔,您需要大量的奴隶。如果您只有很少的慢速从站(在您的情况下为8个),那么可能更好的是拥有更少(例如2个CPU核心),但速度更快,从属。

修改

我记得刚刚碰到这篇文章

Finding minimum in GPU slower than CPU

这可能有助于说服你不好的实现(如Abid Rahman和Mailerdaimon强调的那样)可能会导致GPU代码比CPU代码慢。如果正如上面的帖子中的答案所指出的那样,你在你已经有限的GeForce 8400M G卡上也有X显示器,情况会更糟。

答案 1 :(得分:1)

除了@JackOLantern所说的话:

涉及GPU的每次复制操作都需要时间!与仅用CPU计算相比,有很多时间。这就是为什么@Abid Rahman K评论是一个好主意,他建议再用更复杂的Code进行测试。 GPU的优势在于快速并行处理,开启它的缺点是在向GPU复制数据和从GPU复制数据时传输速率相对较慢。