LoginSignup
3
0

More than 3 years have passed since last update.

ARMの64bit命令セットと32bit命令セットの速度比較

Posted at

RaspberryPi 3B+ には Cortex-A53 が乗っている。
Cortex-A53 の命令セットは Armv8-A。64bit 命令を実行可能。

でも、普通に Raspberry Pi OS (Raspbian) を入れると、32bit になる。

$ uname -a
略 armv7l GNU/Linux

なんかもったいないなぁと思いつつ、どれぐらいもったいないのかは全然知らなかった。
で。
今日も楽しいマイクロベンチマーク。

64bit 環境を用意する

Raspberry Pi 4B 64bit kernel を試す を参考にしたら簡単にできた。
記事のタイトルに 4B とあるが、 3B+ でも同じだった。

$ uname -a
略 aarch64 GNU/Linux

ちゃんと 64bit になったっぽい。

バイナリをつくる

当初は、 clang か gcc で arm64 バイナリ作ろうと思ったんだけど、簡単には arm64 バイナリを作れそうになかったので、仕方なく、 go で行くことにした。

時間を測る

  • 無意味な計算を uint64, float64, float32 で行った
  • 環境は、MacBook Pro (Retina, 15-inch, Mid 2015) と 64bit化された Raspberry Pi 3B+
  • バイナリは、 amd64 と Armv7, Armv8。
  • ビルドは macOS 行った。これは、 Raspberry Pi に go 1.14 を入れるのがめんどくさかったから。

測った結果

uint64

image.png

計算内容は、足し算、乗除、そしてローテート。
グラフがグネグネしているのでよくわからないが、2〜3倍 Armv8 の方が速い模様。

float32

image.png

計算内容は、足し算と乗除。
neon の効き具合に差が出るかと思いきや、大差ない感じ。

float64

image.png

計算内容は、足し算と乗除。
こちらも neon の効き具合に差が出るかと思いきや、大差ない感じ。

まとめ

Armv8 (amd64, aarch64) 命令セットが使えれば、64bit 整数を含む計算ではだいぶ差が出ることがありそう。
浮動小数点数では差が出なさそう。

まあマイクロベンチマークなので、この実験だけでははっきりわからないのだけれど。

3
0
4

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
3
0