最近五一放假总算有时间沉淀一下,今天偶然知乎上刷到有MIT胡大神开发了一种可微分式编程语言,觉得这块应用前景非常广阔,故决定尝试从头编译whl安装包并学习一下(注意就是从头编译,而不是什么pip install 之类的,那样就没啥可折腾的了) 由于没连服务器,家里只有一个安了win的笔记本,那么就尝试在win平台编译吧!
https://zhuanlan.zhihu.com/p/97700605
https://zhuanlan.zhihu.com/p/101398681?from_voters_page=true
具体原理参照上述链接和流程图,taichi实际上是把数据结构和算法给解耦开了,因此可以让计算机图形研究者关注于数据结构本身,繁杂的计算被屏蔽掉,底层求解系统动力学方程采用MLS-MPM方法(Lagrangian particle和Eulerian grid,这里拉格朗日其实是指粒子运动符合拉格朗日经典力学的方程,也就是那个二阶常微分方程,和哈密顿力学可以相互转化,这里突然想能不能仿真出符合薛定谔方程的量子体系CG),且有自己的可微分引擎做优化,速度比tensorflow和torch快得多,大大降低了计算机图形学的门槛。。。具体细节后面慢慢研究
主要有三个:
(1)repo 1:只实现物质点法的源码,简单编译就可看到效果
https://github.com/yuanming-hu/taichi_mpm
(2)repo 2:taichi编程语言项目地址,这个是核心
https://github.com/taichi-dev/taichi
(3)repo3 :10种可微分物理场景的taichi实现的py代码demo
https://github.com/yuanming-hu/difftaichi
这里是要从头编译出taichi,因此所记录片段基于repo 2
从项目的issues可以看到 v-0.6.0的taichi已经release了,查看一下依赖环境,看作者说正在从LLVM8转到LLVM10,转化期间会通过宏进行一定兼容。
这里为了求稳定,同时参照appveyor里的命令,我的配置如下:
VS2017 + llvm8.0.1+ clang8.0.1 + python36 + cuda10.0 + opengl
注意1:如果环境为VS2019,那么clang必须要大于9.0.0,否则不兼容
注意2:python需要装好git
项目地址:https://github.com/llvm/llvm-project
直接clone下来,注意选择是8.0.1分支
// llvm 8.0.1 + clang 8.0.1 安装命令
git clone --branch llvmorg-8.0.1 https://github.com/llvm/llvm-project.git
cd llvm && git checkout
然后利用cmake生成vs工程文件
mkdir build && cd build
cmake -DLLVM_ENABLE_PROJECTS=clang -G "Visual Studio 15 2017" -A x64 -Thost=x64 ..\llvm
这里要注意设置 clang随同llvm一起编译,而且 -A和 -Host都要选x64,否则就会比较慢,因为win系统会默认选择host86的。。。
生成完毕后用vs打开llvm.sln,批生成 ->Install Release就行了
(注意默认install位置为 C:\Program Files (x86)\LLVM 因此要以管理员方式启动VS,否则Install时候会出错,当然Build时候不会!!)
编译安装完毕后如下图所示
然后自然要把clang添加到系统环境变量里面,然后打开cmd测试
成功!!
至此llvm + clang准备完毕
git clone --branch v0.6.0 https://github.com/taichi-dev/taichi.git
cd taichi && git checkout
克隆完毕后最好直接把整个project拉入python IDE,这样修改方便些
然后重点来了,\external\glad \external\glfw \external\spdlog都是空的,这个需要先下好,而且通过查看源码,发现glad需要如下配置
地址:
glad:https://glad.dav1d.de/
glfw: https://www.glfw.org/download.html
spdlog:https://github.com/gabime/spdlog
如果不想自己一个一个下,还是参考appveyor里的命令,直接运行
python misc\ci_setup.py 会自动帮你git clone上面三个依赖的源码和后面打包成whl需要的pip包,当然里面的脚本可能需要修改一下,加快速度
比如下面最好加个镜像源加快pip install速度,否则难以忍受。。。。
OK准备完毕
上述的llvm和依赖包处理完毕后,就开始编译吧
cd taichi && mkdir build && cd build
cmake .. -G "Visual Studio 15 2017"-A x64 -Thost=x64 -DPYTHON_EXECUTABLE="你的python.exe路径" -DLLVM_DIR="llvm的cmake-config路径,一般是**\instal\lib\cmake\llvm"
然后vs打开taichi.sln,直接Build Release
注意:如果Build Release那么python下面需要如下修改
直接build就行了,最后成功了
得到了taichi_core.dll
这里按照misc\windows_build.py里面样子直接调用下面几个命令
第一个命令将dll变成pyd
第二个命令进行laplace测试
第三个命令进行大量测试((这个最耗时)
第五个命令发布包
直接选取exampls下面的几个例子测试下自己编的包
(3)物质点法88
(4)物质点法
(5)台球 difftaichi
然后还可以把vs附加到进程里面进行调试,这样就可以更好理解源码。
后面有时间再仔细研究学习下底层的细节