最近,我和一位同事就 python 和 C++ 的性能比较进行了争论。我们俩主要使用这些语言来进行线性代数。所以我写了两个脚本,一个在 python3 中使用 numpy,另一个在 C++ 中使用 Eigen。
Python3 numpy版本matmul_numpy.py:
import numpy as np
import time
a=np.random.rand(2000,2000)
b=np.random.rand(2000,2000)
start=time.time()
c=a*b
end=time.time()
print(end-start)
Run Code Online (Sandbox Code Playgroud)
如果我运行这个脚本
python3 matmul_numpy.py
Run Code Online (Sandbox Code Playgroud)
这将返回:
0.07 seconds
Run Code Online (Sandbox Code Playgroud)
C++ 特征版本 matmul_eigen.cpp:
#include <iostream>
#include <Eigen/Dense>
#include "time.h"
int main(){
clock_t start,end;
size_t n=2000;
Eigen::MatrixXd a=Eigen::MatrixXd::Random(n,n);
Eigen::MatrixXd b=Eigen::MatrixXd::Random(n,n);
start=clock();
Eigen::MatrixXd c=a*b;
end=clock();
std::cout<<(double)(end-start)/CLOCKS_PER_SEC<<std::endl;
return 0;}
Run Code Online (Sandbox Code Playgroud)
我编译的方式是
g++ matmul_eigen.cpp -I/usr/include/eigen3 -O3 -march=native -std=c++17 -o matmul_eigen
Run Code Online (Sandbox Code Playgroud)
这将返回(c++11 和 c++17):
0.35 seconds
Run Code Online (Sandbox Code Playgroud)
这对我来说很奇怪,1-为什么 numpy 这里比 C++ 更快?我是否缺少任何其他优化标志?
我想也许是因为 python 解释器在这里执行程序更快。因此,我使用stacks …