内容简介:Taichi(太极)0.9.0 已经发布,这是专为高性能计算机图形学设计的编程语言。该版本引进了矩阵的动态索引(实验功能)、改善了当前 API 集的稳定性... 新特性 1、矩阵的动态索引(实验功能) 之前版本的矩阵只能通...
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 参考纳入其中。
除上述版本高光内容外,该版本还包含大量其他更新项,包含新的测试、修复、重构等,详情可在发布公告中阅览。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 机器学习 | SVD矩阵分解算法,对矩阵做拆分,然后呢?
- golang 算法-矩阵
- 彻底理解矩阵乘法
- [开源项目]矩阵数据的意义
- iphone – :CGAffineTransformInvert:奇异矩阵
- golang顺时针打印矩阵
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
高可用MySQL
)Charles Bell Mats Kindahl Lars Thalmann / 宁青、唐李洋 诸云萍 / 电子工业出版社 / 2011-10 / 98.00元
《高可用mysql:构建健壮的数据中心》是“mysql high availability”的中文翻译版,主要讲解真实环境下如何使用mysql 的复制、集群和监控特性,揭示mysql 可靠性和高可用性的方方面面。本书由mysql 开发团队亲自执笔,定位于解决mysql 数据库的常见应用瓶颈,在保持mysql 的持续可用性的前提下,挖潜各种提高性能的解决方案。本书分为三个部分。第一部分讲述mysql......一起来看看 《高可用MySQL》 这本书的介绍吧!