设为首页 加入收藏

TOP

Matlab编译cuda的.cu文件
2014-11-23 23:41:56 来源: 作者: 【 】 浏览:10
Tags:Matlab 编译 cuda .cu 文件

matlab函数,大体首先是用nvcc命令生成.o文件,然后用mex链接对应库文件,生成动态链接库(.mexw64等)。


测试环境:


1) Windows x64 + matlab + cuda 5.5 + vs2012


windows用户需要根据自身编译器更改函数第10行,改为cl.exe所在文件夹。


如果第53行出错,请您在matlab中先mex -setup配置编译器。。。


使用方法e.g.


nvmex('a.cu');


function nvmex(cuFileName)
%NVMEX Compiles and links a CUDA file for MATLAB usage
% NVMEX(FILENAME) will create a MEX-File (also with the name FILENAME) by
% invoking the CUDA compiler, nvcc, and then linking with the MEX
% function in MATLAB.



if ispc % Windows

Host_Compiler_Location = '-ccbin "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\x86_amd64"';
CUDA_INC_Location = ['"' getenv('CUDA_PATH') '\include"'];
CUDA_SAMPLES_Location =['"' getenv('NVCUDASAMPLES5_5_ROOT') '\common\inc"'];
PIC_Option = '';
if ( strcmp(computer('arch'),'win32') ==1)
machine_str = ' --machine 32 ';
CUDA_LIB_Location = ['"' getenv('CUDA_PATH') '\lib\Win32"'];
elseif ( strcmp(computer('arch'),'win64') ==1)
machine_str = ' --machine 64 ';
CUDA_LIB_Location = ['"' getenv('CUDA_PATH') '\lib\x64"'];
end
else % Mac and Linux (assuming gcc is on the path)

CUDA_INC_Location = '/usr/local/cuda/include';
CUDA_SAMPLES_Location = '/usr/local/cuda/samples/common/inc';
Host_Compiler_Location = ' ';
PIC_Option = ' --compiler-options -fPIC ';
machine_str = [];
if ( strcmp(computer('arch'),'win32') ==1)
CUDA_LIB_Location = '/usr/local/cuda/lib';
elseif ( strcmp(computer('arch'),'win64') ==1)
CUDA_LIB_Location = '/usr/local/cuda/lib64';
end
end
% !!! End of things to modify !!!
[~, filename] = fileparts(cuFileName);
nvccCommandLine = [ ...
'nvcc --compile ' Host_Compiler_Location ' ' ...
'-o ' filename '.o ' ...
machine_str PIC_Option ...
' -I' '"' matlabroot '/extern/include "' ...
' -I' CUDA_INC_Location ' -I' CUDA_SAMPLES_Location ...
' "' cuFileName '" '
];
mexCommandLine = ['mex ' filename '.o' ' -L' CUDA_LIB_Location ' -lcudart'];
disp(nvccCommandLine);
warning off;
status = system(nvccCommandLine);
warning on;
if status < 0
error 'Error invoking nvcc';
end
disp(mexCommandLine);
eva l(mexCommandLine);
end


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Python显示'\u897f类字符问题.. 下一篇关于Spring中多线程下注入失败的..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: