Taichi Lang:面向高性能数值计算的 Python 嵌入式并行编程语言实战指南
【免费下载链接】taichiProductive, portable, and performant GPU programming in Python.项目地址: https://gitcode.com/GitHub_Trending/ta/taichi
Taichi Lang 是一个开源、命令式、并行的编程语言,专为高性能数值计算设计,它嵌入在 Python 中,借助 LLVM 等 JIT(即时编译)框架,将计算密集型的 Python 代码编译为原生 GPU 或 CPU 指令。本文以项目 README.md 为主线,结合仓库源码,系统讲解 Taichi Lang 的定位、核心特性、安装方式、首个程序的完整写法、命令行工具、源码构建方法以及示例生态,读完即可上手编写并运行自己的并行计算程序。
Taichi Lang 是什么
根据 README.md 的定义,Taichi Lang 是"an open-source, imperative, parallel programming language for high-performance numerical computation",即:
- 开源:采用 Apache License 2.0 分发(见 LICENSE);
- 命令式(imperative):以语句序列描述计算过程,与 Python 的编程心智模型一致;
- 并行:
@ti.kernel中的顶层for循环默认被并行化,自动映射到 GPU/CPU 的多核执行; - 嵌入式(embedded in Python):不是独立的解释器,而是作为 Python 包存在,直接复用 Python 的语法与生态(NumPy、PyTorch 等);
- JIT 编译:运行时将 Python 代码即时编译为原生指令,而不是解释执行。
从仓库结构可以印证这一架构:Python 前端位于 python/taichi,C++ 编译器核心位于 taichi(包含analysis、transforms、codegen、runtime等子系统),两者通过taichi/_lib/core原生扩展桥接(见 python/taichi/init.py)。
Taichi Lang 的应用范围非常广泛,涵盖:实时物理仿真、数值计算、增强现实(AR)、人工智能、视觉与机器人、影视与游戏视觉特效、通用计算等领域。仓库 python/taichi/examples 中的示例即是这些应用方向的直接体现。
为什么选择 Taichi Lang
README 归纳了四大核心优势,每一点都能在仓库源码中找到对应实现:
1. 围绕 Python 构建,语言零门槛
Taichi Lang 与 Python 语法几乎一致,同时深度融入 Python 生态,包括 NumPy 与 PyTorch。这意味着算法表达几乎没有额外的心智负担,if/else、while、for、函数调用等写法都与 Python 相同。
2. 灵活性:SNode 数据结构
Taichi Lang 提供一组通用的数据容器,统称为SNode(读作 /ˈsnoʊd/,Sparse Node 的缩写),用于组合层次化、多维的 field(字段)。SNode 可以覆盖数值模拟中的大量使用模式,例如空间稀疏计算(spatially sparse computing)。
仓库中的 python/taichi/examples/features/sparse/taichi_sparse.py 是一个典型示例,它通过 SNode 层次结构构建了三级稀疏场:
block1 = ti.root.pointer(ti.ij, n // 64) block2 = block1.pointer(ti.ij, 4) block3 = block2.pointer(ti.ij, 4) block3.dense(ti.ij, 4).place(x)ti.root是 SNode 树的根,pointer、dense等节点逐级嵌套,最终通过place(x)将数据落地。代码中还使用了ti.is_active、ti.rescale_index、block1.deactivate_all()等稀疏场专用 API——这正是 SNode 支撑"按需激活、稀疏存储"计算的核心能力。
3. 性能:@ti.kernel与 JIT 编译
使用@ti.kernel装饰器标注的函数,会被 JIT 编译器自动编译为高效的 GPU 或 CPU 机器码并并行执行。开发者用 Python 写算法,编译器负责生成高性能原生代码,无需手写 CUDA/汇编。
4. 可移植性:一次编写,到处运行
代码只需编写一次,即可在不同后端运行。目前 Taichi Lang 支持绝大多数主流 GPU API。仓库中的后端清单定义在 taichi/inc/archs.inc.h:
| 类别 | 后端 | 说明 |
|---|---|---|
| CPU | x64 | AMD64 / x86_64,完全可用 |
| CPU | arm64 | Aarch64,WIP |
| GPU | cuda | NVIDIA CUDA |
| GPU | metal | Apple Metal |
| GPU | opengl | OpenGL Compute Shaders |
| GPU | dx11/dx12 | Microsoft DirectX,WIP |
| GPU | amdgpu | AMD GPU |
| GPU | vulkan | Vulkan |
| GPU | gles | OpenGL ES |
| 其他 | js/opencl | 预留,暂不可用(N/A) |
5. 更多特性
- GGUI:跨平台的、基于 Vulkan 的 3D 可视化器,仓库中 ggui_examples 提供了
mpm128_ggui.py、fem128_ggui.py、stable_fluid_ggui.py等 3D 交互示例; - 可微编程(differentiable programming):支持自动微分,对应 taichi/transforms/auto_diff.cpp 及 python/taichi/ad 模块;
- 量化计算(quantized computation,实验性):低比特精度模拟,对应 QuanTaichi 相关工作。
安装 Taichi Lang
环境要求(Prerequisites)
根据 README 的安装前提说明:
- 操作系统:Windows、Linux、macOS;
- Python:README 声明为 3.6 ~ 3.10(仅 64 位);而当前仓库 setup.py 的
classifiers中列出 3.7 ~ 3.11,且 version.txt 当前版本为v1.8.0,实际支持的版本范围以构建配置为准; - 计算后端:x64/ARM CPU、CUDA、Vulkan、OpenGL(4.3+)、Apple Metal,以及实验性的 WebAssembly。
使用 pip 安装稳定版
pip install --upgrade taichi安装完成后即可使用两条核心命令验证环境:
pip install taichi # 安装 Taichi Lang ti gallery # 启动示例展示画廊安装 nightly 版本(可选,有风险)
项目还提供 nightly 包。注意:nightly 包未经完整测试,可能崩溃,项目方不保证其有效性,尝鲜未测试新功能风险自负。nightly 包托管在自建 PyPI 上(自建源可以更频繁、更长期地发布):
pip install -i https://pypi.taichi.graphics/simple/ taichi-nightly验证安装
安装成功后,可以运行 README 中的分形示例;更直接的方式是执行ti gallery,它会打开一个交互式画廊窗口,用鼠标点选并运行仓库内置的示例程序(详见下文"命令行工具"一节)。
第一个程序:2D 分形(Julia Set)
README 提供了完整的入门示例——一个用 Taichi 编写的 2D Julia Set 分形动画。完整代码如下(与仓库 python/taichi/examples/simulation/fractal.py 对应):
# python/taichi/examples/simulation/fractal.py import taichi as ti ti.init(arch=ti.gpu) n = 320 pixels = ti.field(dtype=float, shape=(n * 2, n)) @ti.func def complex_sqr(z): return ti.Vector([z[0]**2 - z[1]**2, z[1] * z[0] * 2]) @ti.kernel def paint(t: float): for i, j in pixels: # Parallelized over all pixels c = ti.Vector([-0.8, ti.cos(t) * 0.2]) z = ti.Vector([i / n - 1, j / n - 0.5]) * 2 iterations = 0 while z.norm() < 20 and iterations < 50: z = complex_sqr(z) + c iterations += 1 pixels[i, j] = 1 - iterations * 0.02 gui = ti.GUI("Julia Set", res=(n * 2, n)) for i in range(1000000): paint(i * 0.03) gui.set_image(pixels) gui.show()这个 23 行左右的程序浓缩了 Taichi 的核心编程模型,逐段拆解如下:
ti.init(arch=ti.gpu):初始化 Taichi 运行时并指定后端为 GPU。ti.gpu会自动在当前环境可用的 GPU 后端(CUDA/Vulkan/Metal/OpenGL)中选择;也可以显式指定arch=ti.cpu(多核 CPU)或arch=ti.cuda等具体后端。ti.field(dtype=float, shape=(n * 2, n)):声明一个形状为640×320的标量场作为像素缓冲区。ti.field是 Taichi 最基础的数据容器,底层即由 SNode 组织。@ti.func与@ti.kernel:@ti.func用于定义可在 kernel 内调用的设备函数(如复数平方complex_sqr);@ti.kernel标记的paint(t: float)则是可编译、可并行执行的内核,t是内核参数。for i, j in pixels:这是 Taichi 并行化的关键语法。对场(或ti.ndrange)的顶层for循环会被自动并行化——注释# Parallelized over all pixels说明每个像素独立计算,互不依赖,因此可安全并行。内层的while循环则是每个线程内的串行迭代(此处迭代最多 50 次逼近 Julia 集)。ti.Vector:Taichi 内置的向量类型,z.norm()计算模长,支持逐分量运算,pixels[i, j]以 Python 风格的多维索引读写场元素。ti.GUI("Julia Set", res=(n * 2, n)):创建 2D 显示窗口。主循环中反复调用paint(i * 0.03)更新画面(时间参数随帧推进),通过gui.set_image(pixels)将场数据上传到窗口,gui.show()刷新显示。仓库版本在 fractal.py 中进一步用while not gui.get_event(ti.GUI.ESCAPE, ti.GUI.EXIT)监听 ESC 键退出,并封装了main()入口。
安装正常的话,运行后将看到随时间连续变化的 Julia Set 分形动画,而这套"ti.field存数据 +@ti.kernel并行计算 +ti.GUI可视化"的流程,正是 Taichi 绝大多数示例(包括 MPM 物理仿真)的通用骨架。
命令行工具:ti gallery与ti example
ti gallery等命令由ti命令行入口提供,其实现位于 python/taichi/_main.py,入口在 python/taichi/main.py(调用main())。
从源码看,gallery命令(python/taichi/_main.py)的工作方式如下:
- 读取包内预生成的画廊底图
assets/**/ti_gallery.png(_main.py中通过glob递归查找,见 python/taichi/_main.py); - 用
ti.GUI("Taichi Gallery", ...)打开窗口,按 2 行 × 4 列的网格(ncols = 4)布局 12 个示例磁贴,每个磁贴128×128像素,磁贴间距等参数在源码中以常量定义; - 通过
gui.get_cursor_pos()与gui.is_pressed(ti.GUI.LMB)检测鼠标悬停与左键点击,命中后打印示例源码并用subprocess启动对应脚本(_exec_python_file)。
gallery内置的 12 个示例(见 python/taichi/_main.py)包括:poisson_disk_sampling(泊松圆盘采样)、mass_spring_3d_ggui(3D 质点弹簧)、sdf_renderer(SDF 渲染)、fractal、mpm128、pbf2d(流体)、mass_spring_game等,基本覆盖了采样、仿真、渲染几大类典型用途。
此外,ti example <名称>命令(python/taichi/_main.py 附近)可以直接运行指定名称的示例脚本,例如ti example mpm128。_main.py中还注册了gif、video、video_speed、video_crop、video_scale、test等命令,可用于示例录屏与测试。
从源码构建 Taichi Lang
如果想尝试实验性特性,或为特定环境构建 Taichi,可以走源码构建路线。README 指向了开发者安装文档;从仓库本身来看:
- 构建系统基于scikit-build(CMake + setuptools 的结合),见 setup.py 开头的
from skbuild import setup; - 构建流程会把
external/assets拷贝到python/taichi/assets,编译 C++ 扩展并打包taichi_python; - 支持通过环境变量定制构建:
TAICHI_CMAKE_ARGS:向 CMake 传递额外参数(setup.py中用shlex.split解析,见 setup.py);BUILD_NUM_THREADS:控制并行编译线程数;DEBUG/RELWITHDEBINFO/MINSIZEREL:切换 C++ 扩展的构建类型;
- CMake 相关配置分布在 cmake 目录,例如 TaichiCore.cmake、TaichiCXXFlags.cmake 等;
- 依赖的第三方库(LLVM、Vulkan 头文件、SPIRV-Tools、glfw、eigen 等)统一放在 external 目录。
仓库中的示例生态
python/taichi/examples 按主题组织了数十个可直接运行的示例:
- simulation/:物理仿真,如 mpm128.py(128² 网格的移动粒子半隐式 MPM 雪/水仿真,含
ti.svd奇异值分解、塑性硬化、P2G/G2P 等完整流程)、euler.py、stable_fluid.py、pbf2d.py、nbody.py、game_of_life.py等; - rendering/:渲染,如
sdf_renderer.py、rasterizer.py、cornell_box.py、taichi_ngp.py; - features/:特性演示,
sparse/(稀疏场)、gui/(交互与 IO)、io/(导出网格/PLY/视频); - ggui_examples/:基于 Vulkan 的 3D 交互可视化示例;
- graph/:Taichi 图模式(
ti.graph)示例,如mpm88_graph.py; - autodiff/:自动微分示例(
simple_derivative.py、regression.py等); - algorithm/:算法示例(
mgpcg.py多重网格预条件共轭梯度、poisson_disk_sampling.py等)。
更多扩展项目与社区示例的汇总索引见 misc/links.md。
文档与学习资源
README 提供的主要文档入口(均为官方文档站资源,此处不做跳转)包括:技术文档(Technical documents)、API 参考(API Reference)与官方博客(Blog)。仓库内也自带部分文档资料:
- docs:包含
lang(语言教程文章)、design(如 LLVM 稀疏运行时设计 docs/design/llvm_sparse_runtime.md)、rfcs(RFC 提案)等; - 示例源码本身就是极好的学习材料,从 minimal.py 这类最小示例开始,逐步阅读
simulation/下的完整仿真。
研究引用
如果在研究工作中使用了 Taichi Lang,README 给出了对应的学术论文(BibTeX 条目均收录在仓库 misc 目录):
- (SIGGRAPH Asia 2019) Taichi: High-Performance Computation on Sparse Data Structures—— Taichi 语言与稀疏数据结构编译器的基础论文,BibTeX 见 misc/taichi_bibtex.txt;
- (ICLR 2020) DiffTaichi: Differentiable Programming for Physical Simulation—— 可微物理仿真的 DiffTaichi 框架,BibTeX 见 misc/difftaichi_bibtex.txt;
- (SIGGRAPH 2021) QuanTaichi: A Compiler for Quantized Simulations—— 量化仿真的 QuanTaichi 编译器,BibTeX 见 misc/quantaichi_bibtex.txt。
许可证与社区
Taichi Lang 以Apache License 2.0分发,完整条款见仓库根目录 LICENSE。项目鼓励开源社区贡献,参与方式与规范见 CONTRIBUTING.md;社区讨论、议题报告与联系方式等信息同样收录在 README 中。对于安全相关问题,可通过 README 中列出的邮箱直接联系维护团队。
小结
从 README.md 出发,结合仓库源码可以看到:Taichi Lang 的核心价值在于"Python 的易用性 + 编译器的性能 + 多后端的可移植性"三者的统一。通过ti.init选择后端、ti.field声明数据、@ti.kernel编写并行内核、ti.GUI或 GGUI 完成可视化,一条完整的高性能计算开发链路清晰可见。对于物理仿真、数值计算、可微编程、图形渲染等场景的开发者而言,安装taichi后运行ti gallery,就是探索这门语言能力边界的最好起点。
【免费下载链接】taichiProductive, portable, and performant GPU programming in Python.项目地址: https://gitcode.com/GitHub_Trending/ta/taichi
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考