Update benchmark.yaml #2
Workflow file for this run
This file contains 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
name: Benchmarks | |
on: | |
push: | |
branches: [stwo-backend] | |
pull_request: | |
branches: [stwo-backend] | |
env: | |
CARGO_TERM_COLOR: always | |
jobs: | |
benchmark: | |
name: Run benchmarks | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Get full history for benchmarking across commits | |
- name: Install latest nightly Rust | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: nightly | |
override: true | |
components: rustfmt, clippy | |
- name: Cache dependencies | |
uses: actions/cache@v3 | |
with: | |
path: | | |
~/.cargo/bin/ | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
target/ | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: ${{ runner.os }}-cargo- | |
- name: Run benchmarks | |
run: | | |
cargo bench --bench tensor_ops | tee benchmark_output.txt | |
- name: Convert benchmark results | |
run: | | |
# Create a JSON file for benchmark-action | |
echo "[" > output.json | |
# Parse Criterion output and convert to benchmark-action format | |
cat benchmark_output.txt | perl -ne ' | |
if (/time:\s+\[(\d+\.\d+) ns/) { | |
$name = $ARGV if !$name; | |
print qq| { | |
"name": "$name", | |
"value": $1, | |
"unit": "ns" | |
},\n|; | |
} | |
if (/benchmark:\s+(.+)/) { | |
$name = $1; | |
} | |
' >> output.json | |
# Remove trailing comma and close array | |
sed -i '$ s/,$/\n]/' output.json | |
- name: Create benchmark summary | |
run: | | |
mkdir -p target/criterion/summary | |
cat > target/criterion/summary/index.html << 'EOL' | |
<!DOCTYPE html> | |
<html> | |
<head> | |
<title>Circuit Operation Benchmarks</title> | |
<meta charset="utf-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1"> | |
<style> | |
body { | |
font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu; | |
margin: 0; | |
padding: 2rem; | |
line-height: 1.5; | |
} | |
.container { | |
max-width: 1200px; | |
margin: 0 auto; | |
} | |
.operation { | |
margin: 2rem 0; | |
padding: 2rem; | |
border-radius: 8px; | |
background: #f8f9fa; | |
box-shadow: 0 2px 4px rgba(0,0,0,0.1); | |
} | |
h1 { | |
color: #2c3e50; | |
margin-bottom: 2rem; | |
} | |
h2 { | |
color: #34495e; | |
border-bottom: 2px solid #eee; | |
padding-bottom: 0.5rem; | |
} | |
.phase-grid { | |
display: grid; | |
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); | |
gap: 1rem; | |
margin-top: 1rem; | |
} | |
.phase-card { | |
background: white; | |
padding: 1rem; | |
border-radius: 6px; | |
box-shadow: 0 1px 3px rgba(0,0,0,0.1); | |
} | |
.phase-card h3 { | |
margin-top: 0; | |
color: #3498db; | |
} | |
a { | |
color: #3498db; | |
text-decoration: none; | |
transition: color 0.2s; | |
} | |
a:hover { | |
color: #2980b9; | |
text-decoration: underline; | |
} | |
.commit-info { | |
margin-top: 2rem; | |
padding: 1rem; | |
background: #e1f5fe; | |
border-radius: 6px; | |
} | |
</style> | |
</head> | |
<body> | |
<div class="container"> | |
<h1>Circuit Operation Benchmarks</h1> | |
<div class="commit-info"> | |
<strong>Latest Commit:</strong> ${{ github.sha }} | |
<br> | |
<strong>Run Date:</strong> $(date) | |
</div> | |
<div class="operation"> | |
<h2>TensorAdd</h2> | |
<div class="phase-grid"> | |
<div class="phase-card"> | |
<h3>Trace Generation</h3> | |
<a href="../TensorAdd/trace_generation/report/">View Results</a> | |
</div> | |
<div class="phase-card"> | |
<h3>Proving</h3> | |
<a href="../TensorAdd/proving/report/">View Results</a> | |
</div> | |
<div class="phase-card"> | |
<h3>Verification</h3> | |
<a href="../TensorAdd/verification/report/">View Results</a> | |
</div> | |
</div> | |
</div> | |
</div> | |
</body> | |
</html> | |
EOL | |
- name: Store benchmark results | |
uses: benchmark-action/github-action-benchmark@v1 | |
with: | |
name: Rust Circuit Benchmarks | |
tool: customSmallerIsBetter | |
output-file-path: output.json | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
auto-push: true | |
alert-threshold: "150%" | |
comment-on-alert: true | |
fail-on-alert: true | |
gh-pages-branch: gh-pages | |
benchmark-data-dir-path: dev/bench/data | |
- name: Deploy benchmark results | |
if: github.ref == 'refs/heads/main' | |
uses: peaceiris/actions-gh-pages@v3 | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
publish_dir: target/criterion | |
publish_branch: gh-pages | |
keep_files: true |