在讲座中我遇到了以下问题: 给定一个简单的程序来计算大型数据集中列的总和,比较了python和c ++实现的性能。主要瓶颈应该是阅读数据。计算本身很简单。在第一次执行时,python版本比c ++慢大约2倍,这是有道理的。
然后在第二次执行时,c ++程序从4秒加速到1秒,因为显然“第一次执行是I / O限制,第二次是CPU绑定”。这仍然有意义,因为文件内容可能被缓存而忽略了从磁盘读取的慢速。
然而,尽管温暖的缓存,python实现在第二次运行时根本没有加速。我知道python is slow,但 慢吗?这是否意味着在python中执行这个简单的计算比从磁盘读取.7 GB要慢?
如果总是如此,我想知道为什么我所知道的最大的深度学习框架(PyTorch,tensorflow)都有python apis。例如,对于实时对象检测,将输入(从视频读取帧,可能是预处理)解析到网络并解释输出必须比在GPU上执行前向传播本身更慢。
我误解了什么吗?谢谢。
答案 0 :(得分:1)
如果没有实现细节,这并不容易回答,但一般来说,python因其缓存友好性而闻名,因为你大多数都没有选择在python中低级优化缓存行为。但是,这并不总是正确的。您可以直接在python中优化缓存友好性,或者将c ++代码的一部分用于关键部分。但总是要考虑,您可以在C ++中更好地优化代码。因此,如果你有真正关键的代码部分,你想要达到速度和效率的每一个百分比,你应该使用C ++。这就是为什么许多程序同时使用C ++进行原始性能和python以获得良好的接口和程序结构的原因。