跳转至主要内容
Version: v1.6.0

开发技巧

本节将给您一些关于 Taichi 编译器开发的提示。 请确保您已经读完了开发者安装指南

Taichi 编译器的工作流

Life of a Taichi kernel逐步解释了 Taichi 的整个编译流程,你可以通过它快速入门 Taichi。

C++ 和 Python 标准

The C++ part of the Taichi compiler is written in C++17, and the Python part in 3.7+. You can assume that C++17 and Python 3.7 features are always available.

跨 Python/C++ 的高效代码导航

如果您正在开发语言前端(Python/C++ 界面),您可能 希望在 Python/C++ 代码中切换。 ffi-navigator 允许您从 Python 绑定跳到他们在 C++ 中的定义。 请跟着他们的 README 设置您的编辑器。

在不同阶段打印 IR

使用 ti.init(arch=desired_arch, **kwargs) 创建 Taichi 程序时,传入以下参数就可以使 Taichi 编译器打在不同阶段打印出 IR:

  • print_ir = True 打印内核编译过程中(不包括访问器)的 Taichi IR 转换过程。
  • print_accessor_ir = True:打印数据访问器的 IR 转换过程,这是一种特殊而简单的内核。 这个很少使用,除非您正在调试数据访问器的编译。
  • print_struct_llvm_ir = True:保存由 Taichi 结构体编译器生成的 LLVM IR。
  • print_kernel_llvm_ir = True: 保存由 Taichi 内核编译器生成的 LLVM IR。
  • print_kernel_llvm_ir_optimized = True:保存每个内核的优化过的 LLVM IR。
  • print_kernel_asm=True: save the emitted assembly code of each kernel (CUDA only).
note

Data accessors in Python-scope are implemented as special Taichi kernels. 例如,x[1, 2, 3] = 3 将调用 x 的写访问器内核,print(y[42]) 将调用 y 的读取访问器内核。