版本 0.58.0 (2023年9月20日)

这是Numba的一个重要版本。Numba现在使用towncrier来创建发布说明,因此请在下面找到所有值得注意项目的摘要。

亮点

添加了 towncrier

此PR为检查发布说明添加了towncrier作为GitHub工作流程。从该PR开始,Numba中的每个PR都需要附带适当的发布说明。审阅者可以通过在PR上添加``skip_release_notes``标签来决定跳过在影响较小的较小PR中添加发布说明。

(PR-#8792)

最低支持的 NumPy 版本是 1.22。

根据 NEP-0029,现在支持的最低 NumPy 版本是 1.22。

(PR-#9093)

添加对 NumPy 1.25 的支持

扩展 Numba 以支持 NumPy 1.25 中发布的新功能和更改功能。

(PR-#9011)

移除对 NVVM 3.4 和 CTK 11.0 / 11.1 的支持

不再支持 CUDA 工具包 < 11.2。

(PR-#9040)

移除对 Windows 32 位支持

从本次发布开始,Numba 已停止对 Windows 32 位操作系统的支持。

(PR-#9083)

最低 llvmlite 版本现在是 0.41.0。

llvmlite 的最低要求版本现在是 0.41.0。

(PR-#8916)

添加了 RVSDG 前端

此PR是关于为处理字节码添加RVSDG前端的初步工作。RVSDG(区域化值状态依赖图)使我们能够拥有一个以数据流为中心的视图,而不是传统的SSA-CFG视图。这使我们能够简化未来的编译器。

(PR-#9012)

新功能

numba.experimental.jitclass 增加了对 __*matmul__ 方法的支持。

numba.experimental.jitclass 现在支持以下方法:

  • __matmul__

  • __imatmul__

  • __rmatmul__

(PR-#8892)

numba.experimental.jitclass 增加了对反射 -dunder- 方法的支持。

numba.experimental.jitclass 现在支持以下方法:

  • __radd__

  • __rand_

  • __rfloordiv__

  • __rlshift__

  • __ror_

  • __rmod_

  • __rmul_

  • __rpow_

  • __rrshift_

  • __rsub_

  • __rtruediv_

  • __rxor_

(PR-#8906)

NUMBA_OPT 添加对值 max 的支持。

Numba 编译时应用的优化级别可以通过环境变量 NUMBA_OPT 设置。历史上,这个值介于 0 到 3 之间(包括 0 和 3)。现在增加了对值 max 的支持,这是一个 Numba 特定的优化级别,表示用户希望 Numba 尝试运行尽可能多的优化,可能会以更长的编译时间为代价来换取更好的运行时性能。实际上,使用 max 级别的优化可能对用户代码的运行时或编译时性能有益,也可能无益,但它已被添加进来,为用户提供了一个易于访问的选项,如果他们愿意的话可以尝试。

(PR-#9094)

改进

更新到 numba.core.pythonapi

numba.core.pythonapi.PythonAPI 中添加了对 Python C-API 函数 PyBytes_AsStringPyBytes_AsStringAndSize 的支持,分别作为 bytes_as_stringbytes_as_string_and_size 方法。

(PR-#8462)

isinstance 的支持现在是非实验性的。

对内置函数 isinstance 的支持已经从被视为实验性功能转变为完全支持的功能。

(PR-#8911)

NumPy 支持

numpy.correlatenumpy.convolve 中支持所有模式。

numpy.correlatenumpy.convolvemode 参数的所有值现在都支持。

(PR-#7543)

@vectorize 支持实现 __array_ufunc__ 的参数。

使用 numba.vectorize 创建的通用函数(ufunc)现在将尊重实现 ``__array_ufunc__``(NEP-13)的参数,以允许在从解释器调用 ufunc 时对参数和返回值进行预处理和后处理。

(PR-#8995)

增加了对 np.geomspace 函数的支持。

此PR通过添加对 np.geomspace 的支持,改进了 #4074 。当前的实现仅支持标量 startstop 参数。

(PR-#9068)

增加了对 np.vsplitnp.hsplitnp.dsplit 的支持。

此PR通过添加对 np.vsplitnp.hsplitnp.dsplit 的支持,改进了 #4074

(PR-#9082)

增加了对 np.row_stack 函数的支持。

增加了对 numpy.row_stack 的支持。

(PR-#9085)

添加了对函数 np.polynomial.polyutils.trimseq 的支持,以及来自 np.polynomial.polynomial 的函数 polyaddpolysubpolymul

增加了对 np.polynomial.polyutils.trimseqnp.polynomial.polynomial.polyaddnp.polynomial.polynomial.polysubnp.polynomial.polynomial.polymul 的支持。

(PR-#9087)

增加了对 np.diagflat 函数的支持。

numpy.diagflat 添加了支持。

(PR-#9113)

增加了对 np.resize 函数的支持。

numpy.resize 添加了支持。

(PR-#9118)

添加 np.trim_zeros

添加了对 np.trim_zeros() 的支持。

(PR-#9074)

CUDA 变更

CUDA 目标的按位操作 ufunc 支持。

在CUDA目标上,增加了对一些与位操作相关的 ufunc 的支持。具体包括:

  • numpy.bitwise_and

  • numpy.bitwise_or

  • numpy.bitwise_not

  • numpy.bitwise_xor

  • numpy.invert

  • numpy.left_shift

  • numpy.right_shift

(PR-#8974)

添加对最新CUDA驱动代码的支持。

增加了对最新一组CUDA驱动代码的支持。

(PR-#8988)

在CUDA中添加NumPy比较ufunc

此PR为CUDA目标添加了对比较ufuncs的支持(例如 numpy.greaternumpy.greater_equalnumpy.less_equal 等)。

(PR-#9007)

在Linux上报告 libcuda.so 的绝对路径

numba -s 现在在Linux上报告 libcuda.so 的绝对路径,以帮助解决驱动程序问题,特别是在WSL2上,可能会在环境中错误地安装Linux驱动程序。

(PR-#9034)

nvdisasm 输出添加调试信息支持。

在通过 nvdisasm 进行调用的函数中,增加了对 debuginfo(源代码行和内联信息)的支持。例如,CUDA 调度器 .inspect_sass 方法的输出现在增加了这些信息。

(PR-#9035)

添加 CUDA SASS CFG 支持

此PR增加了获取SASS CFG以dot语言格式的支持。它向CUDADispatcher添加了``inspect_sass_cfg()``方法,并向nvdisasm命令行工具添加了``-cfg``标志。

(PR-#9051)

使用 ctypes 绑定支持 NVRTC

当使用 ctypes 绑定时,现在可以使用 NVRTC,从而支持 float16,并且无需 NVIDIA CUDA Python 绑定即可链接 CUDA C / C++ 源代码。

(PR-#9086)

修复与工具包 12.2 的 CUDA 原子测试

CUDA 12.2 为某些原子操作生成了略有不同的 PTX 代码,因此相关的测试已更新,以便在使用 12.2 时查找正确的指令。

(PR-#9088)

Bug 修复

numba.typed.List 中,不同大小的无符号整数索引的处理已修复。

numba.typed.List 中无符号整数索引的截断/扩展顺序和类型转换的问题已得到修复。

(PR-#7262)

防止无效融合

此PR修复了一个问题,即在parfor中首先读取然后又在同一parfor中写入的数组仅被分类为在parfor中使用。当后续的parfor也使用相同的数组时,parfor的融合会发生,而这在第一个parfor也写入数组的情况下本应被禁止。此PR将此类数组在parfor中视为既使用又定义,从而防止融合。

(PR-#7582)

numpy.allclose 的实现现在正确处理默认参数。

numpy.allclose 的实现已修正,使用 TypingError 来报告类型错误。

(PR-#8885)

numpy.isclose 添加类型验证。

numpy.isclose 的实现中添加了类型验证。

(PR-#8944)

修复对使用非兼容的一等函数重载调度器的支持

修复了在将 Dispatcher 对象转换为一级函数时未处理编译错误导致的错误。修复后,用户现在可以使用不兼容的一级函数重载调度器。详情请参阅 https://github.com/numba/numba/issues/9071

(PR-#9072)

numpy.arange 中支持 dtype 关键字参数,并设置 parallel=True

修复了 parfors 转换以支持在 numpy.arange(..., dtype=dtype) 中使用 dtype 关键字参数。

(PR-#9095)

修复所有 @overload 以使用与公共 API 匹配的参数名称。

Numba 中的一些 @overload 函数,特别是针对 NumPy 和 Python 内置函数的重载,使用了与被重载 API 中不匹配的参数名称。这导致在使用这些参数名称作为关键字参数调用函数时,会出现编译错误。现在,这个问题已经在整个代码库中得到了普遍修复,并且运行了一个单元测试,尽力防止未来再次出现类似的错误。修复的函数包括:

从Python内置功能:

  • complex

来自 Python random 模块:

  • random.seed

  • random.gauss

  • random.normalvariate

  • random.randrange

  • random.randint

  • random.uniform

  • random.shuffle

numpy 模块中:

  • numpy.argmin

  • numpy.argmax

  • numpy.array_equal

  • numpy.average

  • numpy.count_nonzero

  • numpy.flip

  • numpy.fliplr

  • numpy.flipud

  • numpy.iinfo

  • numpy.isscalar

  • numpy.imag

  • numpy.real

  • numpy.reshape

  • numpy.rot90

  • numpy.swapaxes

  • numpy.union1d

  • numpy.unique

来自 numpy.linalg 模块:

  • numpy.linalg.norm

  • numpy.linalg.cond

  • numpy.linalg.matrix_rank

来自 numpy.random 模块:

  • numpy.random.beta

  • numpy.random.chisquare

  • numpy.random.f

  • numpy.random.gamma

  • numpy.random.hypergeometric

  • numpy.random.lognormal

  • numpy.random.pareto

  • numpy.random.randint

  • numpy.random.random_sample

  • numpy.random.ranf

  • numpy.random.rayleigh

  • numpy.random.sample

  • numpy.random.shuffle

  • numpy.random.standard_gamma

  • numpy.random.triangular

  • numpy.random.weibull

(PR-#9099)

更改

支持 @numba.extending.intrinsic(prefer_literal=True)

在高层次扩展API中,numba.extending.intrinsic 装饰器添加了 prefer_literal 选项,以在可用时优先使用字面类型。这与 numba.extending.overload 装饰器中的 prefer_literal 选项具有相同的行为。

(PR-#6647)

弃用

弃用旧式 NUMBA_CAPTURED_ERRORS

添加了 NUMBA_CAPTURED_ERRORS=old_style 的弃用时间表。 NUMBA_CAPTURED_ERRORS=new_style 将在未来的版本中成为默认设置。详细信息记录在 https://numba.readthedocs.io/en/stable/reference/deprecation.html#deprecation-of-old-style-numba-captured-errors

(PR-#9090)

拉取请求

作者