问题
This is my first post, please accept my apologies if I am unclear or fail to completely abide with posting rules. I have in any case sought far and wide in prep for my own question.
Working with:
- Windows 7 Enterprise version 6.1.7600
- Intel Xeon CPU Quadcore 3.07GHz
- NVidia Quadro 4000 GPU
- CUDA v5.0 Toolkit for Windows x64 build
- OpenCV v2.4.4
- OpenCV Cuda Package belonging to opencv v2.4.4
- Microsoft Visual Studios C++ 2010 Express ('vc10')
- (!) Without CMake (!)
steps, tutorials & checks I've done:
- I have installed and configured software I required for opencv 2.4.4 following the opencv.org tutorial....
- with vc10, following the opencv.org tutorial on building opencv in vc10 (applying the there-described global method and placing the gpu-related dlls on top), but
- I have not installed CMake software and never had any need for it, until I attempted moving calculations to the gpu.
- I've furthermore copy-pasted all the .dll files I'm applying in this vc10-solution into the 'Debug'-folder (placed in the same folder as where the .sln file of this solution is).
- Lastly, I've followed the NVidia developer Zone CUDA 5.0 Getting Started Guide up to the 'Verify Installation' paragraph, with successful outcome, and also configured the Build configurations to include CUDA compilation following the 'build customization for existing projects' instructions.
This question is about trying to speed up a win32 console .cpp that I've made in debug-mode (i.e. an visual studios solution using the win32 OpenCV library a rather simple image processing project, but with a blur with a large kernel that's taking much time) by making it run on the gpu. However, I am experiencing trouble running opencv with cuda 5.0 (even though OpenCV Cuda Package's readme.txt tells me to download and install Cuda 5.0).
Upon compiling and running in vc10 (=hitting F5, with Win32 Platform) - or likewise upon running the corresponding .exe executable-, I get an system error saying that "The program could not be started because cudart32_42_9.dll is missing on my computer".
Apparantly , even though opencv's readme tells me to use cuda5.0, it's still looking for the cuda-libraries belonging to 32bits cuda 4.2 toolkit (cudart 32 _42_9.dll) - and obviously not finding them because they're not installed.
In this question it is mentioned that OpenCV v2.4.4 simply hasn't been compiled with cuda 5.0 and the only way to make this run is to compile my own libraries using CMake.
My Question:
I am wondering if in the meantime allowing OpenCV v2.4.4 to run using x64 cuda 5.0 has become possible but WITHOUT having to compile my own libraries using CMake.
I would kindly like to ask any of you to share with me precisely what steps to take. In your solution, please write in detail, as this is only my third week of using C++ language, compilers libraries dlls and all such.
Many thanks in advance!
EDIT
This question has actually now (due to @talonmies 's comment) become much more like a question asked by
- user 'duttasankha' titled 'OpenCV with cuda MS Visual Studio 2008', and
- user 'zebullon' titled 'Do I need a 64 bit SDK on a 64 bit machine'.
回答1:
In order to fully answer my own question:
I have been able to get CUDA 5.0 running without having to compile anything myself (e.g. without having to use CMake) or reinstalling any GPU driver software.
I followed - amongst others – duttasankha and zebullon’s posts (I named these in the EDIT in my question) and took an extra, small leap of faith.
I downloaded the 32 bits CUDA 4.2 SDK (software development kit, available on the same site as the other CUDA downloads) and installed/extracted it. This is noteworthy because I had a newer CUDA Toolkit and driver version (5.0) installed, which was 64bits!
I looked (windows search function) for where the SDK files had been extracted and found cudart32_42_9.dll in the C:...\My Documents\NVIDIA GPU Computing SDK 4.2\C\common\bin folder.
- I copied all of the 32bits dll's in this folder (all the dll's whose names end on '32_42_9.dll') and placed them (together with the opencv-dll's I mention in the summary in my question above) in the folder named 'Debug' which is positioned in the same folder in which the .sln solution-file of this project is (this is the folder where Visual Studios always places the .exe executable files belonging to the project). I copied all of them because even though I only got the message that this one cudart-dll was missing, the gpu functions in opencv need all of the copied dll’s.
- I had already completed the directions concerning the required Visual Studios settings. (see opencv.org tutorial on enabling Visual Studios 2010, doing so the global (not local) way, also see this guide. But now, in the Linker; Input; Additional Dependancies field I completed my dependencies list with the cuda-related libraries. It looked like this: C:\opencv\build\x86\vc10\lib\opencv_gpu244d.lib C:\opencv\build\x86\vc10\lib\opencv_core244d.lib C:\opencv\build\x86\vc10\lib\opencv_highgui244d.lib C:\opencv\build\x86\vc10\lib\opencv_video244d.lib C:\opencv\build\x86\vc10\lib\opencv_ml244d.lib C:\opencv\build\x86\vc10\lib\opencv_legacy244d.lib C:\opencv\build\x86\vc10\lib\opencv_imgproc244d.lib Notice that the cuda-related lib’s 'opencv_gpu244d.lib' and 'opencv_core244d.lib' are at the top of this list. (Incidently, this core244d.lib is cuda-related, because this is the opencv core library that came from the OpenCV-2.4.4-CUDA-vc10.7z package I downloaded from Sourceforge.com . Instructions for unpacking/ correct placement are available in the accompanying .text-file in this 7z package from Sourceforge).
- In Visual Studios , in the Project-Folder Explorer, I rightclicked on the name of my project (=vc10 solution) and choose Build-configuration. Here I placed a check in the CUDA 5.0(.targets, .props) which showed corresponding path “ $(VCTargetsPath)\BuildCustomizations\CUDA 5.0.targets “.
Now, running my code does not prompt any more system errors concerning missing DLL’s and the CUDA ‘Initialization and Information ‘ functions from the opencv.org documentation are also functioning in a new test-project I made up to check global functioning of the CUDA set-up.
Apparantly, the Driver and CUDA Toolkit of a newer version know how to cooperate with the DLL of the older version CUDA SDK.
Hope someone else will save some time when they read this. If I missed details in my description of the answer, please let me know.
来源:https://stackoverflow.com/questions/15881912/how-to-enable-cuda-5-0-in-opencv-v2-4-4-and-vc10-without-cmake-and-solve-error