本文参考了:http://tomheaven.cn/index.php/2016/matlab_mexcuda/#more-47
以及 https://www.freesion.com/article/4732370363/
目标:将用c++写成的.cu文件转为MATLAB可以直接调用的mexw64文件
手段:使用VS2017作为编译器(电脑已安装NVIDIA GPU Computing Toolkit)
原因:.cu文件作为设备和主机均能使用的文件,需要NVCC编译器编译,因此用vs2017主要是用它里面由NVIDIA GPU Computing Toolkit安装的nvcc编译器
具体步骤:
-
安装:NVIDIA GPU Computing Toolkit 10.2,vs 2017,MATLAB 2020b
-
先使用 mex -v mexGPUExample.cu 查看调试信息,根据信息找答案。对信息中显示否的项,要自己对应实际的路径修改xml文件
-
配置电脑的环境变量:
CUDA_PATH = C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2
CUDA_BIN_PATH=%CUDA_PATH%\bin
CUDA_LIB_PATH=%CUDA_PATH%\lib\x64 -
创建mex_CUDA_win64.xml文件,这个文件主要作用是引导系统找到指定的路径里的文件和编译器,并且包含了编译命令。写入以下内容,并将文件拷贝进.cu文件所在目录;
注意:
(1)vs版本(VS141COMNTOOLS)和cuda版本号(Version=“10.2”)以及各环境变量与自己电脑的路径要匹配;
(2)注意修改或者添加注册表内容,对应xml文件的hklmExists和hkcuExists;网上的大部分教程都与此xml文件的注册表路径不同,因为我的注册表结构与他们的不同,所以此处做了修改,只要系统能找到就行
(3)LIB和LIBPATH要根据自己电脑的路径路径决定<?xml version="1.0" encoding="UTF-8" ?> <!-- Copyright 2013-2014 The MathWorks, Inc. --> <config Name="NVIDIA CUDA Compiler" ShortName="nvcc" Manufacturer="NVIDIA" Version="10.2" Language="CUDA" Priority="A" Location="$NVCC" > <Details CompilerExecutable="$COMPILER" CompilerDefines="$COMPDEFINES" CompilerFlags="$COMPFLAGS" OptimizationFlags="$OPTIMFLAGS" DebugFlags="$DEBUGFLAGS" IncludeFlags="$INCLUDE" LinkerExecutable&#