编程|胡渊鸣:import一个“太极”库 让Python代码提速100倍!( 二 )
文章图片
其中有四个关键参数:Du(U的扩散速度),Dv(V的扩散速度),f(feed的缩写,控制U的加入)和k(kill的缩写,控制V的去除) 。
如果Taichi中实现这个方程,首先创建网格来表示域,用vec2表示每个网格中U, V的浓度值 。
拉普拉斯算子数值的计算需要访问相邻网格 。为了避免在同一循环中更新和读取数据,我们应该创建两个形状相同的网格W x H×2 。
每次从一个网格访问数据时,我们将更新的数据写入另一个网格,然后切换下一个网格 。那么数据结构设计就是这样:
文章图片
一开始,我们将U在网格中的浓度设置为 1,并将V放置在50个随机选择的位置:
文章图片
那么实际计算就可以用不到10行代码完成:
@ti.kerneldef compute(phase: int): for i, j in ti.ndrange(W, H): cen = uv[phase, i, j] lapl = uv[phase, i + 1, j] + uv[phase, i, j + 1] + uv[phase, i - 1, j] + uv[phase, i, j - 1] - 4.0 * cen du = Du * lapl[0] - cen[0] * cen[1] * cen[1] + feed * (1 - cen[0]) dv = Dv * lapl[1] + cen[0] * cen[1] * cen[1] - (feed + kill) * cen[1] val = cen + 0.5 * tm.vec2(du, dv) uv[1 - phase, i, j] = val在这里,我们使用整数相位(0或1)来控制我们从哪个网格读取数据 。
最后一步就是根据V的浓度对结果进行染色,就可以得到这样一个效果惊人的图案:
文章图片
有趣的是,胡渊鸣介绍,即使V的初始浓度是随机设置的,但每次都可以得到相似的结果 。
而且和只能达到30fps左右的Numba实现比起来,Taichi实现由于可以选择GPU作为后端,轻松超过了 300fps 。
pip install即可安装
看完上面三个例子,你这下相信了吧?
其实,Taichi就是一个嵌入在Python中的DSL(动态脚本语言),它通过自己的编译器将被 @ti.kernel 装饰的函数编译到各种硬件上,包括CPU和GPU,然后进行高性能计算 。
有了它,你无需再羡慕C++/CUDA的性能 。
正如其名,Taichi就出自太极图形胡渊鸣的团队,现在你只需要用pip install就能安装这个库,并与其他Python库进行交互,包括NumPy、Matplotlib和PyTorch等等 。
当然,Taichi用起来和这些库以及其他加速方法有什么差别,胡渊鸣也给出了详细的优缺点对比,感兴趣的朋友可以戳下面的链接详细查看:
https://docs.taichi-lang.org/blog/accelerate-python-code-100x
【编程|胡渊鸣:import一个“太极”库 让Python代码提速100倍!】
文章图片
推荐阅读
- 2022年编程语言的十大必须要了解的后端框架
- 初学编程该如何开始 如何开始
- 少儿编程可以学到什么?编程儿童学的编程是什么
- 嵌入式开发:防御性编程可缓解不可预见的问题
- 雷蛇|雷蛇骑仕V2手游手柄iPhone版发布:模拟扳机键、可编程宏
- 编程|“00后”在缅北诈骗日本主妇,看到同胞被割舌头遭电击后回国自首,将功赎罪未被立案
- 一个程序小BUG产生的原因
- 从三点进行分析说明,零基础看完也能明白 学习编程有什么用
- 聊聊并发编程的10个坑
- 这么多花容月貌的英语形容词 important是什么意思