[英]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.