英特尔强烈建议使用他们的 Python 发行版,而不是自己手动构建 Python 模块。一个明显的优势是,有许多可用的优化模块,如果您想自己编译它们,那么这是一项不简单的任务。
但是我还没有找到有哪些可用的优化。如果我手动构建软件包,我确信在编译代码时会考虑到我的处理器(AVX、SSE)可用的所有指令,并使二进制文件尽可能优化,因此我想知道:
英特尔是否在发行版中附带为其所有处理器编译的二进制文件? (例如,每一代都有一组不同的二进制文件:Nehalem、Sandy Bridge 等) 或...
英特尔是否提供某种通用优化? (对所有处理者) 或...
中间有什么东西?
更具体地说,Intel 表示它通过 MKL、TBB 和 DAAL 的方式“加速”Python。手动构建至少会利用 MKL 和主机处理器的指令集定制。
因此,从我的角度来看,这两种方法之间需要权衡:如果使用发行版,将节省大量时间并且拥有所有“加速器”,但手动编译将利用 MKL 和指令集(至少)。那么,你的看法是什么?
两者都是正确的 - 大多数库都是使用多个 ISA 目标编译的,如 AVX2、AVX512 和内部调度程序在运行时选择特定的代码路径。
还有较低级别的 sse2 代码路径,可以在包括 AMD CPU 在内的任何现代 x86 系统上工作。根据特定库中调度程序的实现,也会为非 Intel CPU 选择特定的代码路径。
就消息传递而言 - 有点复杂。从 python 级别来看,不期望用户会编译任何特定的东西。但是,如果应用程序从 Python 移植到 C++,则可以获得额外的性能优势 - 在这种情况下,所有这些库都将通过 C++ API 使用