2014-01-08 39 views
0

我的CPU是Intel Core2 Duo T5550,GPU是GeForce 8400M G. CUDA版本5.5.22,OpenCV版本2.4.8。爲什麼我的OpenCV CUDA比簡單的閾值處理運行速度慢?

測試代碼如下:

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 

謝謝!

+0

而不是隻有一個閾值,應用很多操作,如轉換爲灰度,閾值等等,將所有這些操作的時間比較在一起。檢查是否有任何改進。請讓我們現在。 –

+0

也試試這個答案:http://stackoverflow.com/a/21060370/1134940 –

回答

2

也許這並不令人驚訝。

您的GeForce 8400M G是一款舊型移動卡,只有8個內核,請參見GeForce 8M series specifications,因此您無法從中提取太多的並行性。如果您能夠大量提取大量內核的並行性,那麼GPU的優勢在於多核CPU。換句話說,要通過慢速奴隸(GPU核心)快速建立埃及金字塔,您需要大量的奴隸。如果你只有很少的慢速從站(在你的情況下是8個),那麼或許最好是有更少的(例如2個CPU內核),但是從站速度要快得多。

編輯

我記得剛纔已經碰到了這個帖子

Finding minimum in GPU slower than CPU

這可能有助於說服你,不好的實現(下劃線由阿比德·拉赫曼和Mailerdaimon)可能導致比CPU更慢的GPU代碼。如果您在上面的帖子的答案中指出,您將在您已經有限的GeForce 8400M G卡上託管X顯示器,情況會更糟。

相關問題