トップ «前の日記(2018-11-26) 最新 次の日記(2018-11-30)» 編集

Orz日記 by Akio Morita

ToDo:

  • 15 SAD Fit[]回りの障害事例の解析
  • 10 smart pointer版PEGクラスの再実装(Left Recursionまわり)
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|06|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|07|08|09|10|11|12|
2013|01|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|06|07|08|10|12|
2016|01|02|03|05|06|08|10|11|
2017|01|02|03|04|05|06|07|09|10|11|12|
2018|01|02|03|04|06|07|08|09|10|11|12|
2019|01|03|04|05|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

2018-11-28 [長年日記]

_ [SAD]OpenShared再実装

辞書を使ったpack表現の圧縮を実装した

他のプロセスとの干渉等が原因で、辞書の拡張に一時的に失敗した後に、別のオブジェクト挿入時に拡張に成功するとその間のオブジェクトの登録状態が異なる状態(非決定論的)になるので、拡張失敗時には辞書サイズを凍結するように変更した

さらに、メモリ使用量とテーブル検索時間を制限する為に、辞書サイズに上限を設定した

一応、問題なく動くところまで来た

_ [SAD]SAVE属性

古いFortranコードに、対象を制限しない形でSAVE属性を宣言しているものがある

一部のコードは、明かに状態を保持していないので、削除すべきか?

これが原因で、特定のコンパイラ系でエラーになるっぽぃ

  • gfortran 7.3.1 2018/11/22(FreeBSD ports/lang/gcc7-devel)は OK
  • gfortran 7.3.1 2018/03/03(CentOS 7/devtoolset/Red Hat 7.3.1-5)は NG

エラーメッセージは、COMMON属性とSAVE属性を同時に設定出来ないというもので、内容から考えて、環境依存最適化のレベルの問題では無いと思われる

問題が出ているgfortranは、開発途上の古いsnapshotなので、特定revisionでのregressionの可能性が高い、さもなくばRed Hatが変なパッチを当てている?

_ [SAD]Fortranコード上の共有メモリ使用についての考察

危険なケース

  • 書き込むデータがバス上のアライメントを跨いでいる
    • write/write競合時にデータを破壊する
  • on the flyの読み書き
    • read/write競合時に存在しない値を読み出す
    • write/write競合時にデータを破壊する

安全性を保証するには…

  • locked read/write
    • inter-process lockの実装コストが高い
  • バスアライメントレベルでの領域分割(write/write干渉の排除)
    • write combinedまで考慮するとキャッシュラインレベルで分離すべき?
    • 配列添字の飛び越し走査だと保証するのは難しい
  • atomic read/write
    • ISO C/C++的には実装できるが、ISO Fortran内の命令生成は保証が無い?

結局、ISO Fortran的には、master-worker間の通信に限定して、worker毎に個別の共有メモリを割り当てるのが無難という結論に…


カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記