Numba 仓库的地图

Numba 仓库非常大,由于历史原因,功能分散在许多地方。为了帮助开发者定位,本文档将尝试总结不同类别的功能可以在哪里找到。

支持文件

构建与打包

持续集成

文档

Numba 源代码

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

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

公共API

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

调度

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

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

编译器流水线

类型管理

编译扩展

Numba 使用少量编译的 C/C++ 代码来实现核心功能,例如在性能关键的地方进行调度与类型匹配,并且封装与 CPython API 的直接交互更为方便。

杂项支持

核心 Python 数据类型

数学

ParallelAccelerator

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

Stencil

@stencil 的实现:

调试支持

类型签名 (CPU)

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

目标实现(CPU)

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

Ufunc 编译器和运行时

单元测试 (CPU)

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

命令行工具

CUDA GPU 目标

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