即时构建共享库
项目描述
A Python module for distributed just-in-time shared library building
作者
Martin Sandve Alnæs (martinal@simula.no)
Garth N. Wells (gnw20@cam.ac.uk)
Johannes Ring (johannr@simula.no)
贡献者
Jan Blechta (blechta@karlin.mff.cuni.cz)
文档
文档可以在http://fenics-dijitso.readthedocs.org/查看。
自动测试
我们使用Bitbucket Pipelines和Atlassian Bamboo进行自动化测试。
代码覆盖率
代码覆盖率报告可以在https://coveralls.io/bitbucket/fenics-project/dijitso查看。
动机
编写此模块是为了改进FEniCS框架的核心组件,即从Python模块生成的C++代码的即时编译,但这些代码仅从C++库内部调用,因此不需要通过一个漂亮的Python接口进行包装。
dijitso的主要方法是使用ctypes直接导入动态共享库,而不尝试将其包装在Python接口中。
只要编译后的代码能够为实现预定义C++接口的类提供一个简单的工厂函数,那么该接口的复杂性就没有限制,只要它仅从C++代码中调用。如果您希望生成的代码有Python接口,dijitso可能不是答案。
尽管dijitso在FEniCS项目中扮演着非常特定的角色,但它不依赖于其他FEniCS组件。
并行支持依赖于mpi4py接口,尽管mpi4py实际上并没有在dijitso模块中导入,因此可以使用具有类似接口的通信器对象进行模拟。
功能列表
基于用户提供的签名字符串的磁盘缓存系统(用户负责签名质量)
通过用户提供的回调进行可能昂贵的代码生成的延迟评估,仅在签名未在磁盘缓存中找到时调用
调用C++编译器生成无需Python包装的共享库,开销低
使用ctypes的可移植共享库导入
自动压缩缓存目录中的源代码以节省空间
自动检测哪些MPI进程共享相同的物理缓存目录(如果是节点上的所有核心或通过网络映射存储跨节点共享,这都不重要)
通过在每个物理缓存目录上仅编译一个进程来自动避免磁盘缓存中的竞态条件
可选的基于MPI的共享库二进制文件分发
可配置的并行行为
“root”:仅在单个根节点上构建,并使用MPI将二进制文件分发到每个物理缓存目录
“node”:在每个物理缓存目录上构建一个进程
“process”:在每个进程上构建,自动分离缓存目录
项目详情
dijitso-2017.1.0.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 63039d9c5d31d4667f4858e416f27d90d28743373af4d24967e18247cdc6fb28 |
|
MD5 | 3313cdd83ed343fd47d94565b4cb8d3f |
|
BLAKE2b-256 | 56cdfa8bd55ec55e3fe5dcaf9382926bea20aad956bcda7e776271d000d5b42a |