「Taichi 有哪些应用场景?」,「Taichi 能否在其它平台运行?」,「编程新人如何快速上手 Taichi?」等一系列问题,让不少对 Taichi 有兴趣的人感到好奇。
前不久,我司两位全能高手——资深研究科学家刘天添和技术布道师赵亮,详细聊了聊 Taichi 的设计,使用方法和应用案例,分享中,正有对这些问题最直接的回答。
以下为精华版文字实录,分为四个部分:Taichi 是什么 / Taichi 提供了哪些功能 / 大家都在用 Taichi 做什么 / 新手如何快速入门。
Taichi 是一种嵌入在 Python 中的并行编程语言。通过即时编译的方式将 Python 编译成高性能的并行机器代码来执行,并且可以让每个 Python 程序员都可以轻松玩转这些高性能的计算代码,尤其是在数值计算上。
Taichi 的前端在设计时保留了和 Python 非常接近的语法,几乎可以让用户简单地添加一个 @ti.kernel 修饰符就可以无缝地把自己的 Python 函数变成高效的 Taichi Kernel。每个 Kernel 被 Taichi 编译器接管即时编译并进行编译器优化,编译完成的 Taichi Kernel 会选择用户指定的后端转译成可执行的机器代码,被部署到 CPU 或 GPU 上运行。
虽然 Taichi 的前端在 Python 中,并可以让用户通过 pip 来直接安装,但是它拥有独立中间表示和编译系统。所以理论上来说,Taichi 也可以被镶嵌到不同的前端当中进行调用。没错,Taichi 是一种支持多平台运行,代码量少、运行还快的编程语言。
02 Taichi 提供了哪些功能?
早期,大部分的 Taichi 程序是被用来做仿真的,比如粒子和网格系统,下图这是一个 MLS-MPM 系统,这个系统拥有 1,000 万个粒子在屏幕中同时运行。

Automatic Parallelization & Data-oriented Language Design
Taichi 程序之所以能被高效运行,除了编译器优化之外,主要是得益于它的两个设计理念:第一是 Taichi 可以自动并行每个 Taichi kernel 最外层的 for 循环,这使得每个 Taichi 程序可以最大化调用计算硬件的性能;第二则是解耦数据排布和计算,这可以让用户在不修改计算代码的同时,测试不同的数据排布产生的影响,提高内存访问的效率。
除此之外,Taichi 还包含很多更加复杂的功能。比如稀疏计算,在下面这个多物理的仿真系统里面,可以看到有沙子、流体、弹性物体,但这些仿真的粒子并不会占满整个空间。在 2D 系统中,它们可能只占了屏幕中的一半左右的空间;在 3D 系统中,它们占用的空间比例会更少。Taichi 为此自动提供了稀疏计算,对无用的 Grid Space 不进行存储和操作,从而降低内存消耗,大幅提升运算效率。
什么是量化计算?平时我们用的整型或浮点型通常是固定位数的,比如说 16 位、32 位、64 位。但是很多时候,我们需要在程序性能、精确度、内存占用方面做一些权衡,比如用更低的精确度换取更高的分辨率和性能。量化计算就能通过操作基础数据类型的位数,实现上述目标。下面的 Stable Fluids 仿真,正是经过量化计算,生成了超高分辨率的仿真系统。
内容中包含的图片若涉及版权问题,请及时与我们联系删除
评论
沙发等你来抢