2012-04-29 10 views
1

私は「デュアルブート」Ubuntu 11.04、Ubuntu 12.04、およびWindows XP SP3をすべて最新のものにアップデートしました。 PCは、私はnumpyのは、最新の利用可能MKL、ICC、のifortで構築する必要があり、むしろ古いインテルのCeleron DのCPUの(ソースからコンパイルATLAS)ATLASを使ってコンパイルなぜインテルのMKL NumpyはATLASビルドより遅くビルドされているのですか?

は、Ubuntuの11.04で私が持っている2ギガバイトのRAMを搭載した3.06GHz numpyのUbuntuの12.04で
ですWindowsのXPでは
私はここに
詳細(クリストフゴールケによって親切に提供するPythonパッケージから)MKLでnumpyのを持っている:http://pastebin.com/raw.php?i=wxuFbyVg

私が試したシンプル:
%timeit np.dot(np.ones((1000,1000)), np.ones((1000,1000)))

となった。この結果:

Ubuntu ATLAS: 1 loops, best of 3: 457 ms per loop 
Windows MKL: 1 loops, best of 3: 680 ms per loop 
Ubuntu MKL: 1 loops, best of 3: 1.04 s per loop 

は、私は上記の考えに悪い例であり、私は利用可能な多くの比較の1、つまり最初のGoogleのヒットで検索:http://dpinte.wordpress.com/2010/01/15/numpy-performance-improvement-with-the-mkl/

は、私がテストした同じ機能:

%timeit test_eigenvalue() 
Ubuntu Atlas: 1 loops, best of 3: 6.38 s per loop 
Windows MKL: 1 loops, best of 3: 2.22 s per loop 
Ubuntu MKL: 1 loops, best of 3: 3.58 s per loop 

%timeit test_svd() 
Ubuntu Atlas: 1 loops, best of 3: 2.13 s per loop 
Windows MKL: 1 loops, best of 3: 2.06 s per loop 
Ubuntu MKL: 1 loops, best of 3: 3.09 s per loop 

%timeit test_inv() 
Ubuntu Atlas: 1 loops, best of 3: 964 ms per loop 
Windows MKL: 1 loops, best of 3: 1.02 s per loop 
Ubuntu MKL: 1 loops, best of 3: 1.59 s per loop 

%timeit test_det() 
Ubuntu Atlas: 1 loops, best of 3: 308 ms per loop 
Windows MKL: 1 loops, best of 3: 322 ms per loop 
Ubuntu MKL: 1 loops, best of 3: 491 ms per loop 

%timeit test_dot() 
Ubuntu Atlas: 1 loops, best of 3: 1.5 s per loop   
Windows MKL: 1 loops, best of 3: 1.77 s per loop 
Ubuntu MKL: 1 loops, best of 3: 2.77 s per loop 

ATLASコンパイルされたNumpyは何らかの理由で最良の結果を得ています。
問題が何であるか知っている人はいますか?

+0

行列を乗算する必要が

はおそらくMKLの最近のバージョンは、最新のインテルのCPUに最適化されています。 – DaveP

+0

はい、おそらくあります。私はIntelのnumpyページの指示に従ったので、Ubuntu MKLのバージョンが遅いことを知っています。代わりに、少なくとも1つのCPUでそれを調整してください。しかし、システム全体を複雑にする代わりに、私はUbuntu 12.04のnumpyバージョンでATLASと一緒に行くつもりです。 – theta

答えて

4

インテル®MKLは、主にサーバーおよび高性能のデスクトップおよびモバイル・プロセッサー向けに設計され、最適化されています。 Celeron Dは比較的パフォーマンスの低いプロセッサーでしたので、MKLは決して最適化されていませんでした。たとえば、最近のIntel Core i7デスクトップでSVDの性能をチェックすると、MKLが有効なNumPyはATLAS対応のNumPyよりも80%も高速に動作します。私はまた、私のデスクトップインテルCore i3は第四世代の2.3 GHzの上MKLとnumpyのを使用していたhttp://software.intel.com/en-us/forums/intel-math-kernel-library/

0

:MKLに関する質問への高速応答を取得するには、ところでhttp://software.intel.com/en-us/articles/numpy-scipy-with-mkl/

インテルMKLのフォーラムに参加してください。ここを参照してください。 4GBラム 2つの4096x4096マトリックスのドット積をテストしました。私はPython 3.5の64ビット(日付までのmklサポートなし)のアナコンダディストリビューションでそれらをテストしました。mklとpython 2.7がない64ビット64ビットとmklと64ビットの結果はほぼ同じでした。整数型の場合は73秒(+ 0.5秒)、float64データ型の場合は260ms(+ 5ms)、複雑なデータ型の場合は1秒(+ 100ミリ秒)を秒単位で表示します。

私は、numpyドットが複雑な行列乗算でも最高であることも発見しました。彼らはすでにGaussの改良を実装しています。

私はblas、pythonでblas、pythonでeinsumを使ってcythonをテストしましたが、ドットは最高です。特定のシステム用のソースからコンパイルアトラスがします常に調子自体のに対し、私はfasster

関連する問題