使用codon加速你的python程序

这篇具有很好参考价值的文章主要介绍了使用codon加速你的python程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用codon加速你的python程序

作为高性能 Python 编译器,Codon 可将 Python 代码编译为本机机器代码,而无需任何运行时开销。在单线程上,Python 的典型加速大约为 10-100 倍或更多。Codon 的性能通常与 C/C++ 的性能相当。与 Python 不同,Codon 支持本机多线程,这可以使速度提高很多倍。Codon 可通过插件基础结构进行扩展,它允许用户合并新的库、编译器优化甚至关键字。
Codon 框架是完全模块化和可扩展的,允许无缝集成新模块、编译器优化、领域特定语言等,并积极为生物信息学和量化金融等多个领域开发新的 Codon 扩展。

github链接:https://github.com/exaloop/codon
官方文档链接:https://docs.exaloop.io/codon/
使用codon加速你的python程序

1.安装

目前codon编译好的包仅支持x86_64架构下的linux系统以及mac系统,windows系统下的安装正在开发中…
打开终端输入下述指令进行安装(当然也可以直接把这个install.sh文件下载下来bash install.sh进行安装):

/bin/bash -c "$(curl -fsSL https://exaloop.io/install.sh)"

安装完成截图如下:
使用codon加速你的python程序
安装完成后,需要配置以下环境,其中第一行引号中的内容需要更换为自己的,上图中有指明正确路径:

echo "export PATH=/home/lzj/.codon/bin:$PATH" >> ~/.bashrc
source ~/.bashrc

此时,在终端中输入codon就有相关的提示了
使用codon加速你的python程序
但是如果是使用装饰器的方式加速程序,则还需要安装以下python的api(官方说类似flask功能的还不支持,建议使用@codon装饰器来加速特定部分)

# 进入codon安装路径
cd ~/.codon/python
# 进入指定的虚拟环境
conda activate xxx
# 安装python的api
python setup.py install

安装完成提示信息:
使用codon加速你的python程序

2.使用codon

Codon 是一种与 Python 兼容的语言,许多 Python 程序只要稍作修改就可以工作,使用@conda.jit装饰器可以快速将之前的代码进行加速(目前我只实验了jit这个装饰器,par这个装饰器没有试成功):

import codon
from time import time

def is_prime_python(n):
    if n <= 1:
        return False
    for i in range(2, n):
        if n % i == 0:
            return False
    return True

@codon.jit
def is_prime_codon(n):
    if n <= 1:
        return False
    for i in range(2, n):
        if n % i == 0:
            return False
    return True

t0 = time()
ans = sum(1 for i in range(100000, 200000) if is_prime_python(i))
t1 = time()
print(f'[python] {ans} | took {t1 - t0} seconds')

t0 = time()
ans = sum(1 for i in range(100000, 200000) if is_prime_codon(i))
t1 = time()
print(f'[codon]  {ans} | took {t1 - t0} seconds')

同样的程序加速了5倍之多,虽然赶不上官方声称的10-100倍,但是性能也有了明显的提升
使用codon加速你的python程序
以下是github仓库里的例子:
新建一个fib.py的文件

def fib(n):
    a, b = 0, 1
    while a < n:
        print(a, end=' ')
        a, b = b, a+b
    print()
fib(1000)

使用codon对其进行编译,编译codon有许多选项和模式:

# compile and run the program
codon run fib.py
# 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

# compile and run the program with optimizations enabled
codon run -release fib.py
# 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

# compile to executable with optimizations enabled
codon build -release -exe fib.py
./fib
# 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987

# compile to LLVM IR file with optimizations enabled
codon build -release -llvm fib.py
# outputs file fib.ll

这个素数计数示例展示了 Codon 的OpenMP支持,通过添加一条线启用。装饰器@par告诉编译器并行化以下for循环,在本例中使用动态调度、块大小 100 和 16 个线程。

def is_prime(n):
    factors = 0
    for i in range(2, n):
        if n % i == 0:
            factors += 1
    return factors == 0

limit = 1000
total = 0

@par(schedule='dynamic', chunk_size=100, num_threads=16)
for i in range(2, limit):
    if is_prime(i):
        total += 1

print(total)

Codon 支持编写和执行 GPU 内核。下面是计算Mandelbrot 集的示例 :文章来源地址https://www.toymoban.com/news/detail-450807.html

import gpu

MAX    = 1000  # maximum Mandelbrot iterations
N      = 4096  # width and height of image
pixels = [0 for _ in range(N * N)]

def scale(x, a, b):
    return a + (x/N)*(b - a)

