[Armadillo:01996] Re: Armadillo300 の浮動小数点演算について

Masahiro Hanada email@hidden
2007年 9月 4日 (火) 17:21:12 JST


花田です。

TOGAWA Satoshi <email@hidden> wrote:

> Armadillo300を購入し、演算速度のテストを行っています。
> 2点ほど質問させてください。
> 
> 1)
> 現状では、CPUボードにFPUが付いていないため、浮動小数点演算は
> カーネルでのエミュレーションを行っていると思います。
> これを、いわゆる soft-float (gccで言うところの -msoft-float オプション)
> 対応にできる開発ツールの作成実績はないでしょうか?

現在のArmadillo開発環境はDebianと互換性のあるABIでfpa互換のhard-floatと
なっていますので、完全soft-floatなバイナリをリンク実行できません。

soft-floatデフォルトにしたコンパイラを作ること自体は可能です。
基本的にはクロスgccを--with-float=softで作成するだけです。
しかしながらこれを使って環境を構築する場合、glibcをはじめすべての
ライブラリについてもこのコンパイラで作り直す必要があります。

> 2)
> 演算を高速化する必要や精度の問題などから、doubleの数値のメモリ表現を
> バイナリ化してテーブルとして持っているプログラムがありました。
> このプログラムは、i386, SH3(little endian), 他社のARMボードでは
> 動作したのですが、Armadillo300では動作しませんでした。調べてみると、
> Armadillo300でのdoubleの表現は、他のものと、4バイト単位で逆になっている
> ようです。
> 
> 例えば、他のアーキテクチャ用のコンパイラで"151.3183"という定数を含んだ
> Cのソースファイルをコンパイル&アセンブルすると、オブジェクトファイルの
> 中に"4a23 837b ea2f 4062"というバイト列が見えるのですが、Armadillo300の
> 開発環境でコンパイル&アセンブルすると"ea2f 4062 4a23 837b"というバイト列が
> 見えます。
> 
> これは、どう解釈すればいいのでしょうか?
>   1. メモリ上でどう表現されるかはコンパイラの実装依存だから仕方ない。
>   2. Armadillo300のアーキテクチャがそうなっているから仕方ない。
>   3. その他

どれかというと、3になるでしょうか。

現在のarm開発環境での並びはarmのfpa互換のものです。
(Debianで採用されているarmバイナリはすべてこの並びになっています)
内部表現は浮動小数点演算のアーキテクチャ(vfpやMaverckCruncなど)に依存しますので、
種類によっては上記2パターン以外という可能性もあります。
(知っている限りでは、順並び・逆並び・エンディアンに依存するの3パターンです)


____________________________________________________

    花田 政弘 (はなだ まさひろ)

      (株)アットマークテクノ 開発部
        TEL: 011-207-6550    FAX: 011-207-6570
        URL: http://www.atmark-techno.com/

    E-mail: email@hidden
____________________________________________________




armadillo メーリングリストの案内