跳转到主要内容

即时构建共享库

项目描述

A Python module for distributed just-in-time shared library building

作者

贡献者

文档

文档可以在http://fenics-dijitso.readthedocs.org/查看。

Documentation Status

自动测试

我们使用Bitbucket Pipelines和Atlassian Bamboo进行自动化测试。

Pipelines Build Status Bamboo Build Status

代码覆盖率

代码覆盖率报告可以在https://coveralls.io/bitbucket/fenics-project/dijitso查看。

Coverage Status

动机

编写此模块是为了改进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 (52.8 kB 查看散列)

上传时间

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面