2017-02-16 111 views
1

我正在嘗試使用CUDA支持構建opencv以將cuda::SURF_CUDAcv::xfeatures2d::SURF,but it's challenging進行比較。cuda :: SURF_cuda比cv :: xfeatures2d :: SURF更快嗎?

但是,假設我想獲得高性能實時應用程序的SURF描述符。是的,我知道FAST或ORB是更合適的描述符,但它們是二進制文件,我需要歐幾里得描述符。

無論如何,重點是我想知道這兩個實現中的哪一個更快,只要給出一個(查詢)圖像就可以得到更快的。我認爲這很重要,因爲有人告訴我CUDA只有在需要處理大量圖像時才合理使用,因爲與計算描述符的時間相比,在GPU內存中加載它們的時間變得很小,但是我沒有知道這是否屬實。

另一個原因,因爲我發佈這是因爲我只有一個NVIDIA GT755m,它不是一個高級的GPU,所以我的結果可能不太好,因爲這個原因。另一方面,我試圖改進cv::xfeatures2d::SURF的並行部分(並在64核Xeon Phi上測試它)。

+0

它是,當然你總是依賴於硬件。你有沒有試過尋找你的GT 755m的規格,並與你的CPU進行比較?它應該給你一個提示。但無論如何,我不相信CPU版本會受益於您擁有的64個內核。 – NAmorim

+0

@NAmorim感謝您的評論。我不是CUDA專家(實際上我幾乎一無所知),但是當我們談論GPU應用程序時,我們不應該考慮在我們的數據(圖像查詢)中加載開銷(我們無法擺脫) GPU內存(或類似的東西)?然後,當我們談論將內容加載/保存到另一個內存(特別是從/到HD)時,這將非常昂貴。我錯過了什麼嗎? – justHelloWorld

+0

因爲我不是專家,所以我不是最好的人來討論這個問題。但是你是對的,將數據從一個地方傳輸到另一個地方的確有開銷。但是從我玩CPU/GPU並行的經驗來看,在CPU上你有更低的開銷,但也有軟並行(想象最多4個核心),GPU上的開銷更高但攻擊性並行(我相信你的情況下有300+核心) – NAmorim

回答

1

「加載它們在GPU內存的時間相比時間計算的描述變小」 - OP

是的,你是正確的。請參閱herehere以解釋爲什麼CUDA內核在第一次運行時似乎很慢。

對於您的應用程序,它將完全取決於您正在運行代碼的CPU和GPU以及CPU和GPU代碼編寫的程度。就像@NAmorim所說的那樣,它將取決於你的代碼產生多少開銷以及它能夠利用多少並行。

請注意,它也可能取決於您處理的功能數量,因爲這會影響CPU/GPU計算時間以及大部分GPU開銷(請考慮將描述符上傳/下載到GPU)。