Help us understand the problem. What is going on with this article?

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

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 整数を含む計算ではだいぶ差が出ることがありそう。
浮動小数点数では差が出なさそう。

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

Nabetani
横浜へなちょこプログラミング勉強会をやっていました。 / CodeIQ の出題者でした。 / 日経 WinPC に連載を持っていました(名義が違うけど) / Yokohama rb に半分ぐらい参加しています。 / twitter : http://twitter.com/Nabetani
https://nabetani.hatenadiary.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away