使用Taichi加速Python

引言

Taichi 是一个嵌入在 Python 中的领域特定语言(DSL)。 Taichi 的主要功能之一是加速计算密集的 Python 程序,帮助这些程序 实现可以媲美 C/C++ 甚至 CUDA 的性能。 这使得 Taichi 在科学计算领域处于更有利的地位。

如何体现Taichi的优越性呢。我们下面用python设计一个求解素数个数的程序,

import time
ti.init(arch = ti.gpu)

def is_prime(n:int):
    result =  True
    for i in range(2,int(n**0.5)+1):
        if n % i == 0:
            result = False
            break
    return result

def cout(n:int)->int:
    s = 0
    for i in range(2,n):
        if is_prime(i):
            s+=1
    return s

if __name__ == "__main__":
    a = time.time()
    print(cout(10000000))
    b = time.time()
    print(f"{b-a}秒")

运行结果

664579
65.65770673751831秒

接下来我们在代码中引入Taichi来加速 首先导入Taichi并初始化

import taichi as ti
ti.init(arch = ti.gpu)

然后在我们在is_prime()cout()函数前面分别加上@ti.func,@ti.kernel来进行修饰,这段代码的含义也就是指定在gpu中运行,从而极大提高效率。

Taichi 的编译器将 @ti.kernel 装饰的 Python 代码编译到不同的设备上,例如 CPU 和 GPU,以实现高性能计算。--来源于Taichi官网

import taichi as ti
import time
ti.init(arch = ti.gpu)
@ti.func
def is_prime(n:int):
    result =  True
    for i in range(2,int(n**0.5)+1):
        if n % i == 0:
            result = False
            break
    return result
@ti.kernel
def cout(n:int)->int:
    s = 0
    for i in range(2,n):
        if is_prime(i):
            s+=1
    return s

if __name__ == "__main__":
    a = time.time()
    print(cout(10000000))
    b = time.time()
    print(f"{b-a}秒")

运行结果

[Taichi] version 1.1.3, llvm 10.0.0, commit 1262a70a, win, python 3.10.7
[Taichi] Starting on arch=cuda
664579
0.26840996742248535秒

可以发现,在通过taichi的加速后,计算10000000之内素数的时间从65秒缩短到了0.2秒,效率提高了三百多倍,而且当数据量更大的话,效率可以继续提高.

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值