我一直在我的程序中使用OpenCV的GPU模塊(cuda),它工作正常。現在我將我的顯卡升級爲gtx970。現在,我啓動程序後第一次調用cv :: gpu :: GpuMat :: upload,我得到了很長的延遲。用我的舊顯卡(GTX770)幾乎可以立即完成。C++:cv :: gpu上的長延遲::升級到GTX970後的GpuMat :: upload
示例:我有一個尺寸爲512x600像素的圖像。有了這張圖片,它需要12秒。如果我之後再次執行相同的代碼而沒有關閉程序,它會立即執行。我知道,在啓動程序後第一次執行CUDA代碼時,它會在GPU上編譯,因此一定的延遲是正常的。但對我來說,這似乎是莫名其妙的長時間,尤其是因爲舊卡的速度更快。
有誰知道什麼會導致這種行爲?目前的OpenCV版本有沒有與GTX970卡有關的已知問題?我使用的版本是2.4.10,除3.0beta之外,最新版本。
我現在也發現有特別支持GTX970和GTX980顯卡的CUDA工具包的發佈:
https://developer.nvidia.com/cuda-dow ...
我下載它,並與一個重新編譯的OpenCV。不幸的是,這並沒有解決我的問題。不知何故,我已經感覺它現在需要更長時間了。
這裏有誰有任何GTX900卡和OpenCV的經驗嗎?
這是代碼,如果任何人希望看到它:
if (_cudaAvailable){
try{
_gpuUploadMutex.lock();
//upload image channels to the gpu if using cuda
cv::gpu::GpuMat gpuMat;
gpuMat.upload(_originalImage);
cv::gpu::split(gpuMat, _originalImageChannelsCuda);
_gpuUploadMutex.unlock();
std::cout << "Image uploaded to GPU successfully" << std::endl;
}
catch (...){
std::cerr << "Error occured while using CUDA, falling back to CPU. (Insufficient video RAM?)" << std::endl;
_cudaAvailable = false;
_gpuUploadMutex.unlock();
}
}
沒什麼特別的。引起初始延遲的代碼行是gpuMat.upload。
你自己編譯的OpenCV獲得CUDA庫支持?你重新編譯openCV嗎?兩個顯卡是否都支持不同的架構? – Micka
如果您上傳第二張圖片(不是同一張圖片)是否還有其他延遲? – Micka
這聽起來像是你正在碰撞JIT編譯延遲。即使是新的工具包也不會修復它,如果你不用必要的開關('-arch = sm_52')重新編譯你的閃亮的新麥克斯韋。 –