1、TaiChi简介

Taichi 起步于 MIT 的计算机科学与人工智能实验室(CSAIL),设计初衷是便利计算机图形学研究人员的日常工作,帮助他们快速实现适用于 GPU 的视觉计算和物理模拟算法。 Taichi 选择了一条创新的路径:嵌入于 Python,使用即时编译(JIT)架构(如 LLVM、SPIR-V),将 Python 源代码转化为 GPU 或 CPU 的原生指令,在开发时和运行时均提供优越性能。

当然,以 Python 为前端的领域特定语言(DSL)不是什么新奇的创造。 过去几年里,Halide、PyTorch、TVM 等框架发展成熟,实际已塑造了图像处理、深度学习等领域的标准。 Taichi 与这些框架的最大区别在于其指令式编程范式。 作为一种领域特定语言,Taichi 并不专长于特定的某种计算模式。 这意味着更大的灵活度。 也许有人会假定灵活性需要牺牲优化程度,但对 Taichi 而言并非如此,主要有以下几个原因:

  1. Taichi 的工作负荷呈现出不可利用的特点(如不支持逐元素运算),也就是说算法强度是固定不变的。 只要切换到 GPU 后端,用户就可以收获明显的性能提升。
  2. 传统深度学习框架使用的运算符都是简单的数学表达式,需要在计算图层面融合运算符,以实现更高的算法强度。但 Taichi 的指令式编程让用户能在一个 kernel 中轻松完成大量计算。 我们将这样的 kernel 命名为 mega-kernel。
  3. Taichi 使用各种编译器技术大幅优化源代码,包括公共子表达式消除、死码删除、控制流图分析。 这些优化手段适用于各个后端,因为 Taichi 有自己的中间表示(IR)层。
    即时编译提供了更多的优化机会。

尽管如此,Taichi 远不止于一个 Python 的即时转译器。 最初的设计目标之一是将计算与数据结构解耦。 为此,Taichi 提供一套通用的数据容器,叫做 SNode (/ˈsnoʊd/)。 SNode 可以方便地构造或稠密或稀疏的多维 field,并形成清晰的层级。 在 AoS 和 SoA 两种内存布局间切换只需不到 10 行代码。 这启发了很多数值模拟领域的使用案例。 若你想学习如何使用这种数据容器,请查看 field(高级)、稀疏空间数据结构 或 原始 Taichi 论文。

我们将解耦的概念进一步延伸到数据类型。 由于 GPU 内存容量和带宽已成为当前的主要瓶颈,让每个内存单位存储更多的数据变得至关重要。 2021 年,Taichi 引入了可定制量化类型, 允许定义任意位数的定点数或浮点数(但仍不能超过 64 位)。 从此,在单个 GPU 设备上进行超 4 亿粒子的 MPM 模拟成为可能。 论文《QuanTaichi》对此进行了详细介绍。

Taichi 是直观的语言。 如果你使用 Python,你就能使用 Taichi。 当你用 Taichi 编程,程序自动选择在 GPU 运行(CPU 为替补)。 Taichi 问世后,这样一个并不复杂的理念有幸获得了诸多关注,在众多贡献者的努力下,现在 Taichi 支持更多后端,包括 Vulkan、OpenGL,和 Direct X(仍在进展中)。 没有一个强大且专注的社区,Taichi 无法走到今天。

2、代码示例:

计算素数的个数:

"""Count the number of primes in range [1, n].
"""def is_prime(n: int):result = Truefor k in range(2, int(n ** 0.5) + 1):if n % k == 0:result = Falsebreakreturn resultdef count_primes(n: int) -> int:count = 0for k in range(2, n):if is_prime(k):count += 1return countprint(count_primes(10000000))

75.7s

使用taichi加速

"""Count the number of primes below a given bound.
"""
import taichi as ti
ti.init()@ti.func
def is_prime(n: int):result = Truefor k in range(2, int(n ** 0.5) + 1):if n % k == 0:result = Falsebreakreturn result@ti.kernel
def count_primes(n: int) -> int:count = 0for k in range(2, n):if is_prime(k):count += 1return countprint(count_primes(1000000))

1.4s

@ti.func与@ti.kernel的差异参考如下链接:https://docs.taichi-lang.org/zh-Hans/docs/syntax


参考链接:1、https://forum.taichi.graphics/,2、https://mp.weixin.qq.com/s/epc6Gtci5elAwOiRGQ8wmQ

