Raspberry Pi(armv7l 架构)具有可用于优化的 neon vfpv4 支持。
numpy的标准版本在安装命令pip3 install numpy
时是否包括这些优化?或 apt-get python3-numpy
?
我不是在谈论 blas 和 lapack。原生 NumPy 。
最佳答案
正如 Mark Setchell 所指出的,numpy
似乎没有针对 NEON 内在函数的特定代码。然而,这还不是全部。现代编译器经常能够采用串行编写的代码并将其转换为使用 SIMD 内在函数。例如,GCC 可以部分展开循环并使用 NEON 的 SIMD 指令同时执行多次循环迭代。
接下来要注意的是pip install
和 apt-get install
会做不同的事情。 apt-get
将从 Raspbian/Debian 存储库中获取预构建的二进制文件(取决于您使用的是哪个)。而pip
只能获取numpy
的来源在 ARM 架构上。这是因为 Python Package Index (PyPI) 不存储 ARM 架构的二进制文件。
Debian 和 Raspbian 似乎都有 armhf
python3-numpy
的版本在他们的存储库中。 hf
代表“硬浮点”——在硬件而不是软件中完成的浮点计算。此 debian page似乎也暗示 armhf
已编译包以利用 NEON 内在函数,但结果有限。也就是说,GCC 正在使用 NEON 内在函数,但还没有像使用 SSE/SSE2 内在函数时那样精细调整(还)。pip
在这种情况下将是更糟糕的选择,因为 GCC 在针对 ARM 浮点指令时似乎有点谨慎。也就是说,pip 将下载 numpy 源代码并在您的 Raspberry Pi 上编译它,但可能不会像默认情况下那样优化代码。您可能需要通过 --global-option
告诉 pip 使用一些编译器选项。争论。例如 --global-option="-mfloat-abi=hard"
.您可以找到一套全面的选项来通过 here .
关于numpy - numpy 是否自动针对 raspberry-pi 进行了优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52161063/