Conference Room SAD
[thread display] [new arrival display] [word search] [past log] [管理用]

Subject SAD 64bit化の可能性
Date: 2008/09/17(Wed) 01:59:36
ContributorAkio Morita

以下の議論は、可能性の議論であって実装をするという話ではありませんので、
コードをくれと言われても何も出ません

Fortran2008規格には、I/Oの encodingという概念が導入されているようで、
gfortran 4.4では UTF-8 encodingのサポートが実装されました。これに伴い、
内部encodingとしてUCS-4(kind = 4なcharacter)が使用可能になっています。

従って、
 * 8倍精度浮動小数点(kind = 32 real)
 * 128bit整数(kind = 16 integer)
 * UCS-4文字(kind = 4 character)
を組み合わせると、real = 2*integer = 8*characterの関係を維持したまま、
LP128環境をサポート可能になるはずです。
問題は、8倍精度浮動小数点なんてものをハードウェアで実装した計算機が手軽に入手できない点にあります。
文字列格納の効率は1/4になりますが、その代わりにI18Nな文字列操作を自然に実装可能になります。

SunのSPARCやIBMのPOWERでは、IEEE754rのドラフトベースで4倍精度浮動小数点を
ハードウェアで実装しているらしいので、次のような実装で 64bitネイティブなSADを構築できる
可能性があります。

1. 8倍精度realを 4倍精度complexに置き換える
   複素数絡みのコードは、実数絡みのコードに比べれば局所的であり
   複素数は実数の自然な拡張になっている(可換体という意味で)
   * 4倍精度複素浮動小数点(kind = 16 complex)
   * 128bit整数(kind = 16 integer)
   * UCS-4文字(kind = 4 character)
   問題: INF * 1などで内部的に複素数として計算するとINF+NAN Iになってしまう点など...

2. コンパイラに手を入れてUCS-2文字(kind = 2 character)をサポートする
   * 4倍精度浮動小数点(kind = 16 real)
   * 64bit整数(kind = 8 integer)
   * UCS-2文字(kind = 2 character)
   問題: UCS-2では、Unicodeの全ての文字を使おうとするとサロゲートペアが必要になり
           可変長encodingになってしまう

注意点: 新しい規格を使う話なので、Fortran77/90/77/2003コンパイラな
           環境を切り捨てる必要があります。


- 関連一覧ツリー (Click ▼ to display all articles in a thread.)