SAD部屋 - 開発メモ/64bit環境 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

!64bit環境での本質的問題
* 内部アドレス表現は、16GiBのアドレス空間しか扱えない
** real(8)配列'''rlist(*)'''の添字(integer型 -2G ~ 2G-1)
** '''0'''は割り当て失敗、負値は別の意味割り当てられている

!現行のWorkaround
* rlist(*)をFortran pointerとして定義し、最初に割り当てたヒープブロックを基準に先頭アドレスを調整する
* mmap(2)の拡張機能を使い'''16GiB'''の仮想アドレス空間を予約し、rlist(*)の予約領域内に割り当てる

!64bit環境のサポート法
!! 1. データサイズを一回り大きくする(コードには手を付けず解釈だけ変えて誤魔化す)
* '''REAL'''を4倍精度実数(''128bit'')
* '''INTEGER'''や'''INTEGER*4'''を''64bit''整数
* '''BYTE'''、'''CHARACTER'''や'''INTEGER*1'''を''16bit''整数
* 内部の文字列表現は、'''16bit'''整数を'''1文字'''とする
** UCS-2な内部表現を自然に導入する余地がある
** 最近の'''M17N'''のトレンドを考えると、8倍精度実数/128bit整数/UCS-4な文字表現の方が良いかも(IPv6アドレスが整数型に直接収容できるし)
Fortran I/O(READ/WRITE文)を対応させる必要があるので、コンパイラ側の対応、若しくは改造が必須

!! 2. 真面目に、内部アドレス表現を 64bit化する(SADの Fortranメインコードを書き直す)
* # アドレス表現を含む内部APIをポインタベースのAPIに置き換える
# アドレス表現を含む内部
データ構造が構造へのアクセスに抽象化層を挟みコード中で隠蔽されていないのでとても大変すべて抽象化層経由に書き換える
# 抽象化層で隠蔽されたアドレス表現を含む部データ構造を再設計・再実装する
* データ構造のまともな資料が現存しない・実装コードからの操作が一貫していない(旧い・バグったコードが残っている)
* 改修後のコードの動作を検証するテストセットが存在しないので、検証が存在しない(変更後の動作検証が大変)

!! 3. 古くさい Fortranコードを捨てて、もっと保守性の良いコードをfrom scratchで書き起こす
* 車輪の再発明
** J-PARCでSADScriptインタプリタ部の Javaによる再実装をやっているらしいので、注意しないと'''車輪の再再発明'''になる''罠''
* 仕様書やまともなテストセットが現存しないので、互換性保持が困難
* 将来に渡って使い続けるなら書き直す価値はある
** どうせやるなら、コードとデータ構造の整理と名前空間の分離、各種の機能のプラグイン化とかが欲しところ
* 必要なコストは、SAD誕生から現在までに投入された'''人月'''が目安
** 開発期間を1986年〜2006年、平均人数を4人と仮定して、'''960人月'''ぐらい?
** 1年を目安にすると、単純計算で''80''人必要
** SADの開発者はフルタイムでは無いはずなので、フルタイムで働けば半分以下には出来そう...
* 昔提唱された SADの改良プロジェクトはどうなったんだw
** O氏のSAD++
** Y氏のPySAD