A simple CUDA-MFC program

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.cumfc

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 ?

#pragma once
// includes, system
#include
#include
#include
#include
// includes, project
#include
// Required header to support CUDA vector types
#include

__global__ void kernel( int* g_data );
__global__ void kernel2( int2* g_data );
__global__ void landKernel(float4* pos, unsigned int width, unsigned int height);

class CcudaKernel
{
public:
CcudaKernel(void);
~CcudaKernel(void);

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);
void unbindTexture();
public:
bool success;

};

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.


Update:
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.1 : cudaMFC31.rar (thanks to Jun Wei for experience sharing in compiling this code using CUDA 3.1)

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) :

  1. Put your cursor on project root, then go to Project menu, then click Custom Build Rules.. (see image below)
  2. A Visual C++ Custom Build Rules Files window will appear..  select one of CUDA Runtime API Build Rule (v3.2) and click OK then.
  3.  Go to the Project’s Properties, find Configuration Properties > Linker > General, and in Additional Library Directories row, add $(CUDA_PATH)/lib/$(PlatformName).
  4. 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.
  5. 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: lhoffart@free.fr

If you get more problem in compiling the codes, please let me know. 🙂

testimony:

Hello,

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

Advertisements

219 thoughts on “A simple CUDA-MFC program

  1. Pingback: A simple CUDA-MFC program | parasatria.me is moving to m.teguhsatria.com

  2. Hi
    I just start to learn cuda, very thanks for your experience sharing, I had download file cuda5MFC10.zip. Please send me the password. many thanks.

    Like

  3. Hi

    I just start to learn cuda programming. Thanks for your experience sharing. i had download the file cuda5MFC10.zip. please send me the password. many thanks.

    Like

    • Jun Wei,

      I don’t have chance to test it in all machines, in all platforms, in all CUDA versions. As you can see comments below, people share their experiences and give me feedbacks how to make it works in different machines.

      Let me know what kind of errors you got. Maybe I could give some directions about what you need to do. Thanks.

      Like

  4. can u help me to change this code to CUDA

    float h_max(float *h_surf)
    {
    int i,totpoints;
    float hmax =-1.0e6;
    totpoints=ni*nj;
    for ( i=0; i hmax)
    hmax=h_surf[i];
    }
    return hmax;
    }

    I just start to learn cuda programming

    Like

  5. Hi

    I downloaded your last version of VS2010 and CUDA 6.5, but I compiled them in VS2013. The compiling and linking processes were OK, but I failed in run time. It seemed that my glew32.dll (1.11.0[08-11-14]) did not match your program (No entry point …). Therefore, I’d like to know what version of glew32 you had used with them. Or, did I miss anything? Thank you very much!

    I am running an Acer NB with Win. 8.1 X64 and Nvidia 750M.

    Garry

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s