【Raspberry Pi 2】 NEON/VFPv4とUnixBenchの実験

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を意識したコードになっていないとパフォーマンスは向上しないのかな?

以上、あまりおもしろい結果にはなりませんでしたが、記録として記載しました。



本格派対局将棋 ぴよ将棋
本格派対局将棋アプリ ぴよ将棋
[Android] [iOS]

かわいい「ひよこ」と対局する将棋アプリ。かわいいけどAIは本格派!
対局後の検討機能や棋譜管理機能も充実!棋譜解析機能も搭載!

コメントを残す

メールアドレスが公開されることはありません。