BenchKit は、複数のアプリケーションを多拠点環境で継続的にベンチマーク実行し、その結果を収集・公開するための CI パイプラインフレームワークです。
📋 新しいアプリケーションの追加方法: ADD_APP.md を参照してください。
🔧 システム追加時のトラブルシューティング: TROUBLESHOOTING_SYSTEMS.md を参照してください。
- 複数のコード(10〜50程度)を複数の拠点・システム(10〜30程度)で継続ベンチマーク実行
- ビルドと実行の分離・統合に対応(クロスコンパイルやJacamar-CI利用)
- サイト依存の環境条件への対応
- ベンチマーク結果の保存・可視化・性能推定
benchkit/
├── programs/
│ └── <code名>/
│ ├── build.sh # システム別ビルドスクリプト
│ ├── run.sh # システム別実行スクリプト
│ └── list.csv # ベンチマーク実行条件定義
├── result_server/
│ ├── routes/
│ │ ├── receive.py # ベンチマーク結果(JSON)受信
│ │ ├── results.py # ベンチマーク結果表示
│ │ └── upload_tgz.py # 詳細データ(TGZ)受信・UUID連携
│ ├── templates/ # Webテンプレート
│ ├── utils/ # システム情報管理
│ └── app.py # Webサーバメイン
├── scripts/
│ ├── matrix_generate.sh # CI YAML生成スクリプト
│ ├── job_functions.sh # 共通関数定義
│ ├── result.sh # 結果JSON変換
│ ├── send_results.sh # 結果転送
│ ├── wait_for_nfs.sh # NFS同期待機
│ └── test_submit.sh # テスト実行用
├── .gitlab-ci.yml # メインCI定義
├── system.csv # 実行システム定義
├── queue.csv # キューシステム定義
└── README.md
programs/<code>/list.csv,system.csv,queue.csvを読み込みscripts/matrix_generate.shにより.gitlab-ci.generated.ymlを自動生成- クロスコンパイル・ネイティブコンパイルの2モードに対応
| モード | 実行内容 |
|---|---|
cross |
ビルド→実行の2段階(ビルドはアーティファクト化) |
native |
1ジョブでビルド+実行を同時実行 |
build.sh、run.shにはシステム名を渡し、システム別の環境設定が可能scripts/result.shで結果をJSON形式に変換scripts/send_results.shで結果サーバに転送・性能推定トリガー
results/result[0-9].jsonを結果サーバに転送- サーバが識別子(
id)と受信時間(timestamp)を返却 results/padata[0-9].tgzがあれば詳細データも転送- 必要に応じて性能推定をトリガー
system,tag,roles,queue
Fugaku,fugaku_login1,build,none
Fugaku,fugaku_jacamar,run,FJ
MiyabiG,miyabi_g_login,build,none
MiyabiG,miyabi_g_jacamar,run,PBS_Miyabi
MiyabiC,miyabi_c_login,build,none
MiyabiC,miyabi_c_jacamar,run,PBS_Miyabi
queue,submit_cmd,template
FJ,pjsub,"-L rscunit=rscunit_ft01,rscgrp=${queue_group},elapse=${elapse},node=${nodes} --mpi max-proc-per-node=${numproc_node} -x PJM_LLIO_GFSCACHE=/vol0004"
PBS_Miyabi,qsub,"-q ${queue_group} -l select=${nodes} -l walltime=${elapse} -W group_list=gq49"
SLURM_RC_GH200,sbatch,"-p qc-gh200 -t ${elapse} -N ${nodes} --ntasks-per-node=${numproc_node} --cpus-per-task=${nthreads}"
none,none,none
同一システムで異なるノード数・プロセス数の組み合わせを複数定義可能:
system,mode,queue_group,nodes,numproc_node,nthreads,elapse
# 同一システム(Fugaku)で異なる実行条件
Fugaku,cross,small,1,4,12,0:10:00
Fugaku,cross,small,2,4,12,0:20:00
Fugaku,cross,small,4,4,12,0:30:00
# MiyabiG/MiyabiCでの実行例
MiyabiG,cross,debug-g,1,1,72,0:10:00
MiyabiC,cross,debug-c,1,1,112,0:10:00
- GitHub での開発 → GitHub Actions で GitLab に自動同期
- GitLab への同期 → GitLab CI でベンチマーク実行
重いベンチマーク処理を避けるため、以下のファイルのみ変更時は自動スキップ:
README.md,ADD_APP.md(ドキュメント)result_server/templates/*.html(Webテンプレート).kiro/**/*,.vscode/**/*(設定ファイル)
コミットメッセージによる制御:
# 特定システムのみ実行
git commit -m "Fix bug [system:MiyabiG,MiyabiC]"
# 特定プログラムのみ実行
git commit -m "Update qws [code:qws,genesis]"
# 組み合わせ可能
git commit -m "Test changes [system:MiyabiG] [code:qws]"APIトリガー制御:
curl -X POST --fail \
-F token=$TOKEN \
-F ref=main \
-F "variables[system]=MiyabiG,MiyabiC" \
-F "variables[code]=qws" \
https://gitlab.example.com/api/v4/projects/PROJECT_ID/trigger/pipelinebuild.shとrun.shはシステム名を引数として受け取り、システム別の環境設定(モジュール、MPI設定等)に対応可能。
- POSIX環境(
bash,awk,cut等の標準コマンド) yq,jq等のシステム依存ツールは使用しない設計