Subject | : Re^15: SAD Update. V1.0.10.2.3b. g95 compatible. |
Date | : 2008/02/23(Sat) 23:37:43 |
Contributor | : Akio Morita |
> 早くmain側にも反映させてください。 > g95サポート回りですか? 基本的には src/sim/fgetc_Dummy.f捨て捨てな点以外の内容は、 CVS MAIN trunkと同じですから、動作は変わりませんが? # API仕様的には、readstr()が EOF/Errorで戻ったときに呼び出し側で # bufferをクリアしているコードがあったので、readstr()側でクリアするように # 安全側に変更しています # リターンコードを確認して使っているコードに対しては、無駄な # white space fillingを行うことになりますが、不注意なコードが # readstr()呼び出し前の内容が未定な bufferを読み込むことを # 避けられます 現状の実装に関しては、こちらのbranchでも下記のような問題が山積みなので、 本格的な itfgetbuf_.cの使用は避けた方が良いと思っています # バックポートするなら、この辺の問題が片づいてからかなと思っています o 現状の src/itfgetbuf_.c + read(2)を使う場合の問題点 1. Read性能の劣化(試験環境で、読み込みスループットが 1/20〜1/10へ低下) * Character-by-characterで read(2)システムコールを発行するため 2. 同一Logical Unit Numberに対して Read[], Write[], SeekFile[]関数を 組み合わせて使用した場合の動作が不定となり保証できない(ファイルの部分書き換え等) * Write[]/SeekFile[]は、Fortran WRITE statement/FSEEK intrinsic(ベンダー拡張)経由で Fortran I/O Library内のファイル位置ポインタを更新するが、Read[]はKernelが管理する ファイル位置ポインタを見ている。 3. 本質的な問題の解決には、WRITE statement/FSEEK intronsicを使用している部分の 改修が必要。ただし、そこまで実装した場合、OPEN/CLOSEしか使わない Fortran I/Oの 存在意義がなくなる(open(2)/close(2)を直接呼び出す方が効率的になる) 実装上の問題は、 * READ statementよりも WRITE(lfno, ...)を使っている箇所の方が多い * File Descriptorで管理する場合は、実用的なI/O性能を達成には read/write buffering機構の実装が不可欠 ただし、ネットワークコード(socket API)等との相性は良い 特に、buffering機構を自前(SAD側)で実装した場合は、きめ細かな buffering制御が可能 (TCP/UDPOpenを使ったネットワークアプリケーションには有利?) * libcの stdioを利用するためには、SAD側のファイル記述子とFILE型へのポインタの 対応関係を管理する必要がある * 移植性/メモリ効率をそれなりに求めると、内部で動的なテーブルを管理する必要あり 現在予定しているバックポートは、以下の通り (しばらく、CVS MAIN trunkが安定していなかったので凍結中) 1. PRNG(Pseudo-Random Number Generator)の実装入れ替え o SEED変数の廃止(変数自体は残りますが、もはや動作に影響を与えません) o SEED FFSコマンドの廃止(SEED変数との名前空間衝突のため機能していなかったもの) o Random[]関数ファミリーの実装入れかえ * 追加関数 ListRandom[] 使用可能な PRNG pluginのリストを返す ParabolaRandom[] 区間(-1,1)の放物線分布乱数(*) UniformRandom[] 区間(0,1)の均一分布乱数(*) UniformRandom0[] 区間[0,1)の均一分布乱数(Random[]の別名) UniformRandom1[] 区間(0,1]の均一分布乱数(*) UniformRandom01[] 区間[0,1]の均一分布乱数(*) (*)は、PRNG pluginでのサポートは必須ではない * 仕様変更 SeedRandom[] 返り値が、現在の PRNG plguin選択状態と 選択中の PRNG pluginの内部状態を含む List型に変更される(旧仕様は、Real型) ただし、SeedRandom[]の戻り値(*)を保存し、再び SeedRandom[]の引数に与えた際に戻り値(*)を 返した状態へ復帰する点は変化なし String型を引数とした PRNG pluginの選択機能を追加 List型を渡しての内部状態の初期化機能を追加 FIXSEEDフラグ 保存されるのは、PRNG pluginの選択状態と保存時に 選択中だった PRNG pluginの内部状態だけです PUSHS_EED/POPS_EED/EXCGS_EED/PEEKS_EED FFSコマンド 保存されるのは、PRNG pluginの選択状態と保存時に 選択中だった PRNG pluginの内部状態だけです o 試験環境での試験状況 * 旧実装と互換の疑似乱数系列の生成性能に劣化は無い * RAD/FLUC付きの KEKB HER Trackingでは、同一の疑似乱数列を使えば コードの変更前後で粒子分布は一致する(HER Trackingで通過する コードパス上での変更は、動作を変えていない) * RAD/FLUC付き Trackingにて放射減衰後の粒子分布の統計量に PRNG plugin依存性が有ることが分っている 使用した粒子数(1000個)に依存した統計誤差の範囲か、疑似乱数列の 不備によるものかは現時点では不明 (理論的な平衡分布が分っているモデルによる検証が必要?) 2. CONVCASE/PRSVCASEフラグの実装 o FFSコマンドラインでの大文字・小文字自動変換機能の部分的抑制や停止をサポートします これにより、小文字を含む element name/patternを FFSコマンドラインで使用可能になります o 現状、PRSVCASEは全ての FFSコマンドをサポートしていないので、CONVCASEフラグのみ 先行してバックポートを実施するかも (主要コマンドDISP/FIT/FIX/FREE/COUP等はサポートしたが...)