MATLAB 安装CT重建包(TIGRE) 踩坑记录与解决方案
gitee项目:https://gitee.com/hhj960714/TIGRE
github项目下载地址:https://github.com/CERN/TIGRE/archive/master.zip
1. 安装需要准备
1.0 总览
下图是官方测试过的工具:
以下是本文用的工具:
win10 + MATLAB2019b + CUDA10.2 CUDA11.6 + VS2015 VS2019 +【dev C++和MinGW C++ 6.4.0】
修正:实际上
3090算力8.6,CUDA10.2不行,所以我换了11.6(11+版本应该都可以),然后对应的VS2015就不行了,所以我换了VS2019.
1.1 MATLAB
我从学校官网下的,给你们地址你们没有账号也下载不了,所以自行准备。
这里我用的是MATLAB R2019b,相信其他版本也可以。
1.2.0 Make sure you install C++
这里我直接下载了一个dev C++,我觉得这个安装C++是我最喜欢的方式,简单。
dev C++安装包下载地址
后面matlab用mex -setup 选择编译器的时候还需要安装MinGW C++。
注意下图MATLAB官方文档这里给的版本对应。
当然他给的地址,我是用不习惯,选择什么的感觉都不方便,这里提供一个MinGW的官方地址:
MinGW C++ 下载地址
下拉找到对应版本,我选择的是这个,64位,win32通道,seh方式安装的绿色包。
下载下来直接就是安装好的zip包,放到自己能记住的位置(平时安装软件最好放到一个地方)就可以。
【因为我不知道他到底是要一个C++还是在后面的matlab里面需要的MinGW C++,所以我两个都装了】
1.2 Visual Studio
社区版(Community)够用。版本我推荐2015。本文也以2015为例说明 本文后面换成了VS2019
版本问题: 拒绝VS2017。
gitee上的项目仅有适配VS 2013和VS 2015的CUDA程序,github上又加了2019和2022的CUDA程序。自行查看,不多解释。
VS 2019下载地址:VS2019安装包下载
1.3 CUDA安装
官方用的是CUDA9.2,但是当时比较早了,所以随着更新换代CUDA9.2已经不能满足了,每一台计算机应该选择的版本都不一样,按照下面的步骤查询满足要求即可。
1.3.1 显卡型号与对应算力查询
- 任务管理器查看显卡型号
- NVIDIA GPU算力查询地址,查询GPU算力,3060-3090都对应8.6,对应CUDA是11.+
1.3.2 显卡驱动版本与CUDA版本对应查询
- 查显卡驱动:打开cmd命令行输入命令
nvidia-smi
- 查显卡驱动版本与CUDA版本与算力对应关系查询:显卡驱动与CUDA匹配关系
继续往下滑有更详细的版本对应关系
1.3.3 CUDA toolkit下载
1.3.4 matlab与CUDA对应
- 补充一个matlab对应关系,不过这个基本上都能对应得上。
1.4 TIGRE下载
github下载地址
自行下载源代码,放到自己习惯的位置。
1.5 汇总
下图是官方测试过的工具:
以下是本文用的工具:
win10 + MATLAB2019b + CUDA10.2 CUDA11.6 + VS2015 VS2019 +【dev C++和MinGW C++ 6.4.0】
2. 开始配置环境
打开MATLAB
2.1 测试VS是否正确安装
在MATLAB命令行里:
mex -setup -v
确保选中的这三行存在,之前之后的搜索无所谓。没有就说明你VS装的有问题,可能是装之前没安装好C++。
然后在最下面选择C++ 作为编译语言(点一下就行):
2.2 检查MATLAB是否能找到VS和CUDA
同样是MATLAB命令行:
检查CUDA路径:
getenv('CUDA_PATH')
检查VS路径:
① VS2013输入这个:
getenv('VS120COMNTOOLS')
② VS2015或者更新的输入这个:
getenv('VS140COMNTOOLS')
末尾不要加分号会直接打印出来,末尾加分号了的话就会在变量空间里。
打印不出来的话就自行去添加环境变量就行(变量值记得放自己的地址)。
下面同理:
或者你会用setenv(name,folder)
命令就直接通过matlab添加环境变量也行。
添加完记得重启matlab。
2.3 重命名对应版本的mex_CUDA
Rename either mex_CUDA_win64_MVS2013.xml (Visual Studio 2013 or older)
or mex_CUDA_win64_MVS2015.xml(Visual Studio 2015 or newer) to
mex_CUDA_win64.xml
比如我是VS2015版本,我就将mex_CUDA_win64_MVS2015.xml重命名为mex_CUDA_win64.xml。
13版本就去改那个mex_CUDA_win64_MVS2013.xml哈,拒绝碰瓷。
同时!
记得我先前CUDA版本是10.2 11.6不 ? 官方源代码默认的是9.1
所以,要对应修改过来,分别是第6行和末尾有个nvcc的位置,后者不同文件不一样的位置。
比如有可能在125行,有可能在222行,也有可能在266行
而15的那个是在222行:
改了就行了,不然会提示找不到编译器,当然了版本对应不上同样会提示找不到编译器。
3 编译和初始化
3.1 编译
找到下载的TIGRE包下面的MATLAB\Compile.m ,运行会自主编译,
或者再MATLAB命令行里运行:
Compile
时间较长,中间有如下之类警告不用管,编译完成后就可以了。
3.2 初始化
还是MATLAB命令行:
InitTIGRE
OK了,警告统统无视就完事了。
运行demo:
IGRE/MATLAB/Demos/d03_generateData.m
成功即可。
4 QA(有问题多交流!)
4.2 2023.05.15补充问题(解答的大部分问题都是这个)
其实在4.1里面说了的。
显卡型号,对应的算力,对应的CUDA版本,大部分mex不成功的时候都是这个算力与CUDA没对应上。
1.3节找答案
4.1 no kernel image is available for execution on the device
没有可用于在设备上执行的内核映像:
这就是cuda toolkit版本不满足显卡算力导致:调高cuda版本即可。重回1.3节
NVIDIA GPU算力查询地址
哦对了cuda tooklit11.6可能不支持2015,我换成11.6之后就有这个报错,只能找17和19。
于是我把VS换成了2019,嗯,记得勾选这个:
否则,你的VS2019就会没有VC,从而还是加载不到:
改完环境记得从第二章再重新走一遍。