2010-12-24[n年前へ]
■gccでNEONのSIMD命令を生成させる方法
AndroidのSDKのgoldfishのCPUをcortex-A8に置き換えてNEONのSIMD命令を試す(その2) のときにはarm_neon.hに定義されているintrinsicsを使ってNEONのSIMD命令を生成させました。この方法だとNEONの命令について詳細を知っていなければなりませんし、なによりもそのプログラムがNEONに依存したものになってしまいます。
今回はコンパイラの最適化の機能を使ってNEONのSIMD命令を生成させるコツを紹介します。
ポイントは
* 配列をループで使うこと。
* その配列のポインタに __restrict の属性がついていること。( ex. void vmla2(float* __restrict a) )
コンパイルオプションは以下のものをつけます。
arm-eabi-gcc -O2 -march=armv7-a -ftree-vectorize -mhard-float -mfloat-abi=softfp -mfpu=neon -mvectorize-with-neon-quad
■Powered
by yagm.net