nvmex Tutorial and File Linux nvmex Tutorials and Files
Hi,

I am working the project that requires me to call CUDA kernels from Matlab.
I am using Linux version 2.6.18-308.1.1.el5 and gcc version 4.1.2 20080704.

The matlab that I am running on my system is MATLAB Version: 7.14.0.739 (R2012a).

Now I have been searching on the net and every time I get the link for UCF which has the tutorial for Visual studio.
I need a comprehensive tutorial for linux installation of nvmex and its corresponding files.
(*** I guess nVIDIA has removed that link for matlab_with_cuda and the files as well ***)

I know about Jacket and Parallel Computing Toolbox but I still want go ahead with nvmex.

Please help me guys.
Just let me know if you have any sources for installation of nvmex tool for LINUX.

Thanks in advance.
Cheers
Hi,



I am working the project that requires me to call CUDA kernels from Matlab.

I am using Linux version 2.6.18-308.1.1.el5 and gcc version 4.1.2 20080704.



The matlab that I am running on my system is MATLAB Version: 7.14.0.739 (R2012a).



Now I have been searching on the net and every time I get the link for UCF which has the tutorial for Visual studio.

I need a comprehensive tutorial for linux installation of nvmex and its corresponding files.

(*** I guess nVIDIA has removed that link for matlab_with_cuda and the files as well ***)



I know about Jacket and Parallel Computing Toolbox but I still want go ahead with nvmex.



Please help me guys.

Just let me know if you have any sources for installation of nvmex tool for LINUX.



Thanks in advance.

Cheers

#1
Posted 05/10/2012 12:30 AM   
Instead of using nvmex, you can use these 2 lines from inside Matlab:

!nvcc -c my.cu -Xcompiler -fPIC -I /usr/local/matlab/extern/include

mex my.o -L /usr/local/cuda/lib64 -lcudart -lcufft

The rest of the code in whitepaper is still correct.
Instead of using nvmex, you can use these 2 lines from inside Matlab:



!nvcc -c my.cu -Xcompiler -fPIC -I /usr/local/matlab/extern/include



mex my.o -L /usr/local/cuda/lib64 -lcudart -lcufft



The rest of the code in whitepaper is still correct.

#2
Posted 05/10/2012 02:05 AM   
Hi,

Thanks a lot for your reply.
The first stage from your reply worked. I am using the sample code given in the white paper.

However for the second stage, I am getting the following error.
[code]/*********************************************************/
>>mex sample.o -L /usr/local/cuda/lib64 -Icudart

Warning: No source files in argument list. Assuming C source
code for linking purposes. To override this
assumption use '-fortran' or '-cxx'.


Warning: You are using gcc version "4.1.2". The version
currently supported with MEX is "4.4.6".
For a list of currently supported compilers see:
http://www.mathworks.com/support/compilers/current_release/

sample.o: In function `__sti____cudaRegisterAll_41_tmpxft_00000955_00000000_4_sample_cpp1_ii_e53e6457()':
tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x10): undefined reference to `__cudaRegisterFatBinary'
tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x76): undefined reference to `__cudaRegisterFunction'
sample.o: In function `__cudaUnregisterBinaryUtil()':
tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x94): undefined reference to `__cudaUnregisterFatBinary'
sample.o: In function `__device_stub__Z15square_elementsPfS_i(float*, float*, int)':
tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0xbc): undefined reference to `cudaSetupArgument'
tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0xd8): undefined reference to `cudaSetupArgument'
tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0xf4): undefined reference to `cudaSetupArgument'
sample.o: In function `mexFunction':
tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x210): undefined reference to `cudaMalloc'
tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x230): undefined reference to `cudaMalloc'
tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x296): undefined reference to `cudaMemcpy'
tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x32b): undefined reference to `cudaMemcpy'
tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x3d7): undefined reference to `cudaConfigureCall'
tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x41a): undefined reference to `cudaMemcpy'
tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x493): undefined reference to `cudaFree'
tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x49c): undefined reference to `cudaFree'
sample.o: In function `cudaError cudaLaunch<char>(char*)':
tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text._Z10cudaLaunchIcE9cudaErrorPT_[cudaError cudaLaunch<char>(char*)]+0x11): undefined reference to `cudaLaunch'
collect2: ld returned 1 exit status

mex: link of ' "sample.mexa64"' failed.

Error using mex (line 206)
Unable to complete successfully.
/***************************************************************************/[/code]

