我试图在python中围绕C优化代码。我已经阅读了几次,因为python通过C扩展实现了高速计算。换句话说,每当我使用像numpy这样的库时,它基本上都会调用一个C扩展来计算结果并返回它。
假设我想使用np.add(x,y)
添加两个数字。如果我理解正确,像numpy这样的库不会编译python代码,而是已经附带了可执行文件,只需要取值x和y并返回结果。那是对的吗?
特别是,我想知道深度学习库是否也是如此。根据Theano的官方文档,它需要g ++和gcc(至少强烈推荐它们)。这是否意味着Theano将在python脚本的运行时编译C(或C ++)代码?如果是这样,PyTorch和Tensorflow是否相同?
我希望有人能在这里解决我的困惑!非常感谢!
python中的C扩展
numpy
经常使用C-extensions。例如,您可以在这里查看sort()函数[1]的C实现[2]。
[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
深度学习库
深度学习库对其后端的大部分使用C扩展,以及CUDA和CUDNN。代码可以在运行时编译:
[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]。