版本 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-frontend

此PR是为处理字节码添加RVSDG-frontend的初步工作。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_OPTmax值的支持。

Numba在编译时应用的优化级别可以通过环境变量NUMBA_OPT设置。历史上,这是一个介于0和3(含)之间的值。现在已添加对max值的支持,这是一个Numba特有的优化级别,表示用户希望Numba尝试运行尽可能多的优化,这可能会以更长的编译时间换取更好的运行时性能。实际上,使用max优化级别可能不会或会受益于用户代码的运行时或编译时性能,但它的添加是为了给用户提供一个易于访问的选项,以便他们根据需要尝试。

(PR-#9094)

改进

numba.core.pythonapi的更新。

对Python C-API函数PyBytes_AsStringPyBytes_AsStringAndSize的支持已添加到numba.core.pythonapi.PythonAPI,分别作为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创建的通用函数(ufuncs)现在将尊重实现__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目标比较ufunc的支持(例如numpy.greaternumpy.greater_equalnumpy.less_equal等)。

(PR-#9007)

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

numba -s现在在Linux上报告libcuda.so的绝对路径,以帮助排查驱动程序问题,尤其是在WSL2上,Linux驱动程序可能在环境中被错误安装。

(PR-#9034)

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

在通过nvdisasm进行调用的函数中,增加了对调试信息(源行和内联信息)的支持。例如,CUDA调度器.inspect_sass方法的输出现在已通过此信息得到增强。

(PR-#9035)

添加CUDA SASS CFG支持

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

(PR-#9051)

使用ctypes绑定支持NVRTC

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

(PR-#9086)

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

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中某些用于NumPy和Python内置函数的@overload的参数名称与它们所重载的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中,prefer_literal选项已添加到numba.extending.intrinsic装饰器中,以便在可用时优先使用字面类型。这与numba.extending.overload装饰器中的prefer_literal选项具有相同的行为。

(PR-#6647)

弃用

弃用旧式NUMBA_CAPTURED_ERRORS

添加了NUMBA_CAPTURED_ERRORS=old_style的弃用计划。NUMBA_CAPTURED_ERRORS=new_style将在未来的版本中成为默认设置。详细信息请参阅https://numba.readthedocs.cn/en/stable/reference/deprecation.html#deprecation-of-old-style-numba-captured-errors

(PR-#9090)

拉取请求 (Pull-Requests)