ToDo:
itmmapp経由でrlist内に割り当ててる動的配列utwissの実装をFortran pointerベースの実装に置換した
tffsmatch内部に残っているのは、ifqu/ifqu0でindexしている、 実数型2次元配列 qu(nqcol,nvar)である
rlistから参照するコードなので、読みづらい…
関連するコードフロー内で、nvarは定数であり、nqcolはtffscale等で動的に決定され最大値はmaxcond(正確にはmaxcondを越えるとエラー)
技術的には、条件毎の値を保管する配列が長さmaxcondで確保されたものが渡ってくる事に起因する
Fortran pointer渡しにすれば動的に拡張可能となるが、関連するfunction/subroutineのインターフェースを 明示的に宣言することが必要(読み出し・格納のみでリサイズを行わない場合は、宣言なしの配列渡しが可能 Ex. tfshow)
配列渡しによる参照側が(nqcol,nvar)で参照しているので、nqcolが変更された場合アドレッシングレイアウトが変更されるために、アドレッシングの整合性を維持するためにnqcolが減少するケースでもpointerの再割り当てが必要になる
また、mmap_utilsのAPI設計上、munmapに必要な割付長が配列sizeに相関する必要がある
可変長割り当てを考慮すると(nvar,nqcol)の方が良いが、バックエンドに存在する線形代数ルーチンでJacobianを解く際のインターフェースに依存性があり転置するのは面倒が多い
メモリ再割り当て動作を減らすには、mmap_shared/munmap APIを直に使い自前でpointer割り当てを管理するのが最適?
2種類の導関数計算エンジンの外側で、配列割り当てを行う形にコードを整理すべきと思われる
必要なもの
カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記