type
status
date
slug
summary
tags
category
icon
password
贡献指南
测试
代码风格
安装指南
taichi LLVM
论文介绍
The taichi
from EECS-2022-112.pdf (berkeley.edu) 2.3
JIT编译流水线
Python AST → Taichi AST
Chi-IR 结合 Taichi compiler 将Front-end AST自动并行,并转换为intermediate representation(IR)。Taichi compiler执行了主要的优化工作
优化后的Chi-IR发送给 Taichi backend,backend编译到GPU kernel,Backend APIs即为CUDA、CPU、OpenGL
AOT
部分工业软件平台JIT pipline开销过大
Engineering Challenges
Taichi的后端逐渐增多,而这些后端都是独立维护的,导致Taichi在使用不同后端时需要考虑不同的功能支持,这和Taichi的初衷背道而驰
本repo主要工作贡献
- 通过GPU抽象层,使用SPIR-V codegen
- Taichi CGraph AOT 预编译
Unified Device API
需要多游戏引擎和渲染中间件通常都使用一个抽象层,称为Render Hardeware Interface RHI,这里从用类似的方法,创建RHI 中间件 Unified Device API
设计阶段
作者首先survey了常用的backend API,找出他们间的共性,区别以适配这些后端。
Work-submission Model
主要有两种任务提交模型,immediate and batched
immediate在实际执行时可能也被API转换为batched以进行一些优化
batched:API提供 stream 和 command list 执行一个指令串,具有更少的overhead和更好的transparency,通常在较新的API使用
Resource Model
API tracked:API对硬件资源的分配可能时lazy的,API需要保证硬件资源是可用的
User Controlled:explicit model允许高级的资源管理技巧
Unifuied Device API设计细节
Device object代表实际backend API提供的硬件设备,所有的资源allocate目标
Allocation 分配资源的call
Stream object:每个stream中的指令有序执行,但是不一定按顺序完成,因此需要保证stream的顺序
StreamSemaphore:barrier
3.1.3 设计依据
- code-gen 和 runtime的isolation
- batched execution 和 graph based execution更容易优化
- explicit memory management
- optional features
3.1.4 Implementation
基于Vulkan API,并且Vulkan的特性比较丰富
Valkan需要手动track resource的usage
由于代码在host端运行,track GPU resource life-time 比较困难,由于command batches的执行方式,确保资源在batch中使用,结束batch则释放
但是这种方式比较占用memory
3.2 SPIR-V codegen
portability
Single Static Assignment fron IR:transform Chi-IR to SPIR-V
efficency
3.2.2 Implementation
Chi-IR → SPIR-V statements
- Author:NotionNext
- URL:https://tangly1024.com/article/Interested%20in%20Taichi
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!