将 NumPy 的 cpu-baseline 设为 none 后,仍会为新 CPU 生成优化代码路径吗?
数据小陈
结论
会。对于文档所述的 x86-64 构建,-Dcpu-baseline="none" 不会关闭 CPU dispatch。只要 cpu-dispatch 保持默认值 max,NumPy 仍会为编译器和平台支持的 CPU 特性生成优化代码路径,并在运行时根据 CPU 能力选择路径。
cpu-baseline 和 cpu-dispatch 的区别
cpu-baseline 指定 NumPy 主构建所需的最低 CPU 特性。设为 none 后,基线不包含手动指定的优化或 SIMD 代码路径。这样的 x86-64 构建可兼容更广泛的 x86 CPU,优化则由分派代码路径提供。
cpu-dispatch 用来控制额外生成哪些 CPU 特性的优化路径。文档中的默认值是 max。因此,即使把 baseline 设为 none,X86_V2 等原本可能属于 baseline 的特性也可以作为分派目标。运行时会从可用路径中选择与当前 CPU 相符的路径。实际生成哪些路径,取决于构建时编译器和平台支持的特性;这并不表示每个 NumPy 操作都有单独的 CPU 专用实现。
构建示例
python -m build --wheel \
-Csetup-args=-Dcpu-baseline="none"
示例没有设置 cpu-dispatch,所以会使用默认值 max。如果将分派也设为 none,就不会生成额外的 dispatch 优化路径:
python -m build --wheel \
-Csetup-args=-Dcpu-baseline="none" \
-Csetup-args=-Dcpu-dispatch="none"
要查看某个构建实际包含的函数实现和代码路径,可以使用 numpy.lib.introspect.opt_func_info。详细行为请参阅 NumPy CPU Build Options 文档。
备注:内容仅供参考。
