[Suzaku:00397] Re: suzaku-v の浮動小数点について

Suzuki, Ryouzaburou email@hidden
2005年 8月 22日 (月) 10:20:38 JST


<email@hidden> の、
   "[Suzaku:00395] Re: suzaku-vの浮動小数点について" において、
   "Yasushi SHOJI <email@hidden>"さんは書きました:

> At Thu, 18 Aug 2005 12:10:11 +0900,
> 村上 健次 wrote:
> > 
> > 以前の話となってしまいますが、浮動小数点の対応ですが、
> > 進んでいますでしょうか?
> 
> ごめんなさい。遅れています。2.6系で float/doubleの対応を行う予定ですが
> よいでしょうか? 2.4系が必要ですか?
> --
>          yashi
シンビーの鈴木です。

もしかしたら、以前に議論済みかもしれませんが、、、個人的な意見を
書かせていただきます。

カーネルによる「float/doubleの対応」の事だと思いますが、どうなん
でしょう?個人的には Linux としては必要だと思いますが、組み込み
という面を考えるとアプリケーション側は no-fpu でコンパイルするほ
うがよいと思います。

no-fpu での gcc/glibc 等の環境の構築は crosstool で作ることが出
来ます。
http://www.penguinppc.org/dev/crosstool.php

sh demo-ppc405.sh

を使えば作れます。必要なファイルを方々からインターネット経由でと
ってこようとするので注意が必要です。このシェルを動かすのに環境変
数の設定もした気がするけど、ちょっとわすれちゃいました。

+++++++
FPU を使ったプログラムを 405 系のコアで動かすと、

1) FPU 命令実行時に例外が発生
2) カーネル内で例外処理に対応。FPU の動作をエミュレートする
3) アプリケーションに処理が戻る。アプリケーション側では FPU が無
かったことを意識しないですむ。

という処理になるかと思います。当然、本来不必要な例外処理を通るの
で、全体としてはパフォーマンスが落ちると思います。浮動小数点演算
ではパフォーマンスが重要かと思いますので、-mno-fpu オプションで
コンパイルし、FPU を使わないようなアプリケーションにする方がよい
と思います。

カーネルが FPU をエミュレートするのは互換性のためだと思います。
例えば、FPU を使った実行オブジェクトしかないとか、なんらかの都合
でリコンパイルする手間が大変あるいはコストがかかる、などの場合に、
カーネルが FPU をエミュレートしてくれると大変助かります。

もし、全部リコンパイル可能な環境があるなら、-mno-fpu を個人的に
はお勧めします。まぁ、技術的以外の諸事情で使えないという話はよく
あるので、なんとも言えませんが。

+++++++
ところで、2.4 系のカーネルソースを読むとあたかも FPU が無いとき
の処理があるように見えるのですが、これはちゃんと動いてないようで
すね。なぜでしょう?405 系の先祖はどうやら MontaVista の IBM の
ボード用にポーティングしたもののようですが、オリジナルの移植ミス
ですかね?それとも、ソースだけあって、中途半端なものが配布されて
いる PPC 全体の問題なのでしょうか?

Virtex-4 になると、浮動小数点のコアが FPGA で提供されるようです。
非常に興味深いところです。



--
鈴木量三朗@東京
email@hidden




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