TaiChi Lang 让Python代码提速100倍!(高性能计算、图形学、仿真等领域;加速 Python 中计算密集任务程序;希望使用 Python 开发但部署到其它环境)相关推荐

  1. 胡渊鸣:import一个“太极”库,让Python代码提速100倍!

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 丰色 发自 凹非寺 量子位 | 公众号 QbitAI 众所周知,Py ...

  2. 胡渊鸣大神:import一个“太极”库,让Python代码提速100倍!

    来源:量子位 众所周知,Python的简单和易读性是靠牺牲性能为代价的-- 尤其是在计算密集的情况下,比如多重for循环. 不过现在,大佬胡渊鸣说了: 只需import 一个叫做"Taich ...

  3. 用 Taichi 加速 Python:提速 100+ 倍!

    这是「进击的Coder」的第 706 篇技术分享 作者:太极图形 来源:太极图形 " 阅读本文大概需要 13 分钟. " Python 已经成为世界上最流行的编程语言,尤其在深度学 ...

  4. 用 Taichi 加速 Python:提速 100+ 倍

    Python 已经成为世界上最流行的编程语言,尤其在深度学习.数据科学等领域占据主导地位.但是由于其解释执行的属性,Python 较低的性能很影响它在计算密集(比如多重 for 循环)的场景下发挥作用 ...

  5. 永恒python地速_立竿见影地把你的 Python 代码提速7倍

    之前曾经测试计算斐波那契数列的几种方法,其中基于递归的方法是速度最慢的,例如计算第 40 项的值,需要 36 秒.如下图所示. 要提高运算速度,根本办法当然是改进算法.不过算法的提高是一个长期积累加上 ...

  6. 立竿见影地把你的 Python 代码提速7倍

    之前曾经测试计算斐波那契数列的几种方法,其中基于递归的方法是速度最慢的,例如计算第 40 项的值,需要 36 秒.如下图所示.很多人学习python,不知道从何学起. 很多人学习python,掌握了基 ...

  7. python提升运行速度-一行代码让你的python运行速度提高100倍!Python真强!

    原标题:一行代码让你的python运行速度提高100倍!Python真强! Python用的好,猪也能飞起来. 今天,带大家学习如何让Python飞起来的方法,干货满满哦! python一直被病垢运行 ...

  8. 本科生新算法打败NeRF,不用神经网络照片也能动起来,提速100倍

    万万没想到,把照片变3D这件事,离了神经网络也是这般丝滑. 而在此之前,新视角合成这方面的"大牛",是近两年大火的NeRF(神经辐射场). 它是一个简单的全连接神经网络,使用2D图 ...

  9. 【第105期】Python将提速2-5倍!你期待吗

    整理 | 于轩 出品 | CSDN(ID:CSDNnews) 作为一门异常受欢迎的编程语言,Python的优点有很多,比如:易于学习.用途广泛.有成千上万个用于数据科学的有用的库.但同时,Python ...

最新文章

  1. Android开发高手课笔记--如何打造高质量应用?
  2. 毕业后的第二个月的一点思绪
  3. 51Nod 1043 幸运号码
  4. angularjs控制器之间的数据共享与通信
  5. Java文件类boolean isDirectory()方法(带示例)
  6. C++工作笔记-结构体与类的进一步探究(在C++中的结构体,非C语言结构体)
  7. SystemUI之状态栏notification icon加载流程
  8. Javascript基础回顾 之(二) 作用域
  9. oracle杀死进程时权限不足_如何解决Oracle数据库在迁移过程中的权限不足问题
  10. 2013.检测正方形-LeetCode
  11. Java反射机制获取系统@Hide属性
  12. 三维点云学习(4)2-mean shift dbscan
  13. 软件测试 - V模型、W模型、H模型、X模型
  14. 机器学习入门——K近邻算法
  15. 宏脉系统显示连接服务器失败,宏脉系统使用手册大全.doc
  16. CANOe系列讲解 - CANoe发送UDS诊断帧
  17. DWG文件损坏了怎么办?
  18. 摩莎485通讯测试软件,485串口测试软件1.6 免费版
  19. pem格式证书编码 x509_PEM证书格式
  20. 麻省理工公开课人工智能笔记六

热门文章

  1. 当超强台风“山竹”即将冲进南海,Power BI 你怎么看?
  2. Linux | 运行虚拟电脑时发生严重错误,应将其关闭
  3. 微信信息回复 java,微信公众平台开发中使用Java如何实现一个消息回复功能
  4. Python 实现图片转文字
  5. 并发(concurrency)和并行(parallelism)的区别
  6. spark并行度(parallelism)和分区(partition)未生效的问题
  7. 什么才是程序员的内功心法?
  8. EndNote中补充文献信息的两种方法
  9. 2022 年我作为创作者使用的 5 个强大的 iPad 应用程序
  10. 什么是vps?vps和代理ip的本质区别?