Mac Accelerate frameworkとIntel MKLを比較してみた

前の投稿で、intel MKLをMacにインストールしましたが、こうなってくるとAccelerate frameworkとどちらが速度が早いのか気になるところです。Accelerate frameworkはMacに最適化されているということで結果が気になります。

cblas_dgemmを使って比較してみました。

Source code for Mac Accelerate

下記コマンドでコンパイルしました。

c++ -framework Accelerate -o dgemm_accel dgemm_accel.cpp

Source code for Intel MKL

下記コマンドでコンパイルしました。

c++ -DMKL_ILP64 -m64 -I${MKLROOT}/include  ${MKLROOT}/lib/libmkl_intel_ilp64.a ${MKLROOT}/lib/libmkl_intel_thread.a ${MKLROOT}/lib/libmkl_core.a -liomp5 -lpthread -lm -ldl -o dgemm_mkl dgemm_mkl.cpp

結果

どちらも3回づつ実行して比較しました。結果は下記の通り。

Mac Accelerate framework [sec]Intel MKL [sec]
Real timeCPU timeReal timeCPU time
114.408104.85411.71646.5299
214.811102.43915.10159.2974
314.961103.65213.15352.1992

結果はほぼ同じですね。Accelerate frameworkの方が結果が安定しているでしょうか。なぜだかわかりませんが。そしてどちらも指定しなくても並列計算してくれています。CPU timeに差が出てしまいましたがなぜでしょう…?

おまけ

MKLと自作の”for loop program”を比較してみました。コードは下記。

コンパイルして実行してみます。

> g++-8 -fopenmp -o dgemm_forloop dgemm_forloop.cpp
> for i in 100 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000;
  do
      ./dgemm_forloop $i
  done

結果は下記のとおり。

MKLすごいですね。アセンブリレベル?で最適化されているということなので、どう頑張っても太刀打ちできないんでしょう。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です