親イシュー: #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/ を静的ライブラリ化する #30 で common/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.hh は extern std::vector<Result> <Proto>Result; と extern void initResult(); を宣言しているだけ。
概要
per-protocol result.cc の <Proto>Result グローバル変数と initResult() を撲滅し、共通の結果ベクター + 初期化関数に統合する。グローバル変数名がプロトコルごとに異なるという理由だけで #30 の共通化から取り残された残骸を片付ける。
やること
完了条件
cc/<protocol>/result.cc が削除されていること
共通の結果ベクター・initResult() が1箇所に定義されていること
全プロトコルのビルドが通ること
CI が通ること
備考
親イシュー: #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/ を静的ライブラリ化する #30 でcommon/result.cc+include/result.hhに共通化済み(ccbench_commonSTATIC ライブラリ)。型と集計関数の共通化は完了している。残っているのは per-protocol のグローバル変数の殻だけ。initResult()のresize引数がプロトコルによって揺れている: ss2pl / d2pl / tictoc はFLAGS_thread_num、その他はTotalThreadNum。ycsb_*.cc等)のmain()/worker()は<Proto>Result[thid]という名前でこのグローバルを直接参照している。cc/<proto>/include/result.hhはextern 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_numvsTotalThreadNum)を調査し、正しい一本化方針を決める(バッチスレッドを持つプロトコルはTotalThreadNumが正しいと思われるが要確認)cc/*/{ycsb,tpcc,bomb,sbomb,dbomb}_*.ccおよびcc/*/{silo,cicada,...}.cc)の<Proto>Result参照を共通シンボルへ置換するcc/<protocol>/result.cc(10個)を削除するcc/<protocol>/include/result.hhのextern宣言を削除し、必要なら共通ヘッダの include に置き換えるcc/<protocol>/CMakeLists.txtのccbench_add_protocol(... SOURCES ... result.cc ...)からresult.ccを外す完了条件
cc/<protocol>/result.ccが削除されていることinitResult()が1箇所に定義されていること備考
common/runner.hhテンプレート化)。本イシューを先に片付けると、[P2] ワークロードエントリポイント main() を common/runner.hh テンプレートに集約する #102 の runner テンプレートが<Proto>Resultという名前に依存せずに済む。