(tested on Win7 VS2010, Geforce 9800GT).
(for project/solution you still have to follow the howto :P)
Assuming you have at least:
- Windows 7 32bit/64bit (XP?)
- Visual Studio 2010 (not Express Edition)
- Qt 4.7.4 (howto integrate in vs2010)
- CUDA capable gpu (see nvidia)
- CUDA Toolkit 4.0 (32bit or 64bit)
- Developer Drivers
- CUDA Toolkit
- GPU Computing SDK
- Parallel Nsight 2.0 (makes integration in vs2010)
Setup cuda syntax highlighting:
- copy usertype.dat to visual studio as following (Win7):
C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.0\C\doc\syntax_highlighting\visual_studio_8\usertype.dat
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE
- in your .cu files just add following headers for command recognition
- create a qt4 gui project (Qt4 Projects - Qt Application) in vs2010 (i will call it qt4_test2)
- follow the wizard and add OpenGL Library in the second step
- (if you have 64bit consider the libgles32.lib linking bug, see notes in howto integrate in vs2010)
- right click on project in solution explorer and click "Build Customizations" ("Buildanpassungen")
- select CUDA 4.0 ...
- go to Project Properties
Add in Linker - Additional Dependencies
- cudart.lib (cuda runtime library)
Change Linker - System SubSystem to
- Console (we want to see printf(), GUI will work though)
In VC++ Directories
add $(CUDA_INC_PATH) to "Include Paths" (german "Includeverzeichnisse")
If no cutil32.lib / cutil64.lib is there, just compile C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.0\C\common\cutil_vs2010.sln
Then add to your own project properties - VC++ Directories:
- add $(NVSDKCOMPUTE_ROOT)\C\common\inc (Include Directories)
- add $(NVSDKCOMPUTE_ROOT)\C\common\lib\Win32\ (Library Directories) (or x64\)
or just copy *.dll from ..lib\Win32\ to ..lib\bin\
- add a new qt class (not gui class) to be our opengl widget
- Classname = AppGLWidget
- BaseClass = QGLWidget
- Constructor = QWidget *parent
- open the qt4_test2.ui (this is our QMainWindow) (will start the qt designer)
- make the central widget as AppGLWidget (see screenshots)
- add to source a new cuda c/c++ file (.cu)
- right click on kernel.cu for properties and choose "CUDA C/C++" Compiler as type.
(if there isnt anything you may have forgotten step 3)
- insert the following code to the certain files:
extern "C" void launch_kernel();
AppGLWidget.cpp in constructor method:
Compile and go crazy.
Note: You will have to repeat project setting for Release configuration (assuming we've just been in Debug configuration).
For a more decent example in OpenGL using Pixelbuffer Objects for 2D procedural textures, see my next post: Qt4 Mandelbrot with CUDA.