Raspberry Pi 2のCPUコアはCortex-A7ベースとなっており、旧モデルにはなかったNEONというSIMD命令が使用できるようになっています。
また、浮動小数点演算コプロセッサが旧モデルのVFPv2からVFPv4に進化しています。(※)
※正確にはVFPはVector Floating Pointの略で、ベクタ演算浮動小数点コプロセッサなのですが、ベクタモードは使いにくくあまり使われなかったため、現在はNEONを使うように推奨されているようで、実体としてVFPv2やVFPv4は(スカラ)浮動小数点演算コプロセッサとして使われています。
gccコンパイラはNEONおよびVFPv4をサポートしているようですので、試しにUnixBenchをNEON/VFPv4を有効にしてコンパイルし、実行してみました。
あ、前の記事:【Raspberry Pi 2】 OSインストールとベンチマークの続きになります。
Makefileの74行目にある、OPTIONに以下を追加します。
-mfpu=neon-vfpv4 -mfloat-abi=hard -march=armv7-a
追加後は以下のようになります。
OPTON = -O2 -fomit-frame-pointer -fforce-addr -ffast-math -Wall -mfpu=neon-vfpv4 -mfloat-abi=hard -march=armv7-a
以下にてコンパイルします。
$ make clean $ make
$ ./Run
で、実行したところ、結果は誤差程度で変わりませんでした。
現時点のRaspbianにて標準となっているgcc 4.6では、neon-vfpv4のオプションは効いていないという情報もあり、gcc-4.8にて試してみました。
以下にてインストールします。
$ sudo apt-get install gcc-4.8
バージョンを確認します。
# gcc-4.8 --version gcc-4.8 (Raspbian 4.8.2-21~rpi3rpi1) 4.8.2 Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
UnixBenchのMakefile 56行目を以下のように変更します。
CC=gcc-4.8
先ほど変更したMakefileの74行目にあるOPTIONを以下のように変更します。
OPTON = -O2 -fomit-frame-pointer -fforce-addr -ffast-math -Wall -mcpu=cortex-a7 -mfpu=neon-vfpv4 -mfloat-abi=hard
以下にてコンパイルします。
$ make clean $ make
$ ./Run
で、実行したところ、結果は変化なしでした。
NEONは単精度浮動小数点のSIMD命令ですので、UnixBenchでは使われる場面がないかもしれません。
Double-Precision Whetstoneは倍精度ですし。
VFPv4の方はレジスタ本数は増えていますが、演算性能は変わらないのかも。
gccがVFPv4をうまく使ってくれていないという可能性もあります。ビデオエンコード・デコードのようなSIMDが効きやすいアプリか、SIMDを意識したコードになっていないとパフォーマンスは向上しないのかな?
以上、あまりおもしろい結果にはなりませんでしたが、記録として記載しました。
[amazonjs asin=”B00TBKFAI2″ locale=”JP” title=”Raspberry Pi2 Model B ボード&ケースセット (Standard, Clear)”]
[amazonjs asin=”4800710901″ locale=”JP” title=”これ1冊でできる!ラズベリー・パイ 超入門 改訂第2版 Raspberry Pi Model B/B+/2対応”]