|
2022年4月13日,Taichi v1.0.0发布。该版本公布的兼容性变更包括:开源许可证变更为Apache-2.0、支持Python 3.10、适配manylinux2014安装包。新功能包括:脱离Python的部署方案、非内联函数(试验功能)、字面量的类型标注、顶层for循环的行为控制、math模块、新命令ti gallery。重要改进包括:加强的矩阵类型、更灵活的自动微分系统、assert语句中的格式化字符串支持。文档变更包括新版的Taichi语言规范。
2 x1 m" O. t; m" [ 兼容性变更
, J* |3 [+ G9 H1 K& Y9 z. Y5 N 开源许可证变更
5 m. }3 H" x' B1 r) B: q# R6 H8 [: ? 经过在#4607的公开投票,Taichi使用的开源许可证从MIT变更到Apache-2.0。
% a. S0 z: z6 n/ o# Q7 G; M4 c 支持Python 3.10 1 V" ?/ v9 O( E8 K
此版本增加了对Python 3.10的支持(Windows、macOS与Linux)。 ! Y5 ^6 |+ C% ]0 e! F9 Z0 z8 O
适配manylinux2014的安装包 ( X& X2 I/ s, r! k
之前Taichi只支持拥有glibc 2.27以上版本的Linux发行版(如Ubuntu 18.04以上)。自v1.0.0起,Taichi额外提供了适配manylinux2014的安装包,使其能在包括CentOS 7在内的绝大部分现代Linux发行版上运行。需要注意的是,该适配版本仅包含CPU和CUDA两个后端。
* B3 r6 W4 `5 ^% ?: W; m( f 弃用声明
& c; [5 i5 E! m- G9 `! l$ a 自此版本起,Taichi将废弃ti.ext_arr()接口,改用ti.types.ndarray()。后者同时支持Taichi Ndarray与外部数组(如NumPy数组)。 + a$ k( q6 w5 B2 H$ L1 x
Taichi考虑在v1.1.0时停止对Python 3.6的支持。如有疑问,可参与GitHub Discussion上对此的讨论#4772。 ; g1 m$ z4 g @! N
新功能 6 }3 P. W- `5 {' E8 N; i( R2 u
脱离Python的部署方案
5 E2 H: h0 J$ \ Taichi在v1.0.0中发布了与OPPO US Research Center联合开发的将Taichi部署到如移动端设备等脱离Python运行时环境的部署方案Taichi AOT。
' n+ e2 e' |& p) m) A: M0 \0 ? 该方案允许用户在Python环境中将编译好的各种Taichi kernel存储下来,并且提供了一个C++运行时库来方便地加载和运行它们。该C++运行时提供了一系列API方便用户的Python Taichi程序部署到C++的环境中。为了验证该部署方案的易用性,我们将v0.9.0中最新发布的隐式有限元(Implicit FEM)的示例部署到了一个安卓程序中。阅读原文前往GitHub的release notes下载apk文件,试玩Taichi AOT的示例或了解C++运行时的API,也可以访问社区查看样例程序! + \2 M/ P- r% y3 s. p3 `9 I* f
用Taichi模拟的弹性“怪兽”在安卓上实现交互功能 + f4 Q* g( S) Y v( B6 c( G
PS.我们在开发安卓app的过程中遇到了一个有趣的可能和安卓系统资源调度相关的性能问题,非常欢迎各路大神一起探讨。(详情请访问#16)
9 R/ k6 y; k' R' u% p; M# B. _ 非内联函数(试验功能)
* s. f8 t7 e4 r9 }& m" n 现有的Taichi函数( ti.func)会在编译期被内联到kernel中。然而,如果一个kernel调用了过多的Taichi函数,内联结束后这个kernel会变得非常长,导致编译很慢。这个问题在涉及编译期递归的Taichi函数上变得尤其严重。
; v2 R9 x% o- G# T& d9 ~# O0 k8 _ Taichi v1.0.0推出了试验功能:非内联函数( ti.experimental.real_func)。非内联函数会被独立编译,而不会像现有的Taichi函数一样被内联。因此,上面提到的编译时间问题将得到极大的改善。目前,非内联函数只支持标量数据类型作为参数和返回值。 - {- Z# V+ M7 q. w6 y; ?& l( c- V C
非内联函数和现有Taichi函数的主要区别包括:
: M0 \# _" c1 j0 r, K 在非内联函数的任意位置都可以写return语句,而在现有Taichi函数中不能在static的if/for/while语句内写return语句;
' m$ Q7 f! ]6 ^) v* m' c 非内联函数可以在运行时递归调用,而现有Taichi函数只支持编译期递归; - A0 W- G4 Y+ {' b* Z2 D
taichi非内联函数的参数和返回值必须有类型标注,而他们在现有Taichi函数中是可选的。taichi https://taichi-lang.cn/
- p2 W! Y7 w- j# r+ m K# U% d8 H* D |