3

armv7 命令セットを備えた ARM プロセッサを搭載した iPhone 4 用の Eigen ライブラリのコンパイルに苦労しています。プリプロセッサ定義 EIGEN_DONT_VECTORIZE を指定すると、これまでのところすべて正常に動作します。しかし、いくつかのパフォーマンスの問題により、armv7 に最適化されたコードを使用したいと考えています。

LLVM-GCC 4.2 と LLVM CLang 2.0 のどちらのコンパイラを使用しても、常にコンパイル エラーが発生します。私は、LLVM-GCC 4.2 がこれらの ARM-NEON 固有の命令にアクセスする唯一の方法であることを理解しました (またはそう考えたほうがよいでしょう)。

EIGEN_DONT_VECTORIZE を設定しない (および -mfloat-abi=softfp -mfpu=neon を gcc に指定しない) と、次の gcc コンパイラ エラーが発生します。

src/m3CoreLib/Eigen/src/Core/arch/NEON/PacketMath.h:89: エラー: '__ extension__' の前に unqualified-id が必要です

「古い」gcc 4.2 の使用に関する問題と、新しいバージョンの gcc を使用するようにという推奨事項について読みました。よくわかりませんが、アプリストアの承認のため、これはオプションではないと思います. iPhone用にコンパイルするために他にできることはありますか? これを解決した人はいますか?

ありがとう、ケイ

4

1 に答える 1

1

さまざまなコンパイラ設定を何時間もいじった後、満足のいく解決策を見つけ、次の結論に達しました。

Eigen のテンプレート ライブラリ アプローチに関して、デバッグ設定とリリース設定の間には驚くほど大きな違いがあります。通常の最適化フラグを有効にしたリリース設定では、デバッグよりも20 倍から 40 倍高速にアプリケーションを実行できます。どの言語でもこれほどの違いは見たことがありません。私の経験からすると、通常は 1.5 ~ 3 です。

ベクトル化を強制することはまだできませんが、コードは EIGEN_DONT_VECTORIZE が定義された状態でのみコンパイルされますが、結果として得られるパフォーマンスは私のニーズに合っています。

于 2011-06-07T17:40:50.130 に答える