トップ «前の日記(2021-05-17) 最新 次の日記(2021-05-20)» 編集

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|

2021-05-19 [長年日記]

_ [SAD]sort再実装の残作業

次に作るもの

  • sort済みlist containerへの1要素挿入 tfinsertsort
    • 挿入元と出力がlist containerなのでインタプリタヒープ断片化の原因となり得るが、それを変更するには構築途上のreference container型を導入する必要がある
    • ソースコンテナ内のNull[...]要素を展開する機能がある
      • テンポラリコンテナへのシーケンス展開エンジンが必要
  • 整数配列へのインデックスソート tfsorti (tfsortsymbolstk実装用)(r6179にて実装 2021.05.20)
  • 実数配列へのインデックスソート spsort (spkick実装用)(r6182にて実装 2021.05.20)
  • Intersection/Complementの再実装
    • 現行実装には問題点あり
      • 3要素以上は、再帰呼び出しにて実装している (スタック消費)
      • Intersectionに関しては、サイズ最小のリストを種にすべき
      • 積集合・和集合の抽出に使う整列済みリストは、union_listで得られるリストコンテナを使っている (SADインタプリタヒープを消費・断片化している)
        • 再帰呼び出しでは、一時割り当てしたリストコンテナを再帰的に生産するので、ワーストケースのインタプリタヒープ消費は、種リストの長さNに対して $O(N^2)$ (再帰毎にリストが短くなるケースが最悪)
      • Intersection/Complementどちらの場合も、出力候補となるリストの長さは単調現象となるので、一時領域の再割り当てを行う必要は無い

性能に関しては、オリジナル実装では実数リスト等のケースで比較ルーチンがソートエンジン内に展開されているのに対して、qsort(3)等では関数呼び出しが必須となる点は不利だが、実数リストコンテナではインデックスソートではなく、出力配列を直接スワップすることで間接参照コストを低減する最適化を行ったため、N = 2^24でのテストでは、整列・逆整列・準整列・ランダムの各パターンで、オリジナル実装よりも概ね良好な性能が得られている

ISO C++がテンプレート版sortがつかえれば、比較ルーチンのinline展開により更なる改善が得られると思われる


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