Skip to content

[P7] instruction/ を microbench/ にリネームしオプトインで CMake 化 - #107

Merged
thawk105 merged 6 commits into
masterfrom
p7-instruction-to-microbench
May 15, 2026
Merged

[P7] instruction/ を microbench/ にリネームしオプトインで CMake 化#107
thawk105 merged 6 commits into
masterfrom
p7-instruction-to-microbench

Conversation

@thawk105

Copy link
Copy Markdown
Owner

概要

instruction/ は「特定の命令・操作のコストを測る」マイクロベンチ群だが、
名前が用途を表さず独自 Makefile ベースで CMake に載っていなかった。#85
調査結果 (確定方針) に従い、microbench/ にリネームしてファイル単位で
仕分け、-DCCBENCH_BUILD_MICROBENCH=ON のオプトインでトップレベル CMake に
接続する。

Closes #85

やったこと

リネーム + ファイル仕分け

  • instruction/microbench/ (git mv で履歴を保持)
  • 生かす 6 本 (CMake 化): rdtscBench.cc / pow_test.cc / xoroshiro.cc
    / fetch_add.cc / zipf_dist_test.cc / membench.cc (+ 補助 include/common.hh)
  • microbench/legacy/ に隔離 (CMake 非対象、ビルドされない):
    cache-test.cc / mcslock_with_timeout.c / masstree_simple_test/
  • 削除: 特定ホスト名 (chris41/dbs11) 依存の script/*.sh / test_*.sh
    および旧 instruction/Makefile

オプトイン CMake 化

  • cmake/MicrobenchHelpers.cmake を新設。ccbench_add_microbench(<name> SOURCES ...)
    を定義し、ccbench_add_protocol() と同じ宣言的スタイルで ccbench_common
    (= common/util.ccinclude/ 検索パス・各依存を内包) にリンク、
    set_compile_options()-Wall -Wextra -Werror を適用。
    cpu.hh/util.hh#ifdef Linux 経路のため -DLinux を target スコープで付与。
  • トップレベル CMakeLists.txtoption(CCBENCH_BUILD_MICROBENCH ... OFF)
    追加し、ON のときだけ add_subdirectory(microbench)デフォルトビルドと
    CI には一切影響しない

ソース補修 (-Werror 警告ゼロ化、CI と同じ GCC 13 で確認)

  • pow_test.cc: catch(std::bad_alloc) を const-ref 化、未使用 argc/argv 削除、
    volatile sink で最適化除去を防止
  • zipf_dist_test.cc: VLA を std::vector に置換 (-Wvla)、catch const-ref 化
  • xoroshiro.cc: 未使用マクロ・未使用 include を削除
  • membench.cc: 未使用関数 put8/writeFromCacheline を削除。_mm_clwb/_popcnt64
    用に -mclwb -mpopcnt を付与 (旧 -march=native の再現可能な代替)
  • 生かす 6 本をリポジトリ直下の .clang-format に整形 (旧 instruction/
    全体一括 reformat の対象外だったため)

docs

  • microbench/README.md を刷新 (各ベンチが測る対象・オプトインビルド手順・legacy/)
  • docs/build_{ja,en}.md-DCCBENCH_BUILD_MICROBENCH=ON を追記
  • docs/architecture_{ja,en}.mdinstruction/ 参照を microbench/ に更新

ビルド確認 (CI と同じ GCC 13)

  • cmake -S . -B build (オプション OFF) → 通り、microbench/ ターゲットは
    生成されない (CI 時間は増えない)
  • cmake -S . -B build -DCCBENCH_BUILD_MICROBENCH=ON → 6 本すべて 警告ゼロ
    でビルド成功。rdtscBench / xoroshiro / zipf_dist_test の smoke run も確認。

スコープ外 (#87 に委ねる)

common/MakefileINST_SRCS* 行はこのリネームで dead になるが、common/Makefile
の扱いは別イシュー #87 のスコープのため本 PR では触っていない。dead な行が
残るが無害で、#87 の別 PR が対応する。

thawk105 added 6 commits May 15, 2026 01:55
instruction/ は「特定の命令・操作のコストを測る」マイクロベンチ群だが、
名前が用途を表しておらず CMake にも載っていなかった (#85)。用途が一目で
分かる microbench/ にリネームし、調査結果 (#85 本文) の仕分け表に従って
ファイルを整理する。

- instruction/ -> microbench/ (git mv で履歴を保持)
- 陳腐化・ビルド不能のものを microbench/legacy/ へ隔離 (CMake 非対象):
  cache-test.cc / mcslock_with_timeout.c / masstree_simple_test/
- 特定ホスト名 (chris41/dbs11) 依存の script/*.sh・test_*.sh は削除
- 旧 instruction/Makefile は CMake 化に伴い削除

Refs #85
instruction-cost マイクロベンチを CMake から到達可能にする (#85)。
独自 Makefile を捨て、プロトコルの ccbench_add_protocol() と同じ宣言的
スタイルのヘルパを新設する。

- cmake/MicrobenchHelpers.cmake: ccbench_add_microbench(<name> SOURCES ...)
  を定義。ccbench_common (common/util.cc・include/ の検索パス・各依存を
  内包) にリンクし、set_compile_options() で -Wall -Wextra -Werror を適用。
  cpu.hh/util.hh の `#ifdef Linux` 経路のため -DLinux を target スコープで付与
- microbench/CMakeLists.txt: 生かす 6 本を ccbench_add_microbench() で宣言
- トップレベル CMakeLists.txt: option(CCBENCH_BUILD_MICROBENCH ... OFF) を
  追加し、ON のときだけ add_subdirectory(microbench)。デフォルトビルドと
  CI には一切影響しない

Refs #85
CMake ターゲット化した 6 本は protocol と同じ -Wall -Wextra -Werror に
乗るため、CI で落ちないよう警告を潰す (#85)。GCC 13 (CI と同一) で確認。

- pow_test.cc: catch(std::bad_alloc) を const-ref 化 (-Wcatch-value)、
  未使用の argc/argv を削除、最適化で消えないよう volatile sink を追加
- zipf_dist_test.cc: VLA (uint64_t Ctr[LENGTH]) を std::vector に置換
  (-Wvla)、catch を const-ref 化、引数チェックを argc != 4 に厳密化
- xoroshiro.cc: 未使用マクロと未使用 include (util.hh) を削除
- membench.cc: 未使用関数 put8 / writeFromCacheline を削除
  (-Wunused-function)。_mm_clwb / _popcnt64 用に -mclwb -mpopcnt を
  ccbench_add_microbench の COMPILE_OPTIONS で付与 (旧 -march=native の代替)
- ccbench_add_microbench に COMPILE_OPTIONS 引数を追加

Refs #85
- microbench/README.md: 旧 4 行見出しを刷新。各ベンチが何を測るか・
  -DCCBENCH_BUILD_MICROBENCH=ON でのビルド手順・legacy/ の説明を記載
- docs/build_{ja,en}.md: -DCCBENCH_BUILD_MICROBENCH=ON のオプトインを
  ccache 説明の直後に 1 行追記 (_ja/_en セット更新)

Refs #85
旧 instruction/ は独自 Makefile の clang-format -style=Google で整形され
ており、リポジトリ全体の一括 reformat (e6abd29) の対象外だった。CMake 化で
CI の clang-format チェックジョブに乗るため、リポジトリ直下の .clang-format
に合わせて整形する。整形のみで挙動の変更はない。

Refs #85
instruction/ -> microbench/ のリネーム (#85) に伴い、ディレクトリ構成の
記述を更新。オプトインビルドである旨も併記する。_ja/_en セット更新。

Refs #85
@thawk105
thawk105 merged commit 49475eb into master May 15, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant