raspberry pi 3b+ 32bitと64bitどっちが速い？

##1. イメージファイルの準備
　Raspberry pi 3b+を64bit OSで動作させた場合、32bit OSとの性能に差が出るのかな？という疑問からベンチマークソフトを使用して性能を数値化、比較します。
今回はubuntu 18.04を使用します。
[ubuntu wiki](https://wiki.ubuntu.com/ARM/RaspberryPi)より2つのイメージを用意してunix benchをインストールする流れ。

　　1). armhf (32bit版)
　　　　`ubuntu-18.04.2-preinstalled-server-armhf+raspi3.img.xz`

　　2). arm64 (64bit版)
　　　　`ubuntu-18.04.2-preinstalled-server-arm64+raspi3.img.xz`
##2. ubuntu18.04 (32bit)
　まずarmhf (32bit版)を解凍したイメージファイルをWin32 Disk Imagerを使ってMicro SDカードに書き込みます。
`Wifi設定` `apt update` `apt upgrade`を行った後に、Kernelのビット数を確認。

```
$ getconf LONG_BIT
32
```
　期待通り32ビットでKernelが動作しているようです。
　使用するベンチマークソフトはunix bench、`~/byte-unixbench/UnixBench`以下にあるREADMEを参考に実行します。

```
$ git clone https://github.com/kdlucas/byte-unixbench.git
$ cd ./byte-unixbench/UnixBench
$ make
$ ./Run
```
　途中、gccとmakeがインストールされていなかったため`sudo apt install gcc make`を実行しています。
　試験後は`results`フォルダにログがあるので3回`$ ./Run`した結果を平均してみました。

#### table 2-1 ubuntu18.04 (32bit)
| Test                                    | Score        | Unit  | Index   |
|-----------------------------------------|--------------|-------|---------|
| Dhrystone 2 using register   variables  | 24,926,396.5 | lps   | 2,135.9 |
| Double-Precision Whetstone              | 4,554.6      | MWIPS | 828.1   |
| Execl Throughput                        | 2,493.6      | lps   | 579.9   |
| File Copy 1024 bufsize 2000   maxblocks | 242,929.9    | KBps  | 613.5   |
| File Copy 256 bufsize 500   maxblocks   | 65,960.3     | KBps  | 398.5   |
| File Copy 4096 bufsize 8000   maxblocks | 553,033.8    | KBps  | 953.5   |
| Pipe Throughput                         | 972,812.5    | lps   | 782.0   |
| Pipe-based Context Switching            | 177,506.3    | lps   | 443.8   |
| Process Creation                        | 5,494.6      | lps   | 436.1   |
| Shell Scripts (1 concurrent)            | 4,716.2      | lpm   | 1,112.3 |
| Shell Scripts (8 concurrent)            | 607.1        | lpm   | 1,011.8 |
| System Call Overhead                    | 1,940,369.4  | lps   | 1,293.6 |
| System   Benchmarks Index Score:        |              |       | 782.3   |

##3. ubuntu18.04 (64bit)
　続いてarm64 (64bit版)、32bit版同様に64bitでKernelが動作しているかを確認します。

```
$ cat /boot/firmware/config.txt
enable_uart=1
kernel=kernel8.bin
device_tree_address=0x03000000
dtparam=i2c_arm=on
dtparam=spi=on
arm_64bit=1　　　　　　　　　　　← 64bit設定の確認
```
```
$ getconf LONG_BIT
64
```
　Wifi設定など32bit版の時と同様にセットアップを完了させた後、Unix Benchをgit clone, makeして実行します。

#### table 3-1 ubuntu18.04 (64bit)
| Test                                    | Score        | Unit  | Index  |
|-----------------------------------------|--------------|-------|--------|
| Dhrystone 2 using register   variables  | 29,659,405.9 | lps   | 2528.0 |
| Double-Precision Whetstone              | 5,346.0      | MWIPS | 969.8  |
| Execl Throughput                        | 2,313.4      | lps   | 532.7  |
| File Copy 1024 bufsize 2000   maxblocks | 262,512.9    | KBps  | 653.5  |
| File Copy 256 bufsize 500   maxblocks   | 72,269.9     | KBps  | 432.6  |
| File Copy 4096 bufsize 8000   maxblocks | 587,768.7    | KBps  | 1004.8 |
| Pipe Throughput                         | 1,122,159.4  | lps   | 899.0  |
| Pipe-based Context Switching            | 168,999.8    | lps   | 422.4  |
| Process Creation                        | 5,454.6      | lps   | 434.4  |
| Shell Scripts (1 concurrent)            | 4,437.5      | lpm   | 1045.9 |
| Shell Scripts (8 concurrent)            | 573.8        | lpm   | 954.0  |
| System Call Overhead                    | 1,785,716.7  | lps   | 1189.8 |
| System   Benchmarks Index Score:        |              |       | 803.7  |

##4. 結果
　整数演算処理、浮動小数演算処理は64bitで動作していた時が速く (Dhrystone2, Double-Precision)、メモリ幅も大きいのでファイルコピー(キャッシング？)の効率もよくなっているようです。
　~~ただし、使用するメモリ量も多くなったのでシェルスクリプトやシステムコールの実行速度で32bitに逆展されているようです。スワップメモリを設定することで改善するのか？これは宿題ですね。~~訂正、スワップメモリを使用するほどの処理ではありませんでした。
　64bit版のシェルの処理速度が最適化されていないのかな。
　Figure 4-1にベンチマークの比較グラフを記載します。
####Figure 4-1 UnixBench 32bit, 64bit比較
<img width="420" alt="UnixBench.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/408370/5d6ace1e-f74b-7116-135e-1c4383409afb.png">