Further to the post I wrote on the MKL performance improvement on NumPy, I have tried to get some figures comparing it to Matlab. Here are some results. Any suggestion to improve the comparison is welcome. I will update it with the different values I do collect.
Here is the Matlab script I used to compare the Python code :
disp('Eig');tic;data=rand(500,500);eig(data);toc;
disp('Svd');tic;data=rand(1000,1000);[u,s,v]=svd(data);s=svd(data);toc;
disp('Inv');tic;data=rand(1000,1000);result=inv(data);toc;
disp('Det');tic;data=rand(1000,1000);result=det(data);toc;
disp('Dot');tic;a=rand(1000,1000);b=inv(a);result=a*b-eye(1000);toc;
disp('Done');
Each line is linked to the corresponding Python function in my test script (see my MKL post).
The results are interesting. Tests have been made with R2007a and R2008a versions and compared to and EPD 6.1 with NumPy using MKL.
Here are the timings on an Intel dual core computer running Matlab R2007a :
Eig : Elapsed time is 0.718934 seconds.
Svd : Elapsed time is 17.039340 seconds.
Inv : Elapsed time is 0.525181 seconds.
Det : Elapsed time is 0.200815 seconds.
Dot : Elapsed time is 0.958015 seconds.
And those are the timings on an Intel Xeon 8 cores machine running Matlab R2008a :
Eig : Elapsed time is 1.235884 seconds.
Svd : Elapsed time is 25.971139 seconds.
Inv : Elapsed time is 0.277503 seconds.
Det : Elapsed time is 0.142898 seconds.
Dot : Elapsed time is 0.354413 seconds.
Compared to the NumPy/MKL tests, here are the results :
| Function |
Core2Duo-With MKL |
Core2Duo-R2007a |
Speedup using numpy |
| test_eigenvalue |
752ms |
718ms |
0.96 |
| test_svd |
4608ms |
17039ms |
3.70 |
| test_inv |
418ms |
525ms |
1.26 |
| test_det |
186ms |
200ms |
1.07 |
| test_dot |
666ms |
958ms |
1.44 |
| Function |
Xeon8core-With MKL |
Xeon8core-R2008a |
Speedup using numpy |
| test_eigenvalue |
772ms |
986ms |
1.28 |
| test_svd |
2119ms |
26081ms |
12.5 |
| test_inv |
153ms |
230ms |
1.52 |
| test_det |
65ms |
105ms |
1.61 |
| test_dot |
235ms |
287ms |
1.23 |