TaiChi v0.9.0 发布,引入矩阵动态索引和更稳定的 API
Taichi(太极)0.9.0 已经发布,这是专为高性能计算机图形学设计的编程语言。该版本引进了矩阵的动态索引(实验功能)、改善了当前 API 集的稳定性...
新特性
1、矩阵的动态索引(实验功能)
之前版本的矩阵只能通过常量索引访问,导致有些操作无法执行。比如无法将向量中的最小元素钳制(clamp 运算)到 0 :
@ti.kernel
def clamp():
... # assume we have a n-d vector A
min_index = 0
for i in range(n):
if A[i] < A[min_index]:
min_index = i
A[min_index] = 0
当然也可以利用循环展开,但这样写既不直观也不高效:
@ti.kernel
def clamp():
... # assume we have a n-d vector A
min_index = 0
for i in ti.static(range(n)):
if A[i] < A[min_index]:
min_index = i
for i in ti.static(range(n)):
if i == min_index:
A[i] = 0
有了这个矩阵动态索引的新特性,现在就可以平稳地运行第一段代码。此外,v0.9.0 版本添加了一个新的隐式 FEM(有限元方法)示例(),在这个例子中,为隐式时间积分构造了一个巨大的 (12 × 12) Hessian 矩阵。如果没有动态索引,整个矩阵构造循环需要展开,编译需要70秒;使用动态索引,可以应用传统的循环版本,编译时间缩短到2.5秒。
该矩阵动态索引特性可以通过设置 ti.init(dynamic_index=True) 来启用。
2、macOS 上的 Vulkan 后端
在 macOS 10.15+ 上添加对 ti.vulkan 后端的支持,现在可以在 MacBook 上运行 GGUI,运行以下 GGUI 示例:
# prerequisites: taichi >= v0.9.0 and macOS >= 10.15
# run GGUI examples
ti example fractal3d_ggui
ti example fem128_ggui
3、与 Google Colab 的兼容性
0.9.0 版本重构了编译器实现,使 Taichi 与 Google Colab 兼容。(如果在 Google Colab 笔记本环境中运行早期版本的 Taichi ,系统会崩溃 #235)
在 Google Colab 中运行!pip install taichi
以安装 Taichi 。
功能改进
1.、更稳定、更完善的 API
0.9.0 版本重新组织包结构,并弃用一些过时或内部 API :
种类 | 已弃用的 API | 替代品 |
---|---|---|
Builtin | max() |
ti.max() |
Builtin | min() |
ti.min() |
Atomic operation | obj.atomic_add() |
ti.atomic_add() |
Image-specific | ti.imread() |
ti.tools.imread() |
Image-specific | ti.imwrite() |
ti.tools.imwrite() |
Image-specific | ti.imshow() |
ti.tools.imshow() |
Profiler-specific | ti.print_profile_info() |
ti.profiler.print_scoped_profiler_info() |
Profiler-specific | ti.print_kernel_profile_info() |
ti.profiler.print_kernel_profiler_info() |
完整的 API 更改列表请参阅此 Google 文档 。
2、错误报告更简洁
该版本改善了错误报告的展示,在错误报告中删除了与开发人员无关的琐碎回溯,以改善调试体验。以下面这段代码为例:
import taichi as ti
ti.init()
@ti.func
def bar(a):
a = a + 2j
@ti.kernel
def foo():
bar(1)
foo()
0.9.0 版本之前,这段代码的错误报告如下:
[Taichi] Starting on arch=x64
Traceback (most recent call last):
File "error.py", line 13, in
foo()
File "/path_to_taichi/lang/kernel_impl.py", line 709, in wrapped
return primal(*args, **kwargs)
File "/path_to_taichi/lang/kernel_impl.py", line 636, in __call__
key = self.ensure_compiled(*args)
File "/path_to_taichi/lang/kernel_impl.py", line 627, in ensure_compiled
self.materialize(key=key, args=args, arg_features=arg_features)
File "/path_to_taichi/lang/kernel_impl.py", line 493, in materialize
taichi_kernel = _ti_core.create_kernel(taichi_ast_generator,
File "/path_to_taichi/lang/kernel_impl.py", line 488, in taichi_ast_generator
compiled()
File "error.py", line 11, in foo
bar(1)
File "/path_to_taichi/lang/kernel_impl.py", line 76, in decorated
return fun.__call__(*args)
File "/path_to_taichi/lang/kernel_impl.py", line 156, in __call__
ret = self.compiled(*args)
File "error.py", line 7, in bar
a = a + 2j
File "/path_to_taichi/lang/common_ops.py", line 16, in __add__
return ti.add(self, other)
File "/path_to_taichi/lang/ops.py", line 78, in wrapped
return imp_foo(a, b)
File "/path_to_taichi/lang/ops.py", line 63, in imp_foo
return foo(x, y)
File "/path_to_taichi/lang/ops.py", line 427, in add
return _binary_operation(_ti_core.expr_add, _bt_ops_mod.add, a, b)
File "/path_to_taichi/lang/ops.py", line 173, in _binary_operation
a, b = wrap_if_not_expr(a), wrap_if_not_expr(b)
File "/path_to_taichi/lang/ops.py", line 36, in wrap_if_not_expr
return Expr(a) if not is_taichi_expr(a) else a
File "/path_to_taichi/lang/expr.py", line 33, in __init__
self.ptr = impl.make_constant_expr(arg).ptr
File "/path_to_taichi/lang/util.py", line 196, in wrapped
return func(*args, **kwargs)
File "/path_to_taichi/lang/impl.py", line 414, in make_constant_expr
raise ValueError(f'Invalid constant scalar expression: {type(val)}')
ValueError: Invalid constant scalar expression:
在 0.9.0 版本中,其错误报告如下:
Traceback (most recent call last):
File "/path_to_test/error.py", line 13, in
foo()
File "/path_to_taichi/lang/kernel_impl.py", line 732, in wrapped
raise type(e)('\\n' + str(e)) from None
taichi.lang.exception.TaichiTypeError:
On line 11 of file "/path_to_test/error.py", in foo:
bar(1)
^^^^^^
On line 7 of file "/path_to_test/error.py", in bar:
a = a + 2j
^^^^^^
Invalid constant scalar data type:
3、官网文档页改版
为了提高文档的可读性和用户友好性,Taichi 的文档站点已重构,并将 API 参考纳入其中。
除上述版本高光内容外,该版本还包含大量其他更新项,包含新的测试、修复、重构等,详情可在发布公告中阅览。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Jina v3.0.2 发布,云原生神经搜索框架
Jina 是一个神经搜索框架,它使任何人都可以在几分钟内在云上构建可扩展且可持续的神经搜索系统。 目前 Jina 发布了 3.0.2 版本,带来以下变更: 新特性 [ a5fd192b] -优化创建 hub 根 ( #4388 ) [ 2e6104ad] -helloworld :使用 sqlite 商店进行 qa 聊天机器人示例 ( #4379 ) Bug 修复 [ 9f113645] - docsqa 到新的 url ( #4389 ) [ e26c81a2] - 字符串:修复沙盒中的不当措辞 ( #4386 ) [ 9b4e182f] - fashion 示例中缺少导入 ( #4375 ) [ cca0610a] -修复 docarray 版本 ( #4378 ) 代码重构 [ d4a441e9] -删除流式单元测试中的重复代码 ( #4383 ) 文档 [ f939e3e3] -修复迁移指南 ( #4387 ) [ 25fefd31] -修复客户端 api 部分标题和流 vis ( #4380 ) 其他改进 [ 31ffa37e] - 贡献者:更新贡献者 [ 2a574c06]...
-
下一篇
SQLite 3.38.0 发布
SQLite 3.38.0 现已发布。SQLite 是一个 C 实现的 SQL 数据库引擎,它的特点是小型、快速、自包含、高可靠性和功能齐全。SQLite 嵌入在所有手机和大多数计算机中,也捆绑在为数众多的其它应用中,是世界上使用量最大的数据库引擎。 主要变化: 添加了 -> 和 ->> 运算符以便于处理 JSON。新的运算符与 MySQL 和 PostgreSQL 兼容。 JSON 函数现在是内置的。不再需要使用-DSQLITE_ENABLE_JSON1编译时选项来启用 JSON 支持。默认情况下启用 JSON。使用新的 -DSQLITE_OMIT_JSON编译时选项禁用 JSON 接口。 日期和时间功能的增强: 添加了unixepoch() 函数。 添加了auto 修饰符和julianday 修饰符。 将 printf() SQL 函数重命名为format()以获得更好的兼容性。保留原始 printf() 名称作为别名以实现向后兼容性。 添加了sqlite3_error_offset()接口,有时可以帮助将 SQL error 定位到输入 SQL 文本中的特定字符...
相关文章
文章评论
共有0条评论来说两句吧...