CPU/SIMD 优化#
NumPy 具有灵活的工作机制,使其能够利用 CPU 拥有的 SIMD 功能,以便在所有流行平台上提供更快、更稳定的性能。目前,NumPy 支持 X86、IBM/Power、ARM7 和 ARM8 架构。
NumPy 中的优化过程分三层进行:
代码是使用通用内在函数编写的,通用内在函数是一组类型、宏和函数,通过使用防护措施映射到每个受支持的指令集,只有当编译器识别它们时才可以使用它们。这允许我们为相同的功能生成多个内核,其中每个生成的内核代表一组与一个或多个特定 CPU 功能相关的指令。第一个内核代表最小(基线)CPU 功能,其他内核代表附加(调度)CPU 功能。
在编译时,CPU 构建选项用于根据用户选择和编译器支持来定义要支持的最小功能和附加功能。适当的内在函数与平台/体系结构内在函数重叠,并编译多个内核。
在运行时导入时,将探测 CPU 以获取支持的 CPU 功能集。使用一种机制来获取指向最合适内核的指针,这将是函数调用的指针。
笔记
NumPy 社区在实施这项工作之前进行了深入的讨论,请查看NEP-38以获取更多说明。