Py学习  »  Python

何时使用c或cpp来加速python或matlab实现?

havakok • 3 年前 • 1190 次点击  

我想创建一个房间脉冲响应的特例。我在跟踪 this implemetation 用于室内脉冲响应发生器。我也在关注 this tutorial 用于将c++\c与python集成。

根据教程:

  1. 您希望通过将关键部分转换为C来加速Python代码的特定部分。C不仅具有更快的执行速度,而且还允许您在谨慎的情况下突破GIL的限制。

然而,在看MATLAB示例时,我看到的cpp代码段所做的只是常规循环和数学计算。在本例或任何其他示例中,c\cpp将以何种方式比python\MATLAB更快?任何通用c\cpp代码都会运行得更快吗?如果是,为什么?如果没有,在选择c\cpp段实施时,我需要寻找哪些指标?c\cpp中哪些操作更快?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132352
 
1190 次点击  
文章 [ 1 ]  |  最新文章 3 年前
shahriar
Reply   •   1 楼
shahriar    3 年前

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