尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

prometeo快速上手:5分钟运行你的第一个Python转C程序

prometeo快速上手:5分钟运行你的第一个Python转C程序 prometeo快速上手5分钟运行你的第一个Python转C程序【免费下载链接】prometeoAn experimental Python-to-C transpiler and domain specific language for embedded high-performance computing项目地址: https://gitcode.com/gh_mirrors/pr/prometeo你是否想过用熟悉的 Python 语法写科学计算程序却能直接编译成高性能 C 代码跑在资源受限的嵌入式设备上prometeo就是这样一个实验性的 Python 转 C 转译器transpiler和领域专用语言DSL专为嵌入式高性能计算而生。它让写 Python、跑 C成为现实同一份代码既能被 Python 解释器直接执行也能由 prometeo 自动生成自包含、无需 Python 运行时的 C 代码。本文是一份零基础的prometeo 快速上手教程跟随 5 分钟操作指南你就能亲手运行第一个 Python 转 C 程序。prometeo 是什么一个能翻译进 C 世界的 Python 子集prometeo 的核心思想很巧妙它定义了一个基于 Python 子集的 DSL你按照它的规则如类型注解、特定内存使用结构写代码prometeo 通过静态分析抽象语法树AST生成紧凑、确定内存占用的 C 代码。它不依赖 Python 运行时库也不做运行时垃圾回收因此非常适合嵌入式设备。最吸引人的特性包括✅Python 兼容语法prometeo 程序可直接用标准 Python 解释器运行✅静态强类型借助 Python 原生类型注解type hints严格约束类型✅确定内存占用静态分析保证最坏情况下的堆内存可预测✅高性能线性代数生成的 C 代码调用高性能库 BLASFEO✅自包含可嵌入生成的 C 代码不链接 Python 运行时可直接部署第 1 步一分钟完成 prometeo 安装prometeo 的安装非常简单通过 PyPI 一条命令即可搞定需要 Python 3.6 及以上版本因为 prometeo 大量依赖类型注解pip install prometeo-dsl如果想从源码构建也可以克隆仓库后依次执行git submodule update --init、在prometeo/cpmt目录运行make install_shared最后pip install -e .安装 Python 包。安装完成后你就拥有了核心命令行工具pmt它的实现位于 pmt.py负责解析、转译、编译和运行你的程序。第 2 步两分钟编写你的第一个 prometeo 程序进入正题先创建一个helloworld.py文件写下这段代码完整源码见 helloworld.pyfrom prometeo import * def main() - int: print(\nhello world!\n) return 0注意两个关键点from prometeo import *导入 DSL 的所有能力main() - int使用类型注解声明返回值类型——这正是 prometeo 静态类型系统的基石这段代码是合法的 Python你可以直接运行它同时它也是合法的 prometeo 程序可以被转译成 C。双模式运行是不是很酷第 3 步两分钟运行 prometeo 并生成 C 代码prometeo 的命令行工具pmt提供了两个运行模式由--cgen参数控制模式一纯 Python 解释执行pmt helloworld.py --cgenFalse此时 prometeo 会剥离类型注解交由标准 Python 解释器执行程序——适合开发调试阶段快速验证逻辑。模式二生成、编译并运行 C 代码pmt helloworld.py --cgenTrue这才是 prometeo 的魔法时刻它会依次完成解析源码生成抽象语法树AST静态分析并生成 C 源码存放在__pmt_cache__目录进行最坏情况堆内存分析最坏堆使用量自动调用编译器构建可执行文件运行编译后的 C 程序并输出结果整个过程全自动你只需要一条命令。整个转译流程的核心逻辑在 code_gen_c.py 中感兴趣的读者可以深入阅读。更进一步让 prometeo 做矩阵运算写完了 hello world我们来点真正有用的——矩阵乘法。下面的例子创建两个 10×10 矩阵并做乘法完整代码见 simple_example.pyfrom prometeo import * nv : dims 10 def main() - int: A: pmat pmat(nv, nv) for i in range(nv): for j in range(nv): A[i, j] 1.0 B: pmat pmat(nv, nv) for i in range(nv): B[0, i] 2.0 D: pmat pmat(nv, nv) pmt_gemm(A, B, D) pmat_print(D) return 0这里引入了 prometeo 的矩阵类型pmat和维度声明dims。pmat是 prometeo 的矩阵抽象源码见 pmat.pypmt_gemm执行高性能矩阵乘法。转译后这个循环和乘法会被编译成调用 BLASFEO 的 C 代码而__pmt_cache__中生成的 C 文件展示了 prometeo 如何处理内存对齐、堆分配与 BLAS 调用。prometeo 性能如何用数据说话prometeo 的目标是媲美手写高性能 C 代码。官方用 Riccati 分解控制论中的核心算法做了基准测试对比了 prometeo、手写 BLASFEO C 代码、NumPy 和 Julia 在不同矩阵规模下的 CPU 耗时基准脚本见 riccati.py 和 run_benchmark.py结果显示prometeo 与手写 BLASFEO C 代码性能几乎持平且显著快于 NumPy 和 Julia——同时后者还无法像 prometeo 生成的 C 代码那样轻松嵌入嵌入式设备。再来看一个更直观的 Fibonacci 基准源码见 fibonacci.py执行同样的计算任务解析器/编译器CPU 时间 (秒)Python 3.7 (CPython)11.787Nuitka10.039PyPy1.78prometeo0.657prometeo 比 CPython 快约18 倍甚至大幅领先同为 Python 转 C 方案的 Nuitka。这种差距正来自于 prometeo 免除了运行时类型检查、垃圾回收和动态内存分配的开销。小结与下一步5 分钟已到你已经完成了✅ 安装 prometeo✅ 编写并运行第一个 Python 转 C 程序✅ 用pmt一行命令生成并编译 C 代码✅ 接触了矩阵运算和性能数据prometeo 目前仍处于实验阶段支持的 Python 构造和线性代数运算有限如pmat提供了 pmat_blasfeo_wrapper.py 中的全套 BLASFEO 封装但它已经展示了Python 编写 C 性能 嵌入式部署的诱人前景。如果你想深入了解它的设计理念和 AST 分析机制可以参考 官方文档 和 code_gen.py。现在打开终端创建你的第一个main.py用pmt让它跑起来吧——高性能计算的 Python 化之门正为你敞开【免费下载链接】prometeoAn experimental Python-to-C transpiler and domain specific language for embedded high-performance computing项目地址: https://gitcode.com/gh_mirrors/pr/prometeo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表