I even tried using the cufft library using the -I switch it was just giving me this output.
Is it possible that I am making mistakes somewhere or do I need to configure some stuff?

Kindly reply.

Thanks in advance.
Cheers
Hi,



Thanks a lot for your reply.

The first stage from your reply worked. I am using the sample code given in the white paper.



However for the second stage, I am getting the following error.

/*********************************************************/

>>mex sample.o -L /usr/local/cuda/lib64 -Icudart



Warning: No source files in argument list. Assuming C source

code for linking purposes. To override this

assumption use '-fortran' or '-cxx'.





Warning: You are using gcc version "4.1.2". The version

currently supported with MEX is "4.4.6".

For a list of currently supported compilers see:

http://www.mathworks.com/support/compilers/current_release/



sample.o: In function `__sti____cudaRegisterAll_41_tmpxft_00000955_00000000_4_sample_cpp1_ii_e53e6457()':

tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x10): undefined reference to `__cudaRegisterFatBinary'

tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x76): undefined reference to `__cudaRegisterFunction'

sample.o: In function `__cudaUnregisterBinaryUtil()':

tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x94): undefined reference to `__cudaUnregisterFatBinary'

sample.o: In function `__device_stub__Z15square_elementsPfS_i(float*, float*, int)':

tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0xbc): undefined reference to `cudaSetupArgument'

tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0xd8): undefined reference to `cudaSetupArgument'

tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0xf4): undefined reference to `cudaSetupArgument'

sample.o: In function `mexFunction':

tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x210): undefined reference to `cudaMalloc'

tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x230): undefined reference to `cudaMalloc'

tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x296): undefined reference to `cudaMemcpy'

tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x32b): undefined reference to `cudaMemcpy'

tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x3d7): undefined reference to `cudaConfigureCall'

tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x41a): undefined reference to `cudaMemcpy'

tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x493): undefined reference to `cudaFree'

tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text+0x49c): undefined reference to `cudaFree'

sample.o: In function `cudaError cudaLaunch<char>(char*)':

tmpxft_00000955_00000000-1_sample.cudafe1.cpp:(.text._Z10cudaLaunchIcE9cudaErrorPT_[cudaError cudaLaunch<char>(char*)]+0x11): undefined reference to `cudaLaunch'

collect2: ld returned 1 exit status



mex: link of ' "sample.mexa64"' failed.



Error using mex (line 206)

Unable to complete successfully.

/***************************************************************************/




I even tried using the cufft library using the -I switch it was just giving me this output.

Is it possible that I am making mistakes somewhere or do I need to configure some stuff?



Kindly reply.



Thanks in advance.

Cheers

#3
Posted 05/10/2012 03:30 AM   
Hi,
isn't it a "-l" (small L) rather than a "-I" (capital i) to be used in the command line? The former indicates to link with a library whereas the later indicates a path to search for include files.
So your command line as proposed by mfatica should read

[code]
mex my.o -L /usr/local/cuda/lib64 -lcudart -lcufft
[/code]
and [b]not[/b]

[code]
mex my.o -L /usr/local/cuda/lib64 -Icudart -Icufft
[/code]
Hi,

isn't it a "-l" (small L) rather than a "-I" (capital i) to be used in the command line? The former indicates to link with a library whereas the later indicates a path to search for include files.

So your command line as proposed by mfatica should read





mex my.o -L /usr/local/cuda/lib64 -lcudart -lcufft


and not





mex my.o -L /usr/local/cuda/lib64 -Icudart -Icufft

#4
Posted 05/10/2012 04:27 AM   
@Gilles_C

Thank you so much. I guess I made a mistake while reading the white paper instructions about the -I and -L switches.
Sample file is working fine and is producing the expected output.

@m.fatica
Thanks again.
@Gilles_C



Thank you so much. I guess I made a mistake while reading the white paper instructions about the -I and -L switches.

Sample file is working fine and is producing the expected output.



@m.fatica

Thanks again.

#5
Posted 05/10/2012 04:41 AM   
Hello, how to deal with the warnning of "No source files in argument list", I am in trouble with this problem, and can not debug my program. I have added the flag of "-g". thanks a lot!
Hello,
how to deal with the warnning of "No source files in argument list", I am in trouble with this problem, and can not debug my program. I have added the flag of "-g". thanks a lot!

#6
Posted 05/29/2013 09:13 AM   
Scroll To Top