[P7] instruction/ を microbench/ にリネームしオプトインで CMake 化 - #107
Merged
Conversation
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
instruction/は「特定の命令・操作のコストを測る」マイクロベンチ群だが、名前が用途を表さず独自 Makefile ベースで CMake に載っていなかった。#85 の
調査結果 (確定方針) に従い、
microbench/にリネームしてファイル単位で仕分け、
-DCCBENCH_BUILD_MICROBENCH=ONのオプトインでトップレベル CMake に接続する。
Closes #85やったこと
リネーム + ファイル仕分け
instruction/→microbench/(git mvで履歴を保持)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.cc・include/検索パス・各依存を内包) にリンク、set_compile_options()で-Wall -Wextra -Werrorを適用。cpu.hh/util.hhの#ifdef Linux経路のため-DLinuxを target スコープで付与。CMakeLists.txtにoption(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)、catchconst-ref 化xoroshiro.cc: 未使用マクロ・未使用 include を削除membench.cc: 未使用関数put8/writeFromCachelineを削除。_mm_clwb/_popcnt64用に
-mclwb -mpopcntを付与 (旧-march=nativeの再現可能な代替).clang-formatに整形 (旧instruction/は全体一括 reformat の対象外だったため)
docs
microbench/README.mdを刷新 (各ベンチが測る対象・オプトインビルド手順・legacy/)docs/build_{ja,en}.mdに-DCCBENCH_BUILD_MICROBENCH=ONを追記docs/architecture_{ja,en}.mdのinstruction/参照を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/MakefileのINST_SRCS*行はこのリネームで dead になるが、common/Makefileの扱いは別イシュー #87 のスコープのため本 PR では触っていない。dead な行が
残るが無害で、#87 の別 PR が対応する。