Subject | : SAD 64bit化の可能性 |
Date | : 2008/09/17(Wed) 01:59:36 |
Contributor | : Akio 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コンパイラな 環境を切り捨てる必要があります。