LoginSignup
38
27

More than 1 year has passed since last update.

Armの命令セットとNEON拡張

Last updated at Posted at 2020-11-30

このアドベントカレンダーのスコープ、対象読者について

  • この記事はひとりNEONアドベントカレンダー2020 1日目の記事です。
  • 目次にも書きましたが、あくまで手島個人の知識の範囲内で書くので、すべて公開情報がもとになっています。
  • 個人で趣味の範囲で書くので、筆者の勤務先とは無関係です
  • 一人advent calendarなので、省エネモードがモットーになってます。悪しからず。
  • Arm v8.4、SVEと行ったArmの現在進行形の拡張に関しては実機が手元に無いこともあって、あまり深入りはしない予定
  • 実際のコードはアセンブラではなく、GCCのintrinsicをもとに解説する
  • C/C++のコードからNEON命令を使うコードを解説するので、それが読めるぐらいの読者を想定。

本日のトピック

Armの命令セットとNEON拡張

  • Armの命令セットはv6、v7、v8と進化してきてます。v8で64bit対応が入り、NEONが標準命令セット入りしました。
  • Armv7では、NEONは拡張命令セットという位置づけだったので、今プログラムが走ってるCPU上でサポートされているかどうかはプログラム内で実行時に判定する必要がありました。
  • で、最近のArm(ちょっと主語がでかい)にはだいたいNEONが付いています。Raspberry Pi 2以降発売されたLinuxが動くSBCでは、NEON無しというSoCにはまずお目にかかれません。
  • ここらへんは、/proc/cpuinfoを確認するとわかります
$ cat /proc/cpuinfo
processor       : 0
model name      : ARMv7 Processor rev 5 (v7l)
BogoMIPS        : 38.40
Features        : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm 
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xc07
CPU revision    : 5
(略)
  • 上記はRaspberry Pi 2上の/proc/cpuinfoです。
  • 4コアのCPUが載ってますが、情報は1コア分だけ掲載しました。
  • この Featuresの欄にneonと記載されており、これがNEON拡張命令が提供されていることを表します。
  • プログラム上から確認する場合は /proc/self/auxv にバイナリで書かれており、こちらをチェックすればNEON拡張命令に対応しているCPUか分かります。

でNEONってなんなの?

  • NEONはArmのSIMD拡張命令セットです。
  • Single Instruction Multiple Dataの略で、複数のデータに対し、同じ処理を実行できます。
  • Intelで言うところの、SSE、AVXと同じポジションにいるのがArmのNEONです。
  • NEONが提供されているCPUでは、64bit幅のレジスタが32本提供されており、これらのレジスタに対してSIMD命令を発行できます。
    • Armv7もしくは32bit版Armでは、64bit幅のレジスタは0番と1番のように、2n番と2n+1番をつなげて、最大16本の128bit幅レジスタとして利用することもできます。
    • Aarch64、Armv8もしくは64bit版Armでは32本の128bit幅レジスタが提供され、128bitの内、下位64bitを64bit幅レジスタとして利用できます。
  • 実際に提供されてる命令は複数あるのですが、微妙に細かい挙動の違いがある、似た命令が大量にあるので、それらを片っ端から解説していきます。

まとめ

  • NEONの位置づけを説明しました。
  • 明日も私の担当で、実際にNEONのコードを書く下準備を解説します

NEON に関する参考文献

38
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
27