1

現在、GCC 3.3.3 ベースのクロス コンパイラを使用して、Xscale PXA270 開発ボード用にコンパイルしています。しかし、Linux (または Windows) で動作する Xscale コンパイラが他にあるのではないかと思っていました。私が使用しているクロス コンパイラのセットアップは、ターゲット デバイスで恐ろしいパフォーマンスを発揮します。適切な量の数学演算を実行する特定のプログラムは、Xscale プロセッサでは、同様のクロックの Pentium 2 よりも 10 倍から 20 倍悪いパフォーマンスを示します。パフォーマンスに役立つ可能性があるGCCベースのコンパイラで設定する必要がある特定のコンパイラフラグがありますか?

ありがとう、ベン

4

3 に答える 3

5

Pentium 2 とは異なり、XScale アーキテクチャにはネイティブの浮動小数点命令がありません。つまり、整数命令を使用して浮動小数点演算をエミュレートする必要があります。

パフォーマンスを向上させるために、いくつかのことを試すことができます。

  • 可能であれば、浮動小数点の使用を最小限に抑えます。場合によっては、単純な整数または固定小数点の計算を代用できる場合があります。
  • 可能であれば値のテーブルを事前計算することにより、速度とトレードオフのメモリ。
  • 後者の精度を必要としない計算では、sfloatの代わりにs を使用します (関数の C99バージョンの使用を含む)。doublefloatmath.h
  • 整数型と浮動小数点型の間の変換を最小限に抑えます。
于 2010-01-21T04:58:23.650 に答える
4

はい、FPU がないため、浮動小数点は整数演算で行う必要があります。ただし、これを行うには 2 つのメカニズムがあり、一方は他方よりも 11 倍高速です。

GCC ターゲット arm-linux-gnu には通常、ARM の最初の FPU である「FPA」のコードに実際の浮動小数点命令が含まれています。これらは不正な命令トラップを引き起こし、カーネルでキャッチされてエミュレートされます。これは、コンテキストの切り替えが原因で非常に遅くなります。

-msoft-float は代わりにライブラリ関数 (libgcc.a 内) への呼び出しを挿入します。これにより、カーネル空間への切り替えが回避され、エミュレートされた FPA 命令よりも 11 倍高速になります。

使用している浮動小数点モデルについては言及しません - -msoft-float を使用してユーザーランド全体を既に構築している可能性がありますが、オブジェクト ファイルに FPA 命令が含まれていないことを確認する価値があるかもしれません。次の方法で確認できます。

objdump -d file | grep '<space><tab>f' | less
file、コンパイラが出力するオブジェクト ファイル、実行可能ファイル、またはライブラリです。すべての FPA 命令は で始まりますがf、他の ARM 命令では始まりません。<control-V><tab>これらは実際のスペースとタブ文字であり、シェルを通過してタブ文字を取得する必要がある場合があります。

FPA insns を使用している場合は、-msoft-float を使用してユーザーランド全体をコンパイルする必要があります。

これらの問題に関する最も包括的な詳細情報はhttp://wiki.debian.org/ArmEabiPortであり、主に 3 番目の代替手段に関係しています:arm-linux-gnueabiコンパイラを使用する、gcc-4.1.1 以降で利用可能な新しい代替 ABI であり、これには異なる特性。詳細については、ドキュメントを参照してください。

于 2010-01-21T14:56:48.980 に答える
2

「その他の xscale コンパイラ」

オープン ソース: llvm と pcc。そのうち llvm は最も Linux にやさしく機能的で、gcc フロントエンドも備えています。由緒ある Portable C Compiler の子孫である pcc は、より BSD 志向のようです。

商用: Keil コンパイラ (ARM Ltd が所有) は、GCC よりも高速なコードを生成するようですが、FPU の欠如が大きな影響を与えることはありません。

于 2010-01-21T15:08:52.773 に答える