【光声蒙卡】1_Windows下编译MMC/mmclab

0_Whine

好的这里是疯狂进行光声蒙卡模拟的氧化铝

因为最近有一个横向需要对amira导出的四面体网格进行蒙卡模拟,而且还需要自定义光源(要不是为了在四面体模拟还改光源我也不至于考虑编译方法,是MCmatlab不舒服还是MCxyz不够精简!)这里来记录一下有关mmc和mmclab的编译过程,源码来自fang qianqian的个人仓库

fangq/mmc: Mesh-based Monte Carlo (MMC) (github.com)

当然,也可以进入[MCX官网](http://mcx.space/ class=),然后进入Nightly-build版本的src目录直接下载zip压缩包

注:本文不对MMC各种参数使用进行讲解,如果只是为了使用MMC的基本功能而不需要自行更改光源或探头以及其他功能,这里建议进入Nightly-build版本直接下载已经将MCX、MCXLAB、MMC、MMCLAB编译完毕并进行统一封装,且具有一站式例程和文档的MCX22/MCXStudio

1_Environment_configuration

那么废话不多说了,开始 # 正所谓一级标题下面也得水一段话,所以这里添加了一句没用的话

1.1_Cygwin64_env

那么首先是环境配置,这里还得感谢房老师的热心指导 Error in complex in windows · Issue #84 · fangq/mmc (github.com),虽然理论上只需要构建minGW环境就够了,但是依旧有一部分依赖项,在房前辈的论坛里推荐Cygwin64或者MSYS2,毕竟身为多年生互联网废物,不了解pacman,,,在Cygwin64的可视化环境包管理面前,,,我选择Cygwin64做个废物(划掉)

那么这里建议直接右拐Cygwin64官网开始下载

下载完毕直接运行文件开始可视化页面无脑自动安装模式,前面自己配置的地方就怎么提示怎么来吧,反正网上也一大堆教程 # 补:个人建议使用阿里源,体验下来阿里源比网易源舒服(啊~两个空格加注释,老子真优雅!(划掉)

那么进入到伟大的库管理界面,别急,这里像您往常打开世界上最好语言的composer、keil的Pack installer、androidStudio的SDK manager…(break掉成吨您想继续说的)一样

安装软件包前都先切换到查看完整软件包,然后隐藏过时的软件包,同时个人建议选择匹配到可用的最佳版本,最后需要什么就直接搜索,哪个需要安装就在新增里寻找需要的版本(个人建议没有特殊需求就切最新的,因为cygwin实在是太人性化了,如果安装后补充其他软件包,它默认会帮我们更新,省着夜长梦多)

那我们都需要搜索什么呢?你先别急(好急好急,我比你急多了)先看一下目前已安装的环境

首先是下面五个万年不动的基础包,不用过多赘述,过

  • binutils
  • gcc-core
  • gcc-g++
  • gdb
  • make

理论上您编译MMC的可执行文件(也就是mmc.exe)时,基础环境已经够了,但是在编译mmclab时,由于编译mex文件,需要让 笨比 MATLAB正常绑到这面的C环境进行编译,所以还得得得安装一下mingw64 # 屏蔽音!优雅的中国话!

  • mingw64-i686-gcc-core

按照房老师的gayhub文档,理论上配置好目前这几个库就可以了,,,但是,,,如果您现在直接这么头铁上了,编译确实可以通过,但是一般来说,,,mmc_core_cl 会教您做人的

所以还需要安装房老师说的十六进制编译工具xxd,至于我当前环境里的vim,这倒是可有可无(我刚开始以为xxd需要依赖vim,后来发现这俩是独立的)有该类习惯的玩家可以考虑也一起安装了

  • vim

  • xxd

此外一个容易忽略的就是房老师在文档里没有提到的zlib依赖包,不然编译的时候cc会教您做人的

一个软件包一个开发包都安装了,注意别直接顺手zlib1g和zlib1g.dev从门框撞到隔壁了(linux玩家大概率也不需要看这个内容)

  • zlib

  • zlib-devel

好的,默认现在您已经把这些软件包一个,一个,一个的新增了,下一步开始安装,我这里默认是没有的,但是为了保留一部分更改内容,您才能感觉我也是在安装,所以,我故意不小心勾选了一部分重新安装增加沉浸感

好的针对目前cygwin的环境已经配置完了(其他的配置项也不是在这配),以后如果需要更改环境再次运行这个安装程序就可以,它真的是一个很贴心的环境管理工具

1.2_Personal_quality_change

# 注:现在可以直接用Cygwin启动在上一步配置的环境,但是默认打开的目录为%cywin64%/home/user/为了更简单的操作可以考虑注册表改右键加入,直接考虑注册表改右键加入,win+R regedit启动!

直接进入 计算机\HKEY_CLASSES_ROOT\Directory\Background\shell

  • 新建项Cygwin

    • 默认值 设置为 Cygwin Bash Here # 只是为了和git默认值保持队形,大家随意

    • 新建字符串值 Icon 设置为 %cywin64%\Cygwin.ico # %cygwin64%默认不会加系统变量,大家按照自己的安装目录来

  • Cygwin项下 新建项command

注:现在右键空白处可以像git一样启动cygwin64了,但是由于MATLAB这个笨比实在是太笨了,编译MMCLAB必须使用mex,所以这里建议往环境变量里也扔一下,右键>属性>高级系统设置>环境变量

%cygwin64%/bin 目录添加到系统环境变量,就比如我这里是D:\ProgramData\cygwin64\bin

好的这时候您再打开其他您使用的命令行工具,理论上可以使用make命令,并且开始体验ls和dir同时存在的极致享受,这对于编译MMC无所谓,但是对于mmclab是必要的

# 鉴于power shell 对于笔者喜欢设置成的浅黑背景,"–"前缀提供的自动配色实在是太过delightful,这里建议shift打开后瞬间 start cmd 启动该爆金币的上古命令行,并像下图所示检查make、gcc -v命令是否可以正常执行

2_Complex_mmc


那么这段开始说编译mmc的流程

现在,立刻,马上右键git bash,之前未安装请进入git官网或者gayhub项目页面>code >Download zip

git clone https://github.com/fangq/mmc.git

现在按照房老师在readme.md内的说明,进入mmc项目下的src目录,并使用make命令编译

2.1_Simple_modifie

但是!!!你先别急!!!我比你急!!!

就像之前炼丹调cycleGAN、comboGAN、starGAN、styleGAN…一样,开源项目不出点问题都不叫开源项目

关于ulong这个参数的问题,通过ctrl+shift+F查找(clion !启动!),能够看出这玩意是一个unsigned long long的数据类型的别名,我身为一个代码废物,自然看不懂mmc_rand_xorshift128p.h里的条件编译宏里的各种关系

#if defined(_WIN32) || defined(__APPLE__)
    typedef unsigned long long ulong;
#endif

所以,个人建议直接将 mmc_rand_xorshift128p.c 内的所有ulong 都如下代码块所示替换成unsigned long long,反正就4处,功能一样就行,优不优雅已经无所谓了

static float xorshift128p_nextf (RandType t[RAND_BUF_LEN]) {
    union {
        unsigned long long  i;
        float f[2];
        uint  u[2];
    } s1;
    const unsigned long long s0 = t[1];
    s1.i = t[0];
    t[0] = s0;
    s1.i ^= s1.i << 23; // a
    t[1] = s1.i ^ s0 ^ (s1.i >> 18) ^ (s0 >> 5); // b, c
    s1.i = t[1] + s0;
    s1.u[0] = 0x3F800000U | (s1.u[0] >> 9);

    return s1.f[0] - 1.0f;
}

static void xorshift128p_seed (uint* seed, RandType t[RAND_BUF_LEN]) {
    t[0] = (unsigned long long)seed[0] << 32 | seed[1] ;
    t[1] = (unsigned long long)seed[2] << 32 | seed[3];
}

然后再次执行make命令,编译就能通过了,不过,,,此时的make也有一些小warning,按照提示改就完事了,反正改不改都行,最终是保证项目的src下生成bin(存放编译结果)和built(存放链接库文件,编译完可以直接扔了)两个目录,并且bin目录下生成mmc.exe可以正常执行,测试建议转身参考mmc项目目录下的\examples文件夹,

注:此时的编译文件并不是完全独立的,需要依赖cygwin1.dll才能正常运行,保证该文件在系统路径或者与该可执行文件在相同文件夹,可从%cygwin64%\bin\目录下获取

这里按照\examples例程里的shell脚本改了个python例程(本质上就是调用shell脚本)由于光声蒙卡本身属于模拟方法,生成的文件能保证接近就OK(至于说数量级特别小的参数,数量级接近就没问题)

3_Complex_mmclab


好的暂时我认为大家都可以正常编译mmc的可执行文件了(其实这一步已经无所谓了,因为您会看到在example目录下和mmclab/example对应,使用脚本在命令行执行的所有例程,虽然数据准备和可视化使用的是matlab,但是作为核心功能的蒙卡模拟独立了出来)

但众所周知MMCLAB是一款有房老师自主研发的一款生医工调参蒙卡模拟策略游戏,适用于MATLAB和Octave的所有单机玩家,您将在这里扮演一位调参侠,去寻找尘封在各种说明文档之中的真相…(不行我编不下去了)

那比起在官网这篇[How_to_compile_MMCLAB](https://mcx.space/wiki/index.cgi?MMC/Doc/MMCLAB class=)资源链接已经挂掉的文档,个人建议去mmc/mmclab at master · fangq/mmc (github.com)里去找

* your computer should have MATLAB C compiler (mex) and/or octave3.x-headers installed * to compile the SSE versions, your computer should support SSE4 instructions * the commands “mex” and “mkoctfile” should be in the search path ($PATH) * you should have both gcc and g++ with version 4.4 or newer * for windows, you should install Cygwin64 with mingw64-i686-gcc and make packages * for windows, you need to create a mexopts.bat file as \ C:\Users\\AppData\Roaming\MathWorks\MATLAB\RXXXX\mexopts.bat \ with content modified from mmc/src/mexopts_cygwin64_gcc.bat

如果把上面的内容翻译一遍的话

  • 如果您在安装MATLAB时把乱七八糟的工具包都安了,那您大概率已经安装完了

  • 能跑就行,管扩展指令集干什么?想搞的请左转英特尔®指令集扩展技术

  • 如果您的环境变量里已经添加了类似下面的两个路径,就可以从命令行调用mex命令了

    • %MATLAB%\^R\d{4}[ab]$\runtime\win64

    • %MATLAB%\^R\d{4}[ab]$\bin

  • 如果您没看第二段mmc编译需要的依赖包都有啥,我十分建议您回滚到上一段

  • 如果您没看第二段mmc编译需要的依赖包都有啥,我十分建议您回滚到上一段

  • 打开mmc/src/mexopts_cygwin64_gcc.bat,修改内部的路径,并copy到房老师所说的目录下,但我试了一下,不知道是配置的不对还是什么情况,改不改似乎都没有用

如果您执意想使用这种方法,请如下行所示,将PATH改成自己cygwin64的gcc文件安装目录再复制和改文件名,并且可能还需要更改很多地方,但是笔者作为互联网小丑,,,肯定是不会写代码的

set PATH=D:\\ProgramData\\cygwin64\\bin;%PATH%

3.1_Configure_Cygwin64-C-env_to_MATLAB

就像我之前所说,如下图所示,默认情况下MATLAB这个笨比不会自动搜索环境变量找到我们自定义安装的C编译器 # 该图也体现了我为什么反感powershell这绝世劲爆美妙功夫高还没法改opt配色的配色方案

那现在该做的就比较明晰了,现在的目标是手动配置matlab的C编译器,

参考 I already have MinGW on my computer. How do I configure it to work with MATLAB? - MATLAB Answers - MATLAB Central (mathworks.cn)

不然就是这个错误,就很有开源软件的特点

先在系统变量变量添加cygwin64安装目录,我这里是D:\ProgramData\cygwin64,如果您的安装目录不一致请自行调整

执行 mex -setup -v 命令让MATLAB查找可用的环境变量

mex -setup -v

至于为什么MATLAB这个笨比会查找这个,您可以考虑去

%MATLAB%\^R[0-9]{4}[ab]$\bin\^win[0-9]{2}$\mexopts\mingw64.xml

里寻找被上古神秘力量封存的真相,当然,

如果不出意外,mex -setup -v 命令中会显示类似下图所示的检索结果

如果您的计算机并没有安装MSVC编译器,那么matlab会默认给您配置为当前已查找到的唯一编译器;如果之前有其他的C编译器,那么就按照提示执行命令 # 每台计算机的安装目录都不尽相同,请按照您的计算机给出的提示执行

mex -setup:"C:\\Program Files\\MATLAB\\R2022a\\bin\\win64\\mexopts\\mingw64.xml" C

随后再执行make mex即可正常编译出和房老师文档中所述的mex文件 # 是不是官方推荐编译器已经无所谓了

将编译出的mmc.mexw64文件路径 %your_git_path%/mmc/mmclab/ 添加到matlab的环境变量里,执行您的脚本或者example内的脚本,正常进行模拟即表示成功

当然,您直接使用iso2mesh划分网格,使用json串给mmc传参,再调用iso2mesh的绘图函数也是可以的

enjoy.

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值