旬のトピック、最新ニュースのマピオンニュース。地図の確認も。

Armの最新アーキテクチャ「Armv8.1-M」を読み解く 第4回 Heliumと組み合わせて効率よくデータ処理が可能な命令拡張

2019年02月22日08時40分 / 提供:マイナビニュース

○Low Overhead Branch Extension

これはHeliumと組み合わせることで、より効率よくデータ処理が可能(もちろんHelium以外でも利用可能)な命令拡張である。要するにDSPで実装されているZero Overhead Loopに相当する命令である。

Photo05はこれを判りやすく示した例である。この例だと、最初にWLS(While Loop Start)命令を実行したあと、1回目のLDR/STRの後に1回だけLE(Loop End)を実行し、その後はずっとLDR/STRを連続して実行できるのが判る。

これを従来の命令で書くと、ループカウンタを減算してゆきながらループを回し、カウンタが0になったらループ脱出するというコードになるので、

MOVS R0, #10 ; Counter Initial Value
Loop:
LDR R1, [R2], #4 ; Memory Copy
STR R1, [R2], #4 ; Memory Copy
SUB R0, R0, #1 ; Decrement Counter
CMP R0, #0 ; Compare Counter
BLE Loop ; Loop if not finished
B label_x ; branch to somewhere

となり、実行は

MOVS
LDR
STR
SUB
CMP
BLE
LDR
STR
SUB
CMP
BLE
:
:
:
LDR
STR
SUB
CMP
B

という具合になる。要するに1回のループの中の命令が3つほど増える訳だ。これをZero Overhead BranchではなくLow Overhead Branchとしたのは、ループの中に1つだけLEが入ってるからというあたりではないかと思うが、いずれにせよ相当なオーバーヘッド削減になるだろう。

ちなみにこの命令群、Loop Startに関してはWHS以外にDLS(Do Loop Start)/WLSTP(While Loop Start with Tail Predication)/DLSTP(Do Loop with Tail Predication)が、Loop End以外にはLETP(Loop End with Tail Predication)が用意されている。WHSとDLSはLEと組み合わせて、WLSTPとDLSTPはLETPと組み合わせて使う形になっている。

(次回は2月23日に掲載します)

続きを読む ]

このエントリーをはてなブックマークに追加

あなたにおすすめの記事

関連記事

ネタ・コラムカテゴリのその他の記事

マピオンニュース ページ上部へ戻る