Numba 仓库地图

Numba 仓库相当庞大,由于其历史悠久,功能分散在许多位置。为了帮助开发者理清头绪,本文将尝试总结不同类别功能所在的位置。

支持文件

构建和打包

持续集成

文档

Numba 源代码

Numba 在一个包中同时包含源代码和测试。

  • numba/ - 所有源代码和测试

公共 API

这些定义了 Numba 公共接口的各个方面。

分派

  • numba/core/dispatcher.py - Dispatcher 对象是由 @jit 生成的已编译函数。Dispatcher 对不同的类型签名有不同的实现。

  • numba/_dispatcher.cpp - C++ dispatcher 实现(用于常见数据类型的速度优化)

编译器管道

类型管理

编译扩展

Numba 为核心功能使用少量编译过的 C/C++ 代码,例如在性能关键的分派和类型匹配中,以及封装与 CPython API 的直接交互更方便的地方。

杂项支持

核心 Python 数据类型

数学

并行加速器

代码转换 pass,从函数中提取可并行化代码并将其转换为多线程 gufunc 调用。

模板

@stencil 的实现

调试支持

类型签名(CPU)

一些(通常是较旧的)Numba 支持功能将允许的类型签名声明与实现定义分开。此包包含在类型推断期间必须匹配的类型签名注册表。

目标实现(CPU)

Python / NumPy 函数和一些数据模型的实现。这些模块负责在降低过程中生成 LLVM IR。请注意,其中一些模块在 typing 包中没有对应的模块,因为较新的 Numba 扩展 API(如 overload)允许类型和实现一起指定。

Ufunc 编译器和运行时

单元测试(CPU)

CPU 单元测试(GPU 目标单元测试在后面章节中列出)

命令行实用工具

CUDA GPU 目标

请注意,CUDA 目标确实重用了 CPU 目标的一些部分。