@gpu.kernel
def mandelbrot(pixels):
    idx = (gpu.block.x * gpu.block.dim.x) + gpu.thread.x
    i, j = divmod(idx, N)
    c = complex(scale(j, -2.00, 0.47), scale(i, -1.12, 1.12))
    z = 0j
    iteration = 0

    while abs(z) <= 2 and iteration < MAX:
        z = z**2 + c
        iteration += 1

    pixels[idx] = int(255 * iteration/MAX)

mandelbrot(pixels, grid=(N*N)//1024, block=1024)

到了这里,关于使用codon加速你的python程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker的常用命令:加速你的容器化开发与部署

    人不走空                                                                          目录         🌈个人主页:人不走空       💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 1. 容器生命周期管理 1.1 启动容器 1.2 停止容器 1.3 重启容器 1.4 删除容器

    2024年02月19日
    浏览(43)
  • docker安装及配置加速器(让你的docker也能起飞)

    一、 Docker的介绍: Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何

    2024年02月10日
    浏览(52)
  • 一键为VPS开启BBR拥塞控制算法加速你的VPS网络速度

    BBR是Google在2016年开源的一套TCP拥塞控制算法,目的是最大程度的利用VPS的带宽,增加吞吐量,提高VPS网络速度。 Google BBR项目地址:https://github.com/google/b 并且已经集成到Linux 4.9以上的内核中,BBR的作用是简而言之就是尽量跑满带宽,加速VPS网络速度。 下面介绍下如何在自己

    2024年02月11日
    浏览(33)
  • 使用Python内置模块加速SQL查询

    大家好,假设你正在查阅一本书的页面,你想要更快地找到你正在寻找的信息。那么你可能会查找术语索引,然后跳转到引用特定术语的页面,SQL中的索引与书籍中的索引工作原理类似。 在大多数实际系统中,都将对包含大量行的数据库表运行查询(想象一下数百万行),需

    2024年02月11日
    浏览(44)
  • 如何使用索引加速 SQL 查询 [Python 版]

    推荐:使用 NSDT场景编辑器助你快速搭建可二次编辑器的3D应用场景 假设您正在筛选一本书的页面。而且您希望更快地找到所需的信息。你是怎么做到的?好吧,您可能会查找术语索引,然后跳转到引用特定术语的页面。SQL 中的索引的工作方式与书籍 中的索引 类似。 在大多

    2024年02月13日
    浏览(96)
  • 6种打包Python代码的方法,让你的程序变成exe应用

    Python是一种高级编程语言,它具有易学易用、跨平台等优点,因此在开发中得到了广泛的应用。 然而,Python代码需要在Python解释器中运行,这对于一些用户来说可能不太方便。 因此,将Python代码打包成可执行文件(exe)是一种很好的解决方案。 本文将介绍6种将Python代码打包

    2024年01月18日
    浏览(48)
  • 6种打包Python代码的方法,让你的程序变成exe应用!

    Python是一种高级编程语言,它具有易学易用、跨平台等优点,因此在开发中得到了广泛的应用。 然而,Python代码需要在Python解释器中运行,这对于一些用户来说可能不太方便。 因此,将Python代码打包成可执行文件(exe)是一种很好的解决方案。 本文将介绍6种将Python代码打包

    2024年02月16日
    浏览(56)
  • python运行使用gpu运算【python基础】python开启GPU加速

    1.首先需要确认是否成功安装cuda,代码见图一;打印结果如图二所示。  图一   图二  2.如果未安装成功可以自行搜索,不麻烦;安装成功后需要分三步设置使用GPU,以简单的softmax分类器为例: a.导入os模块 b.将模型放进GPU中运算。  c.更改训练、测试两个步骤,使用GPU运算

    2024年02月16日
    浏览(41)
  • Python在生物信息学中的应用:让你的程序运行得更快

    程序运行太慢,想要提速,但不使用复杂的技术如 C 扩展或 JIT 编译器。 解决方案 程序优化的 第一准则是“不要优化” , 第二准则是“不要优化那些不重要的部分” 。基于这两个原则,如果你的程序运行得很慢,你得先找出影响性能的问题所在。 多数时候我们发现程序把

    2024年02月20日
    浏览(48)
  • 提高你的FPGA技能!使用Python操控FPGA

    提高你的FPGA技能!使用Python操控FPGA 当我们谈到FPGA时,通常会立即想到Verilog或VHDL等硬件描述语言。然而,除了这些语言之外,还有一种更加现代的方法来控制FPGA,那就是Python。 Python在工程学科中使用越来越普遍,因为它易于学习、容易阅读,并且具有强大的库和框架。在

    2024年02月21日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包