Taichi Lang:面向高性能数值计算的 Python 嵌入式并行编程语言实战指南
2026/9/10 15:03:24 网站建设 项目流程

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(包含analysistransformscodegenruntime等子系统),两者通过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/elsewhilefor、函数调用等写法都与 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 树的根,pointerdense等节点逐级嵌套,最终通过place(x)将数据落地。代码中还使用了ti.is_activeti.rescale_indexblock1.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:

类别后端说明
CPUx64AMD64 / x86_64,完全可用
CPUarm64Aarch64,WIP
GPUcudaNVIDIA CUDA
GPUmetalApple Metal
GPUopenglOpenGL Compute Shaders
GPUdx11/dx12Microsoft DirectX,WIP
GPUamdgpuAMD GPU
GPUvulkanVulkan
GPUglesOpenGL ES
其他js/opencl预留,暂不可用(N/A)

5. 更多特性

  • GGUI:跨平台的、基于 Vulkan 的 3D 可视化器,仓库中 ggui_examples 提供了mpm128_ggui.pyfem128_ggui.pystable_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 的核心编程模型,逐段拆解如下:

  1. ti.init(arch=ti.gpu):初始化 Taichi 运行时并指定后端为 GPU。ti.gpu会自动在当前环境可用的 GPU 后端(CUDA/Vulkan/Metal/OpenGL)中选择;也可以显式指定arch=ti.cpu(多核 CPU)或arch=ti.cuda等具体后端。

  2. ti.field(dtype=float, shape=(n * 2, n)):声明一个形状为640×320的标量场作为像素缓冲区。ti.field是 Taichi 最基础的数据容器,底层即由 SNode 组织。

  3. @ti.func@ti.kernel@ti.func用于定义可在 kernel 内调用的设备函数(如复数平方complex_sqr);@ti.kernel标记的paint(t: float)则是可编译、可并行执行的内核,t是内核参数。

  4. for i, j in pixels:这是 Taichi 并行化的关键语法。对场(或ti.ndrange)的顶层for循环会被自动并行化——注释# Parallelized over all pixels说明每个像素独立计算,互不依赖,因此可安全并行。内层的while循环则是每个线程内的串行迭代(此处迭代最多 50 次逼近 Julia 集)。

  5. ti.Vector:Taichi 内置的向量类型,z.norm()计算模长,支持逐分量运算,pixels[i, j]以 Python 风格的多维索引读写场元素。

  6. 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 galleryti example

ti gallery等命令由ti命令行入口提供,其实现位于 python/taichi/_main.py,入口在 python/taichi/main.py(调用main())。

从源码看,gallery命令(python/taichi/_main.py)的工作方式如下:

  1. 读取包内预生成的画廊底图assets/**/ti_gallery.png_main.py中通过glob递归查找,见 python/taichi/_main.py);
  2. ti.GUI("Taichi Gallery", ...)打开窗口,按 2 行 × 4 列的网格(ncols = 4)布局 12 个示例磁贴,每个磁贴128×128像素,磁贴间距等参数在源码中以常量定义;
  3. 通过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 渲染)、fractalmpm128pbf2d(流体)、mass_spring_game等,基本覆盖了采样、仿真、渲染几大类典型用途。

此外,ti example <名称>命令(python/taichi/_main.py 附近)可以直接运行指定名称的示例脚本,例如ti example mpm128_main.py中还注册了gifvideovideo_speedvideo_cropvideo_scaletest等命令,可用于示例录屏与测试。

从源码构建 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.pystable_fluid.pypbf2d.pynbody.pygame_of_life.py等;
  • rendering/:渲染,如sdf_renderer.pyrasterizer.pycornell_box.pytaichi_ngp.py
  • features/:特性演示,sparse/(稀疏场)、gui/(交互与 IO)、io/(导出网格/PLY/视频);
  • ggui_examples/:基于 Vulkan 的 3D 交互可视化示例;
  • graph/:Taichi 图模式(ti.graph)示例,如mpm88_graph.py
  • autodiff/:自动微分示例(simple_derivative.pyregression.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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询