2022 年 2 月 22 日,太极图形团队发布了 Taichi v0.9.0。该版本公布的新功能包括:动态矩阵下标、Vulkan 后端在 macOS 上的支持、Google Colab 适配。重要改进包括:更稳定且组织更合理的 API、更优的报错信息、文档站优化等。
新功能
1. 矩阵的动态下标(实验功能)
在之前的 Taichi 版本中,矩阵只能通过常量下标访问。因此,你没有办法直接完成一些诸如把一个向量的最小值抹成 0 的常用操作:
当然你也可以用下面的方法(强制循环展开)绕过去,但这不够直观,效率也较低:
有了矩阵动态下标这一实验功能之后,你就可以顺畅地用前一种方式来写程序了,通过设置 ti.init(dynamic_index=True) 即可开启
在 v0.9.0 中,我们还加入了一个新的示例程序——隐式有限元弹性物体仿真 ti example implicit_fem),同样展现了动态下标功能的好处。在这个示例程序中,我们构建了一个较大(12 × 12)的海森矩阵用于隐式时间积分。如果没有动态下标功能,整个矩阵的构造循环需要被展开,使得编译时间需要 70 秒;而有了动态下标功能,直接按传统方式写循环就可以,编译时间减少到了 2.5 秒。
2. Vulkan 后端在 macOS 上的支持
v0.9.0 添加了 macOS 10.15 以上系统版本的 ti.vulkan 后端支持,因此 Mac 上也可以和其他平台一样使用 GGUI 了。
以下是一些简单的 GGUI 样例程序的使用方式:
3. 与 Google Colab 适配
如果之前你曾尝试在 Colab 上使用 Taichi,你可能发现 Colab 的系统会崩溃。在 v0.9.0 中,我们修复了导致该问题的代码,从而使 Taichi 可以在 Colab 上顺利运行。欢迎大家在 Colab 上畅享 Taichi 新版本!
改进
1. 更稳定、组织更合理的 API
我们非常重视保持 API 的长期稳定性, 并希望用户使用正确的 API 集合。为此,在这次的发布中我们重新整理了模块的结构,废弃了一些过时的 API,并隐藏了一些内部的 API。一些主要的改动有:
2. 更简洁精准的报错信息
在 Taichi 以往的版本中,编译错误经常会抛出很长的报错信息,其中大部分都对用户没有任何帮助。因此,用户往往需要花费很长的时间来阅读报错信息和定位出错的代码。在此次的更新中,我们精简了报错信息,只留下对用户有用的部分,大幅改善了用户的调试体验。
例如,对于下面的代码,
之前,Taichi 的报错信息像这样:
滑动可看,此处有 41 行
在 v0.9.0,报错信息变成了这样:
3. 更新的文档站
为了提升可读性和用户体验,我们重构了 Taichi 的文档站,并把新的 API 参考站(文档站右上角)整合其中。
加入我们的讨论共同打造下一个 Taichi 版本!
Taichi 社区始终是 Taichi 编程语言发展的核心动力。我们希望,每一个使用 Taichi 的你,都可以积极参与到 Taichi 发展道路的讨论中来,自由地发表自己的想法,一起打造更好的下一个 Taichi 版本。除了提 issue 外,我们还非常欢迎大家到 GitHub 的讨论区发言。
在讨论区内,最近一个比较热门的话题是类型定义和对象构造的方式(#4086, #4183)。简单来说,由于刚接触 Taichi 的同学有时会对 ti.Vectorti.types.vectorti.Vector.field 等一系列相似却又不同的 API 感到困惑,我们希望让他们变得更清晰,一种可能的改变方向是:
  • 类型名一律用小写;
  • 用 ti.types.vector 来定义一个向量类型;
  • 定义完类型如 my_vec2i = ti.types.vector(2, ti.i32) 后,用 my_vec2i([5, 10]) 来构造一个向量对象;
  • 为了方便,依然保留 ti.vector([1, 2]) 作为 ti.types.vector()([1, 2]) 的等价表达,由编译器完成对缺失类型信息的自动推导;
  • 使用 ti.field(dtype=my_vec2i, shape=100) 来构造一个 field 对象。 
太极图形研发团队期待聆听你们的观点!
阅读原文前往 GitHub 查看完整发布信息。
继续阅读
阅读原文