Well, it’s just a simple CUDA program written in MFC framework. You know, all CUDA examples in NVIDIA SDK were written by using GLUT library, so they only use glut-window. Here, I’m trying to combine CUDA+OpenGL+GLSL in an MFC program, and this is the result.
And the idea is simple, we can write CUDA kernel as a new class. Yeaa… then, you know how to work with a class, rite ?
// includes, system
// includes, project
// Required header to support CUDA vector types
__global__ void kernel( int* g_data );
__global__ void kernel2( int2* g_data );
__global__ void landKernel(float4* pos, unsigned int width, unsigned int height);
void DoKernel(dim3 gridD, dim3 blockD, int* g_data);
void DoKernel2(dim3 gridD, dim3 blockD, int2* g_data);
void launchLandKernel(float4* pos, unsigned int mesh_width,
unsigned int mesh_height);
void computeGold(char* reference, char* idata, const unsigned int len);
void computeGold2(int2* reference, int2* idata, const unsigned int len);
void runTest(const int argc, const char** argv, char* data, int2* data_int2, unsigned int len);
void loadtotexture(cudaArray* cu_array, cudaChannelFormatDesc channelDesc);
You can download the complete code from the links below. But, please take a minute to drop email and comment/request for the password, I’ll reply directly to your email within 24 hours.
I have moved the source to bitbucket.org and open it. So, now you can clone or download it and NO password is needed. Please visit https://bitbucket.org/mteguhsat/cudamfc
Latest test: VS2010 and CUDA 6.5
Old versions (developed in VS 2008 on a 32-bit machine by myself):
Password for old versions: parasatria.tk
for CUDA 3.0 : cudaMFC.rar
for CUDA 3.2 : use the same code with CUDA 3.1, but you need to make some changes in your project and it’s all about new build rules provided by CUDA toolkit. So, follow these steps (thanks to Manel for giving me idea on this) :
- Put your cursor on project root, then go to Project menu, then click Custom Build Rules.. (see image below)
- A Visual C++ Custom Build Rules Files window will appear.. select one of CUDA Runtime API Build Rule (v3.2) and click OK then.
- Go to the Project’s Properties, find Configuration Properties > Linker > General, and in Additional Library Directories row, add
- Still in Project’s Properties, find the CUDA Runtime API in the sidebar, click General, then in Additional Include Directories row fill with
$(NVSDKCOMPUTE_ROOT)/C/common/inc, then click OK.
- Compile it now.
using CUDA 4.2 on VS 2010 : cudaMFC2010.rar or mirror. (thanks to Lho). Note: I don’t have chance to test this version currently, so any question regarding this version please address it directly to: firstname.lastname@example.org
If you get more problem in compiling the codes, please let me know. 🙂
Great! Your project’s work, even with NVidia Ion (16 cores), the picture rotate is instant.
I use an ASUS Eee PC Seashell series, Windows 7 32bit & CUDA 3.2 (3.1 don’t recognize Ion).
With CUDA 4.0 & 4.2, I have got a lot of redéfinitions between glfreeglut_std.h and GL/glut.h.
But, fortunately, even most recent Geforces are compatible CUDA 3.0.
Thank you! Except your blog, CUDA & MFC is strangely untraceable on web and the books.
Now, I can work correctly.
I put a short agree message among the comments of your blog. There are almost exclusively comments with ‘send me the password’.
I wish my english is not too bad.
Eric (Paris, France).
using CUDA 5 on VS2010 : cuda5MFC10.zip