GGEMS是啥
GGEMS (GPU Geant4-based Monte Carlo Simulations)是一个能在GPU上进行蒙特卡洛仿真的工具包(类似库文件,不是可执行文件),可用于核医学仿真(CT、PET等)。它的物理实现是基于Geant4,具有和GATE几乎一致的结果(见文章DOI:10.1109/TMI.2019.2921872)。
相比常用的仿真软件GATE,GGEMS的优势是能够在GPU上高速运行,有c++和Python模块,并且基于OpenCL库能够在NVIDIA、Intel、AMD不同平台,和Windows、Linux不同操作系统上运行。
我本来想在我Intel平台(集成显卡)的笔记本电脑上尝试安装,但是没有成功。后来还是在有NVIDIA显卡的台式机上安装。Intel平台的安装过几天会再尝试一下。
ps:我一前制作的一个GATE安装流程文档。
Windows+NVIDIA环境安装:详细说明
我希望这个说明能让会用Visio Studio写一点代码的童鞋也能看明白。中间有一些我遇到的坑,希望大家能避开。
依赖软件和环境
Windows+NVIDIA下官方给出的建议:
- 操作系统版本:Windows 10 & 11
- Python版本:3.6+
- Visio Studio 2022(只需要在官网下载community免费版即可)
- OpenCL版本:1.2+(只需要下载最新版本的CUDA或NVIDIA驱动即可,目前最新驱动已经支持OpenCL 3.0)
- cmake版本:3.13+(注意在安装时勾选加入环境变量,即将带“PATH”字符的勾上)
注意:上述软件建议按顺序安装。对于OpenCL,建议安装CUDA,因为里面已经包含了NVIDIA驱动。
关于cmake:这是一个用来帮助编译较复杂项目的工具,它可以告诉编译器哪些代码要怎样编译,要链接什么库。下面会详细介绍cmake在安装GGEMS时的用法。
关于OpenGL可视化:这是个可选项,包含了GLFW、GLEW、GLM库。这是个坑!! 我尝试了2天没成功,cmake GGEMS时,GLEW和GLM在链接上总有一些问题搞不定。不过OpenGL不装也不影响GGEMS的编译,只是不能可视化而已。
GGEMS源代码下载
GGEMS需要下载源代码自己编译,它编译得到c++和python的库。首先找个没有中文、没有空格的路径,新建文件夹,结构如下:
-GGEMS
--ggems //放GGEMS源代码
--ggems-build //放cmake产生的中间文件
--ggems-install //放编译得到的GGEMS库
GGEMS的源代码可以从GitHub上下载:
安装了git的童鞋可以直接克隆:
git clone https://github.com/GGEMS/ggems.git
最后将所有代码放置在之前创建的xxx/GGEMS/ggems文件夹下即可。
nmake.exe环境变量配置
nmake是Visio Studio用来编译cmake工程的一个可执行文件。在安装Visio Studio 2022时已经安装好了,但是还没有配置环境变量(没有配置环境变量就不能在终端cmd.exe使用)。官方给出了官方给出了配置的方法,不过没解释这是用来配置nmake的,此外里面需要改动的地方的没说。
新建一个名为set_mvsc.bat的文本文件,用编辑器(如记事本)打开填入如下代码,根据我的注释修改并保存。
@echo OFF
if "%VCTOOLKIT_VARS_ARE_SET%" == "true" goto done
echo --- Setting Microsoft Visual C++ Toolkit 2022 environment variables... ---
%下面icrosoft Visual Studio的路径改成你安装路径%
%x86_amd64中的x86和amd64分别对应你用来编译的机器的架构和运行GGEMS机器的CPU架构%
%我电脑是Intel 64位的CPU,只用把x86_amd64改成x64即可%
call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x86_amd64
set PATH="%VCToolkitInstallDir%"\bin;%PATH%
set INCLUDE="%VCToolkitInstallDir%"\include;%INCLUDE%
set LIB="%VCToolkitInstallDir%"\lib;%LIB%
set VCTOOLKIT_VARS_ARE_SET=true
echo Done.
:done
打开终端,先进入工作目录(输入’盘符’+':‘转移到对应磁盘,输入’cd’+'文件路径’进入之前创建的GGEMS文件夹)。运行set_mvsc.bat:
**注意这个终端不要关!!**因为前面配置的环境变量只在这个终端下有效!新开的终端需要重新执行.bat文件。
cmake配置
打开cmake,在刚才的终端上输入(因为cmake要用到nmake)
cmake-gui
配置代码路径和build路径点击“Configure”,此时会弹出一个框让我们选择项目的生成器,官网没有明说,但切记要选“NMake Makefiles”。如果选Visio Studio 2022,会生成一个.sln文件,用VS2022打开也可以编译,但是这样编译不出python库,且文件生成路径不对!我在这里卡了好久。
不出意外的话应该能够成功得到下面的结果,只需要把“CMAKE_INSTALL_PREFIX”那一行改成前面创建的ggems_install用于存放编译生成的文件。然后点击“Generate”
编译与环境变量的配置
最后在刚才打开的终端中输入
cd ggems_build # 进入cmake产生文件的路径
nmake install # 开始编译
编译成功后能看到生成文件夹如下:
-ggems-install //放编译得到的GGEMS库
--ggems
---examples //示例代码
---include //c++头文件
---lib //静/动态库文件
---python_module //python库文件
为配置python库的环境变量,再创建一个set_ggems.bat,用编辑器(如记事本)打开填入如下代码,根据修改对应的路径并保存,同之前的set_msvc.bat一样,在终端运行即可配置好环境变量。
@echo OFF
if "%GGEMS_VARS_ARE_SET%" == "true" goto done
echo --- Setting GGEMS... ---
set PYTHONPATH=%PYTHONPATH%;F:\GGEMS\GGEMS_install\ggems\python_module
set PYTHONPATH=%PYTHONPATH%;F:\GGEMS\GGEMS_install\ggems\lib
set PATH=%PATH%;F:\GGEMS\GGEMS_install\ggems\lib
set GGEMS_VARS_ARE_SET=true
echo Done.
:done
测试
在之前终端上进行测试!
官方给了一段python的测试代码,在之前的终端里打开python,直接输入即可。其中有句话在1.1版本及之前的文档里没有,会导致运行出错。
from ggems import * # 这里没错,说明成功添加环境变量
opencl_manager = GGEMSOpenCLManager() # 这句话在1.1低版本的官方文档中没有,1.2版本的才有
opencl_manager.print_infos()
opencl_manager.clean()
exit()
成功运行后能正确输出OpenCL控制器的相关信息。
除了这个测试代码之外,还可以运行example文件夹中示例代码。由于我没有安装OpenGL可视化,所以运行过程不会弹出可视化窗口。
永久环境变量配置
想要在任意时刻打开python都能用GGEMS库,需要在系统设置中配置环境变量PYTHONPATH和PATH。
重启终端或其他python代码编辑器,就可以像正常pip/conda安装好的库那样随意地调用ggems。