トップ «前の日記(2017-11-14) 最新 次の日記(2017-11-19)» 編集

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|

2017-11-16 [長年日記]

_ [SAD]tfeintfについて

要素毎に適用可能な数学関数のアルゴリズムドライバ部を提供する関数

  • 引数
    • fun - 実引数・実値な関数
    • cfun - 複素引数・複素値な関数
    • it, ia, v - SAD引数の参照
    • it1, ia1, v1 - SAD戻り値の参照
    • cmpl - 複素数を返すかを示す真偽値
      • falseになっている事例は、Abs, Arg, Gamma0
    • rmin, rmax - 実軸上で funを適用できる範囲
    • ir - リターンコード(0: 成功/-1: 失敗)

cfunに関しては特殊なdummy関数tfdummyを呼び出すケースのコード が含まれるが、複素関数が未実装なケースでir=-1を返すためのもので、適用対象は Gamma0 のみ

cmplが偽の場合、cfunの戻り値は実部のみが返される

SAD引数に対する処理

  1. Real型かつ区間[rmin, rmax]内の場合、funを呼び出す
  2. Number型(Real or Complex)の場合、cfunを呼び出す
  3. List型の場合、再帰処理する
    • 第一階層がNumber型の場合の処理は、直接fun/cfunを呼び出して、再帰呼び出しを抑制している
    • List構築はSAD stack上で行い、真偽値d(Real型を含む), vv(リストを含む)を管理し、itfcomposecへ渡している
    • stack depth checkを行っていない(要対処)

引数のうち、fun,cfun,cmpはコンパイル時に確定するので、テンプレートからコード生成すると分岐処理と関数の間接呼び出しが削減出来る。特に、funcfunが組み込み関数の場合、機械語命令への展開・最適化が期待できる。

テンプレート展開するデメリットは、リスト処理を含んだコードのバリエーションが関数毎に生成されるので、その部分のキャッシュヒット率が低下する懸念がある。影響の大きさは、リストに対する評価頻度に依存する。itfunalocも含めた最適化を行いtable dispatchするケースでは、call/ret削減による効果が大きいと思われる

テンプレート展開自体は、開発時のSAD数学関数追加時にしか行われないので、shell script等の簡易ツールで賄える

直接SADScript評価器からtable dispatchを行うには、entryが2種類必要(SADScript標準インターフェースと再帰用)となるが、function tableを改修するのであれば、再帰的な数学関数用のタイプを用意してしまいtable dispatcher側で処理してしまうのが良いかも

テンプレート展開エンジンに必要な機能

  • fun,cfunの定義
    • 必要に応じて、module参照を行うuse節を生成(必要ならonly修飾を行う)
    • 必要に応じて、呼び出し型宣言を行う
  • 定義した関数をfunction tableに登録するためのメタデータ(SADシンボル名・関数形式・関数シンボル)の生成
    • 生成コード内にコメント形式で埋め込み、後処理で収集する?

2017/11/20追記

cfuntfdummyが設定されるケースも、テンプレート展開時に最適化可能で、ダミー関数の呼び出し自体を削除出来る


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