Skip to content

[P2] per-protocol result.cc を撲滅し initResult を共通化する #101

@thawk105

Description

@thawk105

親イシュー: #28 / 旧 #33([P2] per-protocol ボイラープレートを共通化する)を分割したうちの 1 つ。

現状(2026-05-15)

  • cc/<protocol>/result.cc が10個存在する(cicada, d2pl, ermia, mocc, mvto, oze, si, silo, ss2pl, tictoc)。各ファイルは8〜14行で、中身は
    • alignas(CACHE_LINE_SIZE) std::vector<Result> <Proto>Result; のグローバル変数宣言
    • void initResult() { <Proto>Result.resize(...); }
      のみ。プロトコル間の違いはグローバル変数名だけSiloResult / CicadaResult / ...)。
  • Result クラス本体・全 display* / addLocal* 関数は [P0] common/ を静的ライブラリ化する #30common/result.cc + include/result.hh に共通化済み(ccbench_common STATIC ライブラリ)。型と集計関数の共通化は完了している。残っているのは per-protocol のグローバル変数の殻だけ。
  • initResult()resize 引数がプロトコルによって揺れている: ss2pl / d2pl / tictoc は FLAGS_thread_num、その他は TotalThreadNum
  • 各ワークロードエントリポイント(ycsb_*.cc 等)の main() / worker()<Proto>Result[thid] という名前でこのグローバルを直接参照している。
  • cc/<proto>/include/result.hhextern std::vector<Result> <Proto>Result;extern void initResult(); を宣言しているだけ。

概要

per-protocol result.cc<Proto>Result グローバル変数と initResult() を撲滅し、共通の結果ベクター + 初期化関数に統合する。グローバル変数名がプロトコルごとに異なるという理由だけで #30 の共通化から取り残された残骸を片付ける。

やること

  • 共通の結果ベクター(例: ccbench::GlobalResults のような単一のグローバル、または common/result.hh 内の共通シンボル)と共通 initResult()common/result.cc / include/result.hh に定義する
    • resize 引数の揺れ(FLAGS_thread_num vs TotalThreadNum)を調査し、正しい一本化方針を決める(バッチスレッドを持つプロトコルは TotalThreadNum が正しいと思われるが要確認)
  • 各ワークロードエントリポイント(cc/*/{ycsb,tpcc,bomb,sbomb,dbomb}_*.cc および cc/*/{silo,cicada,...}.cc)の <Proto>Result 参照を共通シンボルへ置換する
  • cc/<protocol>/result.cc(10個)を削除する
  • cc/<protocol>/include/result.hhextern 宣言を削除し、必要なら共通ヘッダの include に置き換える
  • cc/<protocol>/CMakeLists.txtccbench_add_protocol(... SOURCES ... result.cc ...) から result.cc を外す

完了条件

  • cc/<protocol>/result.cc が削除されていること
  • 共通の結果ベクター・initResult() が1箇所に定義されていること
  • 全プロトコルのビルドが通ること
  • CI が通ること

備考

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions