Taichi(太极)v1.1.0 已经发布,这是专为高性能计算机图形学设计的编程语言。
具体更新内容如下:
新的功能
量化数据类型
高分辨率模拟可以提供出色的视觉质量,但通常受到板载 GPU 内存容量的限制。此版本添加了量化数据类型,允许定义自己的整数、定点数或任意位数的浮点数,在硬件限制和模拟效果之间取得平衡。
有关该特性的全面介绍,请参阅使用量化数据类型。
离线缓存
Taichi 内核在第一次被调用时被隐式编译。编译结果保存在在线内存缓存中,以减少后续函数调用的开销。只要内核功能不变,就可以直接加载启动。
但是当程序终止时,缓存不再可用。 如果再次运行该程序,Taichi 必须重新编译所有内核函数并重建在线内存缓存。由于编译开销,Taichi 函数的第一次启动总是很慢。
为了解决这个问题,这个版本增加了离线缓存功能,它将编译缓存转储到磁盘以供将来运行。在随后的运行中,第一次启动的开销可以大大减少。
Taichi 现在默认构建并维护一个离线缓存。
正向模式自动微分
通过 ti.ad.FwdMode 添加正向模式自动微分。
与现有的计算向量雅可比积 (vJp) 的反向模式自动微分不同,正向模式在评估导数时计算雅可比向量积 (Jvp)。 因此,在函数的输出数量大于其输入的情况下,正向模式自动微分效率更高。
该例子演示了正向模式和反向模式下的雅可比矩阵计算。
SharedArray(实验性)
GPU 的共享内存是在每个线程块(或 Vulkan 中的工作组)中可见的快速小型内存,广泛用于性能优先的场景。
为了访问 GPU 的共享内存,此版本在命名空间 ti.simt.block 下添加了 SharedArray API。下图说明了 Taichi 的 SharedArray 的性能优势。 使用 SharedArray,Taichi Lang 可以媲美甚至优于等效的 CUDA 代码。
纹理(实验性)
Taichi 现在支持 Vulkan 和 OpenGL 后端的纹理双线性采样和原始纹理提取。此功能利用硬件纹理单元,并减少了在图像处理任务中手动组合双线性插值代码的需要。
此功能还为光栅化或光线跟踪等任务中的纹理映射提供了一种简单的方法。在 Vulkan 后端,Taichi 还支持图像加载和存储。可以直接操作图像的纹素,并在随后的纹理映射中使用该图像。
当前的纹理和图像 API 处于早期阶段,可能会发生变化。未来计划支持无绑定纹理以,扩展到光线追踪等任务。还计划将完整的纹理支持扩展到支持纹理 API 的所有后端。
其他一般改进和修复可查看更新公告:https://github.com/taichi-dev/taichi/releases/tag/v1.1.0