为什么使用C++来加速Python
C++代码编译成机器代码。这使得它比解释器语言更快(但是,如果你不知道你在做什么,那么不是每个C++写的代码都比Python代码快)。在C++中,可以直接访问数据指针并使用
SIMD
指导他们,使他们的速度提高数倍。您还可以对循环和代码进行多线程处理,以使它们运行得更快(可以是显式多线程,也可以是类似的工具)
OpenMP
).你不能用高级语言(至少不能正确地)做这些事情。
何时使用C++加速Python
并非代码的每一部分都值得优化。您应该只优化计算成本高且成本低的部件
bottleneck
你的节目。这些部分可以用C或C++编写,并通过绑定使用Python(通过使用
pybind11
例如)。大型机器学习库,比如
PyTorch
和
TensorFlow
做这个。
专用硬件
有时候,有一个优化的C++ CPU代码是不够的。然后你可以评估你的问题,如果合适的话,你可以使用专用的硬件。这些硬件可以从低级(比如FPGA)到高级硬件,比如我们系统上通常有的专用图形卡(比如
CUDA
为NVIDIA GPU编程)。
低级语言和高级语言中的常规代码差异
即使不使用多线程或SIMD操作,使用编译语言也有很大的优势。例如,在C数组或
std::vector
相比于在Python数组上循环或使用,C++中的速度可以快100倍以上。
for
在MATLAB中(最近)
JIT compiling
用于加速高级语言,但仍然存在差异)。这有很多原因,其中一些是在编译时识别的基本数据类型,并且具有连续数组。这就是为什么人们建议在简单的Python循环上使用Numpy矢量化操作(对于MATLAB也是如此)。