私信  •  关注

shahriar

shahriar 最近创建的主题
shahriar 最近回复了
3 年前
回复了 shahriar 创建的主题 » 何时使用c或cpp来加速python或matlab实现?

为什么使用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也是如此)。