簡體   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