ai65536's blog

将棋とかプログラムとか

ARMのSIMDが遅い件

 

将棋エンジンはBitboardといって盤面を128ビットで表す技術が使われています。

Intel CPUではこの部分をSIMDを使うことによって高速化していますが、ARMではSIMDを使うと速度がでません。

 

気になって夜も寝られない(嘘)のでインストラクションマニュアルで調べてみました。

 

命令の実行速度に関係するレイテンシとスループットは大まかに以下のとおり。

レイテンシ:命令の実行が完了するまでのクロック数

スループットインテル  同じ命令を再度受け入れるようになるまでのクロック数

                         ARM  同じ命令を1クロックで何個入れられるか

スループットインテルとARMでマニュアルの記載の仕方に違いがあります。

 

Intelのインストラクション

http://www.intel.com/content/dam/www/public/ijkk/jp/ja/documents/developer/248966-024JA.pdf

And命令抜粋

128bit SIMD 命令

f:id:ai65536:20161025102431p:plain

※ 06_2A=Sandy Bridge  06=Family Number 2A=Model Number

汎用命令

f:id:ai65536:20161025103125p:plain

 

ARM Cortex A72 インストラクション

http://infocenter.arm.com/help/topic/com.arm.doc.uan0016a/cortex_a72_software_optimization_guide_external.pdf

And命令抜粋

SIMD命令

f:id:ai65536:20161025103941p:plain

スループットインテル風にすると0.5

汎用命令

f:id:ai65536:20161025103623p:plain

 

 

まとめ

Intelは汎用命令とSIMD命令でレイテンシ、スループットに差がないので、単純に処理するビット数が多い方が速くなる。

・ARMは汎用命令に比べてSIMD命令のレイテンシが3倍遅い。スループットが2(0.5)なので128bitの処理に単純に3倍かかると思われる。(スループットが1でも1.5倍遅い)

 

ARMのSIMDを使ったビット演算は遅い

 

最後に

マニュアルの見方がおかしいという場合は連絡ください