我试图用Python进行C优化的代码。现在,我已经读过几次Python可以通过C扩展来实现高速计算。换句话说,每当我使用numpy之类的库时,它基本上都会调用C扩展来计算结果并将其返回。
说我想使用np.add(x,y)
将两个数字相加。如果我理解正确,诸如numpy之类的库不会编译python代码,而是已经带有可执行文件,这些可执行文件将简单地获取x和y值并返回结果。正确吗?
尤其是,我想知道深度学习库是否也是如此。根据Theano的官方文档,它需要g ++和gcc(至少强烈建议使用它们)。这是否意味着Theano将在运行时编译python脚本的C(或C ++)代码?如果是这样,PyTorch和Tensorflow是否一样?
我希望有人可以在这里解决我的困惑!非常感谢!
答案 0 :(得分:1)
C扩展
numpy
经常使用C扩展名。例如,您可以在[2]中查看sort()函数[1]的C实现。
[1] https://docs.scipy.org/doc/numpy/reference/generated/numpy.sort.html
[2] https://github.com/numpy/numpy/blob/master/numpy/core/src/npysort/quicksort.c.src
深度学习库
深度学习库的大部分后端以及CUDA和CUDNN都使用C扩展。可以在运行时编译代码:
[3] http://deeplearning.net/software/theano/extending/pipeline.html#compilation-of-the-computation-graph
[4] https://www.tensorflow.org/xla/jit
[5] https://pytorch.org/blog/the-road-to-1_0/#production--pain-for-researchers
为回答您的问题,theano
将在python脚本的运行时编译C / C ++代码。对于theano
,图形运行时的编译时间非常慢:我建议您重点关注pytorch
或tensorflow
而不是theano
。
如果您不熟悉深度学习,也可以快速浏览[6]。