版本 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_AsString
和 PyBytes_AsStringAndSize
的支持,分别作为 bytes_as_string
和 bytes_as_string_and_size
方法。
(PR-#8462)
对 isinstance
的支持现在是非实验性的。
对内置函数 isinstance
的支持已经从被视为实验性功能转变为完全支持的功能。
(PR-#8911)
NumPy 支持
在 numpy.correlate
和 numpy.convolve
中支持所有模式。
numpy.correlate
和 numpy.convolve
的 mode
参数的所有值现在都支持。
(PR-#7543)
@vectorize
支持实现 __array_ufunc__
的参数。
使用 numba.vectorize
创建的通用函数(ufunc
)现在将尊重实现 ``__array_ufunc__``(NEP-13)的参数,以允许在从解释器调用 ufunc 时对参数和返回值进行预处理和后处理。
(PR-#8995)
增加了对 np.geomspace
函数的支持。
此PR通过添加对 np.geomspace
的支持,改进了 #4074 。当前的实现仅支持标量 start
和 stop
参数。
(PR-#9068)
增加了对 np.vsplit
、np.hsplit
、np.dsplit
的支持。
此PR通过添加对 np.vsplit
、np.hsplit
和 np.dsplit
的支持,改进了 #4074。
(PR-#9082)
增加了对 np.row_stack
函数的支持。
增加了对 numpy.row_stack
的支持。
(PR-#9085)
添加了对函数 np.polynomial.polyutils.trimseq
的支持,以及来自 np.polynomial.polynomial
的函数 polyadd
、polysub
、polymul
。
增加了对 np.polynomial.polyutils.trimseq
、np.polynomial.polynomial.polyadd
、np.polynomial.polynomial.polysub
、np.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.greater
、numpy.greater_equal
、numpy.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)
拉取请求
PR #6647: 支持内在装饰器的prefer_literal选项 (ashutoshvarma sklam)
PR #8462: 添加 PyBytes_AsString 和 PyBytes_AsStringAndSize (ianna)
PR #8633: DOC: 将 vectorize 和 guvectorize 示例转换为 doctests (Matt711)
PR #8854: 更新了 mk_alloc 以支持 Numba-Dpex 计算遵循数据。(mingjie-intel)
PR #8885: 修复 np.allclose 未处理默认参数的问题 (guilhermeleobas)
PR #8892: 在 jitclass 中添加对 __*matmul__ 方法的支持 (louisamand)
PR #8906: 在 jitclass 中添加对反射双下划线方法的支持 (louisamand)
PR #8911: 移除 isinstance 实验性功能警告 (guilhermeleobas)
PR #8944: 为 np.isclose 添加异常 (guilhermeleobas)
PR #9022: 修复: 更新 C++ ABI 仓库引用 (emmanuel-ferdman)
PR #9028: 替换在3.12中移除的imp模块的使用 (hauntsaninja)
PR #9034: CUDA库测试:在Linux上报告加载的libcuda.so的绝对路径,以及其他改进 (gmarkall)
PR #9039: 修正安装说明中的git克隆链接。(ellifteria)
PR #9068: 添加 np.geomspace (KrisMinchev)
PR #9069: 修复由于 importlib_resources 升级导致的 towncrier 错误 (sklam)
PR #9074: 添加 np.trim_zeros (sungraek guilhermeleobas)
PR #9082: 添加 np.vsplit, np.hsplit, 和 np.dsplit (KrisMinchev)
PR #9085: 为 np.row_stack 添加测试 (KrisMinchev)
PR #9087: 添加来自 np.polynomial.polyutils 的 trimseq 和来自 np.polynomial.polynomial 的 polyadd, polysub, polymul (KrisMinchev)
PR #9094: 为 NUMBA_OPT 环境变量添加 ‘max’ 级别支持。(stuartarchibald)
PR #9095: 在 arange_parallel_impl 中支持 dtype 关键字 (DrTodd13 sklam)
PR #9111: 修复了 PR#9099 中的 ReST 语法错误 (stuartarchibald gmarkall sklam apmasell)
PR #9112: 修复 PR#9100 的问题 (stuartarchibald sklam)
PR #9113: 添加对 np.diagflat 的支持 (KrisMinchev)
PR #9114: 更新 np min 到 122 (stuartarchibald esc)
PR #9118: 添加对 np.resize() 的支持 (KrisMinchev)
PR #9190: 修复测试中不兼容的多进程上下文问题。(stuartarchibald)