我一直在成功使用GPU支持OpenCV一段時間,但是,我遇到了一個我似乎無法修復的情況。在用VS 2013和CUDA 8.0構建OpenCV 3.3之後,OpenCV cpu和gpu似乎可以在我的幾臺測試機器GTX 750 Ti和GTX 950M(都使用Windows 10)上正常工作。在另一臺裝有GTX 1050 Ti的機器上,CPU調用工作正常,但是在我的第一個OpenCV-cuda函數調用中出現「無效的設備函數」。在CMake中,我調整了CUDA_ARCH_BIN和CUDA_GENERATION變量並進行了重建,但似乎無法爲這臺機器找到解決方案。我已經更新了NVidia圖形驅動程序,嘗試CUDA_ARCH_BIN在3.0,3.5,3.7,5.0和開普勒,麥克斯韋的CUDA_GENERATION,並且是空的。所有工作都在兩臺測試機器上,並且在第三臺機器上出現同樣的錯誤。我在網上發現的一切都表明,這是由於GPU的計算能力與CUDA_ARCH_BIN設置不匹配造成的。我認爲如果我爲5.0/Maxwell設置,它將在Maxwell,Pascals和更新的版本上運行。唯一的其他變量是1050 Ti在Windows 7機器上運行,我祈禱這不是問題。或者,VS2013,Cuda 8.0和/或OpenCV 3.3之間可能存在不兼容問題?任何想法將不勝感激。OpenCV Cuda「無效的設備功能」第一次撥打電話
0
A
回答
1
感謝@RobertCrovella提供正確的答案。只需在CMAKE的CUDA_ARCH_BIN列表中添加6.1即可解決問題。所以我最終使用的是 CUDA_ARCH_BIN = 5.0,5.2,6.0,6.1(因爲我只對Maxwell和Pascal感興趣) ,我離開CUDA_GENERATION爲空。如果你爲CUDA_GENERATION選擇了一些東西,它會自動爲你填充CUDA_ARCH_BIN ...對我來說,它給了我比我想要的更多的東西。
備註:我注意到,您添加到CUDA_ARCH_BIN的架構越多,OpenCV dll變得越大。這正好支持羅伯特在評論中所說的話。看起來,對於列表中的每個體系結構,該體系結構的特定代碼都會添加到dll中。如果您沒有在列表中放置拱門,代碼將無法在該拱門上運行。
現在一切似乎都很明顯。
再次感謝羅伯特!
對於那些有興趣,這裏是我的cmake CUDA設置:
相關問題
- 1. Android設備上每分鐘撥打電話功能
- 2. PhoneGap的功能/插件撥打電話
- 3. 無法檢測CUDA功能的設備在OpenCV中GPU
- 4. 從兩個地方撥打電話時只撥打一次電話
- 5. 撥打電話
- 6. 撥打外撥電話
- 7. 使用Reactivecocoa只能撥打一次電話
- 8. 不能打電話的「+(無效)」函數功能在Xcode
- 9. ViewPager多次撥打電話 - Android
- 10. 如何多次撥打電話說法
- 11. iPhone:撥打電話
- 12. PhantomJS:撥打電話
- 13. 無法撥打mod_roster_odbc功能
- 14. 什麼是錯誤的,我的功能來撥打電話
- 15. ResponsiveVoice爲多個話語只撥打一次電話號碼
- 16. 每次啓動應用程序只需撥打一次電話
- 17. 撥打電話時撥打電話號碼。
- 18. 撥打電話時是否可以撥打電話號碼?
- 19. 撥打電話作爲選項撥打電話記錄
- 20. 重新撥打電話與撥打電話
- 21. 我第一次打電話給DLL
- 22. 快速撥號後只撥打一次功能
- 23. 功能的第一個電話
- 24. CUDA 「無效的設備的符號」
- 25. Javascript:檢測設備是否可以撥打電話
- 26. iOS手機通過越獄設備撥打電話
- 27. 如何判斷Cocoa Touch設備是否可以撥打電話?
- 28. Android:撥打一個自定義號碼,一旦撥打電話
- 29. CUDA:無效的設備序號
- 30. 無效的設備符號cudaMemcpyFromSymbol CUDA
我建議增加拱6.1 /帕斯卡爾,因爲我在寫這個問題,這是發生在我的帕斯卡爾1050設備 –
@RobertCrovella可能是問題。我認爲將CUDA_ARCH_BIN設置爲3.0,3.2,3.5,3.7,5.0,5.2可以在6.1卡上工作。我想可能*你想覆蓋的每一個*計算能力必須在列表中?無論如何...現在建設,並會報告回來。 –
這取決於cmake如何將這些條目轉換爲實際的CUDA構建開關。如果它指定包含PTX,那麼您是正確的。如果沒有,我是正確的。由於「無效設備功能」錯誤是一個非常明確的跡象,表明在構建的圖像中不存在合適的PTX,我傾向於相信我是正確的,並與您自己的聲明一致:「我在網上找到的所有內容這是由GPU的計算能力與CUDA_ARCH_BIN設置之間的不匹配造成的「 –