开发技巧
本节将给您一些关于 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
的读取访问器内核。