帮助优化python扩展编译的库。
compilertools的Python项目详细描述
python使用wheel格式来简化包的分发。然而, 它不允许分发为每台计算机优化的包,但允许分发高度兼容的包。 用户必须自己编译包以利用simd(sse,avx,fma,…)等优化。
CompilerTools允许解决此问题,并为多台计算机分发优化包,同时保持 轮子的简单。它在后台工作,并且是为了易于使用而创建的。 包维护器只需要在运行时和构建时导入它。对最终用户来说一切都是透明的。
它的第二个目标也是帮助包维护者用多个编译器优化编译它的包。 为他配置选项。
文档:
特点:
- 在一个单轮包中为各种机器编译和分发优化的二进制文件。
- 帮助从当前计算机的源构建优化包。
- 处理各种编译器的自动编译和链接选项。
- 在源代码中自动检测openmp、openacc或intel cilk plus,并自动设置相关的编译和链接 选项。
- 支持额外的编译选项,如快速数学。
- 为包维护程序提供生成时设置以调整编译。
- 提供获取当前计算机CPU信息的API。
- 轻量级纯python模块,不依赖于尽可能使用惰性导入和求值。
怎么回事?
编译器工具根据当前使用的编译器和目标动态设置链接选项和编译选项 建筑。
这样可以避免在源文件或安装文件中指定编译器特定的选项。
多体系结构优化编译用于分发
在生成时:
编译器工具有助于为每个体系结构和带有标记后缀的名称文件优化“.so“/.pyd”:
示例:
- module.avx2.cp36-win_amd64.pyd->;针对avx2 simd扩展的优化变体
- module.avx.cp36-win_amd64.pyd->;针对avx simd扩展的优化变体
- module.cp36-win_amd64.pyd->;经典的高度兼容变体
这些优化的文件在分发时打包在同一个控制盘中(不需要逐个变量创建控制盘)。
要求:
- 在正常生成模块之前导入
compilertools.build
。 - 可以在
compilertools.build.CONFIG_BUILD
字典中直接更改选项。
运行时:
编译器工具根据CPU信息检测并选择最佳优化的“.so“/.pyd”运行。
如果不存在最佳文件,则搜索第二最佳文件等。如果找不到,请使用高度兼容的。
要求:
- 在导入优化模块之前导入
compilertools
(这将向python添加一个新的导入挂钩)。
当前架构优化编译
CompilerTools为当前体系结构和当前编译器找到最佳的编译器选项,并且只生成一个 优化的“.so“/.pyd”,具有经典名称。
要求:
- 在正常生成模块之前导入
compilertools.build
。
而且…
OpenMP、OpenAcc、Intel Cilk Plus API自动检测:
编译器工具在源文件中搜索api pragma
预处理器调用并启用编译器和链接器选项
如果需要的话。
额外的通用编译器选项: compilertools可以启用或禁用像fast math这样的通用额外编译器选项。
兼容性
支持的编译器
CompilerTools实现对以下编译器的支持:
- 海合会
- llvm叮当声 微软Visual C++
支持的处理器
编译器工具实现对以下CPU的支持:
- x86(32和64位)
生成工具兼容性
编译器工具已使用以下生成工具进行了测试:
- distutils
- 设置工具
- numpy.distutils
- 赛顿
python兼容性
- Python3.4最低。