Help us understand the problem. What is going on with this article?

matlab プログラムと mex プログラムの速度を比較する

More than 3 years have passed since last update.

matlab プログラムは mex プログラムと比べて遅い?

matlabプログラムは、if文や、for文を多用すると、途端に遅くなります。
「mexプログラムに置き換えたら、100倍速くなった!」なんてことは珍しくないです。

では、単純な計算処理についてはどうでしょうか?
mex化&最適化すると早くなるでしょうか?
matlabも内部的には、mexでの高速化が行われいます。
果たして、それがどのくらいの最適化なのでしょうか。
今回は、その調査をしてみます。

比較は、vector と vector の内積計算速度で行います。
メモリ位置などの考慮をほとんど必要としない単純な処理です。
matlabのみでの計算、mexでの計算、openmp使用、SIMD使用と色々試してみます。

プログラムは以下です。

https://github.com/mucunwuxian/inner_product

実験条件は以下です。
・CPU:Intel(R) Core(TM) i7-4700MQ CPU @ 2.40GHz [core数:4、thread数:8]
・OS:Windows10 64bit
・MATLAB:2016a
・mex compiler:Microsoft Windows SDK 7.1 (C++)
・実験条件:vector長64,000,000 の内積演算 y = wTx を、100回実施する時間を測定

実験結果と考察

動かしてみた結果は以下です。

condition time (sec) cpu usage(%)
matlab 6.00 50%
mex 10.54 12%
mex + openmp 6.03 100%
mex + openmp + SSE 3.32 100%
mex + openmp + AVX 4.03 100%

(※openmpはフルスレッド指定で、CPUメーターでは100%パンパンです)
(※SSE:single×4並列、AVX:single×8並列)

以上。
「頑張れば、matlabを凌げる!」という感じ。

面白いポイントとしては、openmpを使って並列演算を行っただけでは、
matlab単体での演算速度と同程度とまでしか行かないところです。
きっと、matlab単体計算に、SIMDが使われているか、
Intel compilerとか優秀なコンパイラを使ってるんでしょう。
コードの最適化で早くする余地は、もう無い気がします。

また、もう一つ面白いポイントとして、
Microsoft Windows SDK 7.1 (C++) コンパイラによる、
SIMD命令(SSE、AVX)の最適化はちょっと甘そうです。
こちらも、コードに問題は無いと思うのですが、高速化度合いがいまいちです。
これについては、また別途検証を行えれば、と思いますが、
網羅的にやると、CPU複数種類試すとか、Intel Compiler買うとか、お金かかりそう、、、

という訳で、今日は以上となります。
ここまで読んで下さった方、ありがとうございました。orz...

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした