CPU/SIMD 优化#

NumPy 提供了一个灵活的工作机制,使其能够利用 CPU 拥有的 SIMD 特性,以便在所有主流平台上提供更快、更稳定的性能.目前,NumPy 支持 X86、IBM/Power、ARM7 和 ARM8 架构.

NumPy 中的优化过程在三个层次上进行:

  • 代码是使用*编写*的通用内在函数,这是一组类型、宏和函数,通过使用只有在编译器识别它们时才启用它们的保护,映射到每个受支持的指令集.这允许我们为相同的功能生成多个内核,其中每个生成的内核代表一组与一个或多个特定CPU特性相关的指令.第一个内核代表最小的(基线)CPU特性,而其他内核代表额外的(分派的)CPU特性.

  • 编译 时,CPU 构建选项用于根据用户选择和编译器支持定义最低和额外支持的功能.适当的内在函数与平台 / 架构内在函数叠加,并编译多个内核.

  • runtime import 时,CPU 会被探测以确定支持的 CPU 特性集.使用一种机制来获取最合适的内核指针,这将是调用函数的内核.

备注

NumPy 社区在实施这项工作之前进行了深入讨论,请查看 NEP-38 以获得更多澄清.