This commit is contained in:
daira 2022-10-08 11:30:29 +00:00
parent db6b63b41b
commit bbe2fe30f2
11 changed files with 302 additions and 1590 deletions

View File

@ -1,896 +0,0 @@
window.BENCHMARK_DATA = {
"lastUpdate": 1665228352588,
"repoUrl": "https://github.com/zcash/halo2",
"entries": {
"halo2 Benchmark": [
{
"commit": {
"author": {
"email": "daira@jacaranda.org",
"name": "Daira Hopwood",
"username": "daira"
},
"committer": {
"email": "noreply@github.com",
"name": "GitHub",
"username": "web-flow"
},
"distinct": true,
"id": "0f7299c1165e98d1e26c73fabd6ab9429b64559e",
"message": "Merge pull request #625 from zcash/region-query-instance\n\nhalo2_proofs: Introduce `RegionLayouter::instance_value` method.",
"timestamp": "2022-10-08T11:18:46+01:00",
"tree_id": "ffca7af06a8932ce4d740e7dd1d4ab39191d6433",
"url": "https://github.com/zcash/halo2/commit/0f7299c1165e98d1e26c73fabd6ab9429b64559e"
},
"date": 1665228149810,
"tool": "cargo",
"benches": [
{
"name": "WIDTH = 3, RATE = 2-prover",
"value": 66851455,
"range": "± 5273851",
"unit": "ns/iter"
},
{
"name": "WIDTH = 3, RATE = 2-verifier",
"value": 3455273,
"range": "± 159856",
"unit": "ns/iter"
},
{
"name": "WIDTH = 9, RATE = 8-prover",
"value": 141345039,
"range": "± 3824245",
"unit": "ns/iter"
},
{
"name": "WIDTH = 9, RATE = 8-verifier",
"value": 4200603,
"range": "± 86623",
"unit": "ns/iter"
},
{
"name": "WIDTH = 12, RATE = 11-prover",
"value": 199229396,
"range": "± 1348321",
"unit": "ns/iter"
},
{
"name": "WIDTH = 12, RATE = 11-verifier",
"value": 4641767,
"range": "± 97497",
"unit": "ns/iter"
},
{
"name": "Poseidon/2-to-1",
"value": 47886,
"range": "± 80",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/hash-to-point/510",
"value": 164197,
"range": "± 115",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/hash/510",
"value": 179384,
"range": "± 123",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/commit/510",
"value": 294480,
"range": "± 167",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/short-commit/510",
"value": 294444,
"range": "± 241",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/hash-to-point/520",
"value": 167639,
"range": "± 158",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/hash/520",
"value": 182826,
"range": "± 132",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/commit/520",
"value": 297825,
"range": "± 195",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/short-commit/520",
"value": 297742,
"range": "± 149",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/hash-to-point/1086",
"value": 350801,
"range": "± 326",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/hash/1086",
"value": 365957,
"range": "± 184",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/commit/1086",
"value": 481037,
"range": "± 416",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/short-commit/1086",
"value": 481320,
"range": "± 1380",
"unit": "ns/iter"
},
{
"name": "double-and-add",
"value": 3490297,
"range": "± 2628",
"unit": "ns/iter"
},
{
"name": "dev-lookup/14",
"value": 6065578,
"range": "± 5044",
"unit": "ns/iter"
},
{
"name": "dev-lookup/15",
"value": 10435799,
"range": "± 47318",
"unit": "ns/iter"
},
{
"name": "dev-lookup/16",
"value": 22807227,
"range": "± 93121",
"unit": "ns/iter"
},
{
"name": "dev-lookup/17",
"value": 42893270,
"range": "± 84799",
"unit": "ns/iter"
},
{
"name": "dev-lookup/18",
"value": 81484933,
"range": "± 163450",
"unit": "ns/iter"
},
{
"name": "fft/k/3",
"value": 7222,
"range": "± 248",
"unit": "ns/iter"
},
{
"name": "fft/k/4",
"value": 9383,
"range": "± 819",
"unit": "ns/iter"
},
{
"name": "fft/k/5",
"value": 15472,
"range": "± 489",
"unit": "ns/iter"
},
{
"name": "fft/k/6",
"value": 20661,
"range": "± 388",
"unit": "ns/iter"
},
{
"name": "fft/k/7",
"value": 29336,
"range": "± 334",
"unit": "ns/iter"
},
{
"name": "fft/k/8",
"value": 49379,
"range": "± 1474",
"unit": "ns/iter"
},
{
"name": "fft/k/9",
"value": 102610,
"range": "± 11605",
"unit": "ns/iter"
},
{
"name": "fft/k/10",
"value": 199079,
"range": "± 13112",
"unit": "ns/iter"
},
{
"name": "fft/k/11",
"value": 405705,
"range": "± 8447",
"unit": "ns/iter"
},
{
"name": "fft/k/12",
"value": 850787,
"range": "± 15564",
"unit": "ns/iter"
},
{
"name": "fft/k/13",
"value": 1791245,
"range": "± 19209",
"unit": "ns/iter"
},
{
"name": "fft/k/14",
"value": 3791903,
"range": "± 59088",
"unit": "ns/iter"
},
{
"name": "fft/k/15",
"value": 8093230,
"range": "± 178791",
"unit": "ns/iter"
},
{
"name": "fft/k/16",
"value": 17460013,
"range": "± 173640",
"unit": "ns/iter"
},
{
"name": "fft/k/17",
"value": 37328118,
"range": "± 323516",
"unit": "ns/iter"
},
{
"name": "fft/k/18",
"value": 83851515,
"range": "± 1834068",
"unit": "ns/iter"
},
{
"name": "hash-to-curve/Pallas",
"value": 34790,
"range": "± 24",
"unit": "ns/iter"
},
{
"name": "hash-to-curve/Vesta",
"value": 34921,
"range": "± 663",
"unit": "ns/iter"
},
{
"name": "plonk-keygen/8",
"value": 176869513,
"range": "± 11078434",
"unit": "ns/iter"
},
{
"name": "plonk-keygen/9",
"value": 380813676,
"range": "± 5419340",
"unit": "ns/iter"
},
{
"name": "plonk-keygen/10",
"value": 821364769,
"range": "± 1741821",
"unit": "ns/iter"
},
{
"name": "plonk-keygen/11",
"value": 1769159936,
"range": "± 7876361",
"unit": "ns/iter"
},
{
"name": "plonk-keygen/12",
"value": 3789216070,
"range": "± 12359219",
"unit": "ns/iter"
},
{
"name": "plonk-keygen/13",
"value": 8088032208,
"range": "± 9463647",
"unit": "ns/iter"
},
{
"name": "plonk-keygen/14",
"value": 17251322551,
"range": "± 24536559",
"unit": "ns/iter"
},
{
"name": "plonk-keygen/15",
"value": 36597606448,
"range": "± 14843837",
"unit": "ns/iter"
},
{
"name": "plonk-keygen/16",
"value": 77392349534,
"range": "± 37462202",
"unit": "ns/iter"
},
{
"name": "plonk-prover/8",
"value": 109560367,
"range": "± 689728",
"unit": "ns/iter"
},
{
"name": "plonk-prover/9",
"value": 189074552,
"range": "± 1565105",
"unit": "ns/iter"
},
{
"name": "plonk-prover/10",
"value": 336674530,
"range": "± 2669747",
"unit": "ns/iter"
},
{
"name": "plonk-prover/11",
"value": 608418262,
"range": "± 1866554",
"unit": "ns/iter"
},
{
"name": "plonk-prover/12",
"value": 1124799123,
"range": "± 2927586",
"unit": "ns/iter"
},
{
"name": "plonk-prover/13",
"value": 2134871869,
"range": "± 61280969",
"unit": "ns/iter"
},
{
"name": "plonk-prover/14",
"value": 4058409271,
"range": "± 11757718",
"unit": "ns/iter"
},
{
"name": "plonk-prover/15",
"value": 7821020935,
"range": "± 16052633",
"unit": "ns/iter"
},
{
"name": "plonk-prover/16",
"value": 15078783707,
"range": "± 41702199",
"unit": "ns/iter"
},
{
"name": "plonk-verifier/8",
"value": 5862172,
"range": "± 88234",
"unit": "ns/iter"
},
{
"name": "plonk-verifier/9",
"value": 9120501,
"range": "± 197195",
"unit": "ns/iter"
},
{
"name": "plonk-verifier/10",
"value": 14885881,
"range": "± 775073",
"unit": "ns/iter"
},
{
"name": "plonk-verifier/11",
"value": 24862069,
"range": "± 1135111",
"unit": "ns/iter"
},
{
"name": "plonk-verifier/12",
"value": 42726037,
"range": "± 333675",
"unit": "ns/iter"
},
{
"name": "plonk-verifier/13",
"value": 76454241,
"range": "± 2962343",
"unit": "ns/iter"
},
{
"name": "plonk-verifier/14",
"value": 137258212,
"range": "± 600079",
"unit": "ns/iter"
},
{
"name": "plonk-verifier/15",
"value": 252683207,
"range": "± 9369649",
"unit": "ns/iter"
},
{
"name": "plonk-verifier/16",
"value": 458904051,
"range": "± 3382060",
"unit": "ns/iter"
}
]
},
{
"commit": {
"author": {
"email": "daira@jacaranda.org",
"name": "Daira Hopwood",
"username": "daira"
},
"committer": {
"email": "noreply@github.com",
"name": "GitHub",
"username": "web-flow"
},
"distinct": true,
"id": "de76fd48fc795c41daa6ab2233b95d1459b72c9c",
"message": "Merge pull request #622 from zcash/patch-mockprover-query_instance\n\n[MockProver] Check for instance values in gate queries.",
"timestamp": "2022-10-08T11:15:06+01:00",
"tree_id": "9c8748762e3e9f090c03cdb29afb92ab67636780",
"url": "https://github.com/zcash/halo2/commit/de76fd48fc795c41daa6ab2233b95d1459b72c9c"
},
"date": 1665228344002,
"tool": "cargo",
"benches": [
{
"name": "WIDTH = 3, RATE = 2-prover",
"value": 75841023,
"range": "± 3816837",
"unit": "ns/iter"
},
{
"name": "WIDTH = 3, RATE = 2-verifier",
"value": 3746880,
"range": "± 249853",
"unit": "ns/iter"
},
{
"name": "WIDTH = 9, RATE = 8-prover",
"value": 162875279,
"range": "± 8032335",
"unit": "ns/iter"
},
{
"name": "WIDTH = 9, RATE = 8-verifier",
"value": 4724741,
"range": "± 335101",
"unit": "ns/iter"
},
{
"name": "WIDTH = 12, RATE = 11-prover",
"value": 225218194,
"range": "± 7032582",
"unit": "ns/iter"
},
{
"name": "WIDTH = 12, RATE = 11-verifier",
"value": 5176644,
"range": "± 329392",
"unit": "ns/iter"
},
{
"name": "Poseidon/2-to-1",
"value": 50511,
"range": "± 2043",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/hash-to-point/510",
"value": 178090,
"range": "± 7585",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/hash/510",
"value": 191750,
"range": "± 15800",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/commit/510",
"value": 313286,
"range": "± 7933",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/short-commit/510",
"value": 313892,
"range": "± 10323",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/hash-to-point/520",
"value": 179805,
"range": "± 8160",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/hash/520",
"value": 195581,
"range": "± 5990",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/commit/520",
"value": 317389,
"range": "± 13019",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/short-commit/520",
"value": 317621,
"range": "± 13964",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/hash-to-point/1086",
"value": 382653,
"range": "± 27597",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/hash/1086",
"value": 389219,
"range": "± 12808",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/commit/1086",
"value": 517229,
"range": "± 23918",
"unit": "ns/iter"
},
{
"name": "Sinsemilla/short-commit/1086",
"value": 511972,
"range": "± 27389",
"unit": "ns/iter"
},
{
"name": "double-and-add",
"value": 3836082,
"range": "± 130980",
"unit": "ns/iter"
},
{
"name": "dev-lookup/14",
"value": 7618821,
"range": "± 56567",
"unit": "ns/iter"
},
{
"name": "dev-lookup/15",
"value": 13675453,
"range": "± 113397",
"unit": "ns/iter"
},
{
"name": "dev-lookup/16",
"value": 30567593,
"range": "± 620484",
"unit": "ns/iter"
},
{
"name": "dev-lookup/17",
"value": 57014952,
"range": "± 625617",
"unit": "ns/iter"
},
{
"name": "dev-lookup/18",
"value": 108419669,
"range": "± 1421419",
"unit": "ns/iter"
},
{
"name": "fft/k/3",
"value": 8948,
"range": "± 681",
"unit": "ns/iter"
},
{
"name": "fft/k/4",
"value": 10513,
"range": "± 688",
"unit": "ns/iter"
},
{
"name": "fft/k/5",
"value": 19422,
"range": "± 1146",
"unit": "ns/iter"
},
{
"name": "fft/k/6",
"value": 23387,
"range": "± 1317",
"unit": "ns/iter"
},
{
"name": "fft/k/7",
"value": 33999,
"range": "± 1432",
"unit": "ns/iter"
},
{
"name": "fft/k/8",
"value": 58515,
"range": "± 4845",
"unit": "ns/iter"
},
{
"name": "fft/k/9",
"value": 121503,
"range": "± 14082",
"unit": "ns/iter"
},
{
"name": "fft/k/10",
"value": 242739,
"range": "± 28889",
"unit": "ns/iter"
},
{
"name": "fft/k/11",
"value": 492781,
"range": "± 39824",
"unit": "ns/iter"
},
{
"name": "fft/k/12",
"value": 1030076,
"range": "± 264401",
"unit": "ns/iter"
},
{
"name": "fft/k/13",
"value": 2273191,
"range": "± 141140",
"unit": "ns/iter"
},
{
"name": "fft/k/14",
"value": 4915348,
"range": "± 214414",
"unit": "ns/iter"
},
{
"name": "fft/k/15",
"value": 11021687,
"range": "± 1555732",
"unit": "ns/iter"
},
{
"name": "fft/k/16",
"value": 22956623,
"range": "± 1054070",
"unit": "ns/iter"
},
{
"name": "fft/k/17",
"value": 49576155,
"range": "± 1864594",
"unit": "ns/iter"
},
{
"name": "fft/k/18",
"value": 111415378,
"range": "± 4306195",
"unit": "ns/iter"
},
{
"name": "hash-to-curve/Pallas",
"value": 34934,
"range": "± 1421",
"unit": "ns/iter"
},
{
"name": "hash-to-curve/Vesta",
"value": 34895,
"range": "± 1659",
"unit": "ns/iter"
},
{
"name": "plonk-keygen/8",
"value": 200402007,
"range": "± 14715380",
"unit": "ns/iter"
},
{
"name": "plonk-keygen/9",
"value": 413438663,
"range": "± 5980796",
"unit": "ns/iter"
},
{
"name": "plonk-keygen/10",
"value": 900705127,
"range": "± 70208622",
"unit": "ns/iter"
},
{
"name": "plonk-keygen/11",
"value": 1936976295,
"range": "± 18781697",
"unit": "ns/iter"
},
{
"name": "plonk-keygen/12",
"value": 4143991480,
"range": "± 48994313",
"unit": "ns/iter"
},
{
"name": "plonk-keygen/13",
"value": 8967053402,
"range": "± 171749272",
"unit": "ns/iter"
},
{
"name": "plonk-keygen/14",
"value": 18938307634,
"range": "± 260757718",
"unit": "ns/iter"
},
{
"name": "plonk-keygen/15",
"value": 40157997237,
"range": "± 243289317",
"unit": "ns/iter"
},
{
"name": "plonk-keygen/16",
"value": 84685244277,
"range": "± 356799722",
"unit": "ns/iter"
},
{
"name": "plonk-prover/8",
"value": 123566944,
"range": "± 3279620",
"unit": "ns/iter"
},
{
"name": "plonk-prover/9",
"value": 215615832,
"range": "± 32629493",
"unit": "ns/iter"
},
{
"name": "plonk-prover/10",
"value": 376195313,
"range": "± 13646739",
"unit": "ns/iter"
},
{
"name": "plonk-prover/11",
"value": 681473565,
"range": "± 14527875",
"unit": "ns/iter"
},
{
"name": "plonk-prover/12",
"value": 1255315548,
"range": "± 16684674",
"unit": "ns/iter"
},
{
"name": "plonk-prover/13",
"value": 2388595029,
"range": "± 27693238",
"unit": "ns/iter"
},
{
"name": "plonk-prover/14",
"value": 4591928785,
"range": "± 86933169",
"unit": "ns/iter"
},
{
"name": "plonk-prover/15",
"value": 8922690665,
"range": "± 60495506",
"unit": "ns/iter"
},
{
"name": "plonk-prover/16",
"value": 17172514331,
"range": "± 109130480",
"unit": "ns/iter"
},
{
"name": "plonk-verifier/8",
"value": 6493762,
"range": "± 390270",
"unit": "ns/iter"
},
{
"name": "plonk-verifier/9",
"value": 10120399,
"range": "± 713158",
"unit": "ns/iter"
},
{
"name": "plonk-verifier/10",
"value": 16767211,
"range": "± 928785",
"unit": "ns/iter"
},
{
"name": "plonk-verifier/11",
"value": 27510751,
"range": "± 1112823",
"unit": "ns/iter"
},
{
"name": "plonk-verifier/12",
"value": 47384368,
"range": "± 2229134",
"unit": "ns/iter"
},
{
"name": "plonk-verifier/13",
"value": 84064888,
"range": "± 3623572",
"unit": "ns/iter"
},
{
"name": "plonk-verifier/14",
"value": 152175056,
"range": "± 5082674",
"unit": "ns/iter"
},
{
"name": "plonk-verifier/15",
"value": 282262992,
"range": "± 7947666",
"unit": "ns/iter"
},
{
"name": "plonk-verifier/16",
"value": 523500359,
"range": "± 16970620",
"unit": "ns/iter"
}
]
}
]
}
}

View File

@ -1,280 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1, user-scalable=yes" />
<style>
html {
font-family: BlinkMacSystemFont,-apple-system,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Fira Sans","Droid Sans","Helvetica Neue",Helvetica,Arial,sans-serif;
-webkit-font-smoothing: antialiased;
background-color: #fff;
font-size: 16px;
}
body {
color: #4a4a4a;
margin: 8px;
font-size: 1em;
font-weight: 400;
}
header {
margin-bottom: 8px;
display: flex;
flex-direction: column;
}
main {
width: 100%;
display: flex;
flex-direction: column;
}
a {
color: #3273dc;
cursor: pointer;
text-decoration: none;
}
a:hover {
color: #000;
}
button {
color: #fff;
background-color: #3298dc;
border-color: transparent;
cursor: pointer;
text-align: center;
}
button:hover {
background-color: #2793da;
flex: none;
}
.spacer {
flex: auto;
}
.small {
font-size: 0.75rem;
}
footer {
margin-top: 16px;
display: flex;
align-items: center;
}
.header-label {
margin-right: 4px;
}
.benchmark-set {
margin: 8px 0;
width: 100%;
display: flex;
flex-direction: column;
}
.benchmark-title {
font-size: 3rem;
font-weight: 600;
word-break: break-word;
text-align: center;
}
.benchmark-graphs {
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: center;
flex-wrap: wrap;
width: 100%;
}
.benchmark-chart {
max-width: 1000px;
}
</style>
<title>Benchmarks</title>
</head>
<body>
<header id="header">
<div class="header-item">
<strong class="header-label">Last Update:</strong>
<span id="last-update"></span>
</div>
<div class="header-item">
<strong class="header-label">Repository:</strong>
<a id="repository-link" rel="noopener"></a>
</div>
</header>
<main id="main"></main>
<footer>
<button id="dl-button">Download data as JSON</button>
<div class="spacer"></div>
<div class="small">Powered by <a rel="noopener" href="https://github.com/marketplace/actions/continuous-benchmark">github-action-benchmark</a></div>
</footer>
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.9.2/dist/Chart.min.js"></script>
<script src="data.js"></script>
<script id="main-script">
'use strict';
(function() {
// Colors from https://github.com/github/linguist/blob/master/lib/linguist/languages.yml
const toolColors = {
cargo: '#dea584',
go: '#00add8',
benchmarkjs: '#f1e05a',
benchmarkluau: '#000080',
pytest: '#3572a5',
googlecpp: '#f34b7d',
catch2: '#f34b7d',
julia: '#a270ba',
benchmarkdotnet: '#178600',
customBiggerIsBetter: '#38ff38',
customSmallerIsBetter: '#ff3838',
_: '#333333'
};
function init() {
function collectBenchesPerTestCase(entries) {
const map = new Map();
for (const entry of entries) {
const {commit, date, tool, benches} = entry;
for (const bench of benches) {
const result = { commit, date, tool, bench };
const arr = map.get(bench.name);
if (arr === undefined) {
map.set(bench.name, [result]);
} else {
arr.push(result);
}
}
}
return map;
}
const data = window.BENCHMARK_DATA;
// Render header
document.getElementById('last-update').textContent = new Date(data.lastUpdate).toString();
const repoLink = document.getElementById('repository-link');
repoLink.href = data.repoUrl;
repoLink.textContent = data.repoUrl;
// Render footer
document.getElementById('dl-button').onclick = () => {
const dataUrl = 'data:,' + JSON.stringify(data, null, 2);
const a = document.createElement('a');
a.href = dataUrl;
a.download = 'benchmark_data.json';
a.click();
};
// Prepare data points for charts
return Object.keys(data.entries).map(name => ({
name,
dataSet: collectBenchesPerTestCase(data.entries[name]),
}));
}
function renderAllChars(dataSets) {
function renderGraph(parent, name, dataset) {
const canvas = document.createElement('canvas');
canvas.className = 'benchmark-chart';
parent.appendChild(canvas);
const color = toolColors[dataset.length > 0 ? dataset[0].tool : '_'];
const data = {
labels: dataset.map(d => d.commit.id.slice(0, 7)),
datasets: [
{
label: name,
data: dataset.map(d => d.bench.value),
borderColor: color,
backgroundColor: color + '60', // Add alpha for #rrggbbaa
}
],
};
const options = {
scales: {
xAxes: [
{
scaleLabel: {
display: true,
labelString: 'commit',
},
}
],
yAxes: [
{
scaleLabel: {
display: true,
labelString: dataset.length > 0 ? dataset[0].bench.unit : '',
},
ticks: {
beginAtZero: true,
}
}
],
},
tooltips: {
callbacks: {
afterTitle: items => {
const {index} = items[0];
const data = dataset[index];
return '\n' + data.commit.message + '\n\n' + data.commit.timestamp + ' committed by @' + data.commit.committer.username + '\n';
},
label: item => {
let label = item.value;
const { range, unit } = dataset[item.index].bench;
label += ' ' + unit;
if (range) {
label += ' (' + range + ')';
}
return label;
},
afterLabel: item => {
const { extra } = dataset[item.index].bench;
return extra ? '\n' + extra : '';
}
}
},
onClick: (_mouseEvent, activeElems) => {
if (activeElems.length === 0) {
return;
}
// XXX: Undocumented. How can we know the index?
const index = activeElems[0]._index;
const url = dataset[index].commit.url;
window.open(url, '_blank');
},
};
new Chart(canvas, {
type: 'line',
data,
options,
});
}
function renderBenchSet(name, benchSet, main) {
const setElem = document.createElement('div');
setElem.className = 'benchmark-set';
main.appendChild(setElem);
const nameElem = document.createElement('h1');
nameElem.className = 'benchmark-title';
nameElem.textContent = name;
setElem.appendChild(nameElem);
const graphsElem = document.createElement('div');
graphsElem.className = 'benchmark-graphs';
setElem.appendChild(graphsElem);
for (const [benchName, benches] of benchSet.entries()) {
renderGraph(graphsElem, benchName, benches)
}
}
const main = document.getElementById('main');
for (const {name, dataSet} of dataSets) {
renderBenchSet(name, dataSet, main);
}
}
renderAllChars(init()); // Start
})();
</script>
</body>
</html>

View File

@ -13,5 +13,5 @@
});
});
</script>
</head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">&#9776;</button><a class="sidebar-logo" href="../../../halo2_proofs/index.html"><div class="logo-container"><img class="rust-logo" src="../../../rust-logo.svg" alt="logo"></div></a><h2 class="location"></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../../../halo2_proofs/index.html"><div class="logo-container"><img class="rust-logo" src="../../../rust-logo.svg" alt="logo"></div></a><h2 class="location"><a href="#">Module cost</a></h2><div class="sidebar-elems"><section><div class="block"><ul><li><a href="#structs">Structs</a></li></ul></div></section></div></nav><main><div class="width-limiter"><div class="sub-container"><a class="sub-logo-container" href="../../../halo2_proofs/index.html"><img class="rust-logo" src="../../../rust-logo.svg" alt="logo"></a><nav class="sub"><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><button type="button">?</button></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../wheel.svg"></a></div></div></form></nav></div><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Module <a href="../../index.html">halo2_proofs</a>::<wbr><a href="../index.html">dev</a>::<wbr><a class="mod" href="#">cost</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../../../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../../../src/halo2_proofs/dev/cost.rs.html#1-378">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Developer tools for investigating the cost of a circuit.</p>
</head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">&#9776;</button><a class="sidebar-logo" href="../../../halo2_proofs/index.html"><div class="logo-container"><img class="rust-logo" src="../../../rust-logo.svg" alt="logo"></div></a><h2 class="location"></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../../../halo2_proofs/index.html"><div class="logo-container"><img class="rust-logo" src="../../../rust-logo.svg" alt="logo"></div></a><h2 class="location"><a href="#">Module cost</a></h2><div class="sidebar-elems"><section><div class="block"><ul><li><a href="#structs">Structs</a></li></ul></div></section></div></nav><main><div class="width-limiter"><div class="sub-container"><a class="sub-logo-container" href="../../../halo2_proofs/index.html"><img class="rust-logo" src="../../../rust-logo.svg" alt="logo"></a><nav class="sub"><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><button type="button">?</button></div><div id="settings-menu" tabindex="-1"><a href="../../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../../wheel.svg"></a></div></div></form></nav></div><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Module <a href="../../index.html">halo2_proofs</a>::<wbr><a href="../index.html">dev</a>::<wbr><a class="mod" href="#">cost</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../../../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../../../src/halo2_proofs/dev/cost.rs.html#1-506">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Developer tools for investigating the cost of a circuit.</p>
</div></details><h2 id="structs" class="small-section-header"><a href="#structs">Structs</a></h2><div class="item-table"><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.CircuitCost.html" title="halo2_proofs::dev::cost::CircuitCost struct">CircuitCost</a></div><div class="item-right docblock-short">Measures a circuit to determine its costs, and explain what contributes to them.</div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.MarginalProofSize.html" title="halo2_proofs::dev::cost::MarginalProofSize struct">MarginalProofSize</a></div><div class="item-right docblock-short">The marginal size of a Halo 2 proof, broken down into its contributing factors.</div></div><div class="item-row"><div class="item-left module-item"><a class="struct" href="struct.ProofSize.html" title="halo2_proofs::dev::cost::ProofSize struct">ProofSize</a></div><div class="item-right docblock-short">The size of a Halo 2 proof, broken down into its contributing factors.</div></div></div></section></div></main><div id="rustdoc-vars" data-root-path="../../../" data-current-crate="halo2_proofs" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.0-nightly (8b0c05d9a 2022-10-07)" ></div></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -13,4 +13,4 @@
});
});
</script>
</head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">&#9776;</button><a class="sidebar-logo" href="./halo2_gadgets/index.html"><div class="logo-container"><img class="rust-logo" src="./rust-logo.svg" alt="logo"></div></a><h2 class="location"></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="./halo2_gadgets/index.html"><div class="logo-container"><img class="rust-logo" src="./rust-logo.svg" alt="logo"></div></a><h2 class="location">Settings</h2><div class="sidebar-elems"></div></nav><main><div class="width-limiter"><div class="sub-container"><a class="sub-logo-container" href="./halo2_gadgets/index.html"><img class="rust-logo" src="./rust-logo.svg" alt="logo"></a><nav class="sub"><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><button type="button">?</button></div><div id="settings-menu" tabindex="-1"><a href="./settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="./wheel.svg"></a></div></div></form></nav></div><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Rustdoc settings</h1><span class="out-of-band"><a id="back" href="javascript:void(0)" onclick="history.back();">Back</a></span></div><noscript><section>You need to enable Javascript be able to update your settings.</section></noscript><link rel="stylesheet" type="text/css" href="settings.css"><script defer src="settings.js"></script></section></div></main><div id="rustdoc-vars" data-root-path="./" data-current-crate="halo2_gadgets" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.0-nightly (8b0c05d9a 2022-10-07)" ></div></body></html>
</head><body class="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">&#9776;</button><a class="sidebar-logo" href="./halo2/index.html"><div class="logo-container"><img class="rust-logo" src="./rust-logo.svg" alt="logo"></div></a><h2 class="location"></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="./halo2/index.html"><div class="logo-container"><img class="rust-logo" src="./rust-logo.svg" alt="logo"></div></a><h2 class="location">Settings</h2><div class="sidebar-elems"></div></nav><main><div class="width-limiter"><div class="sub-container"><a class="sub-logo-container" href="./halo2/index.html"><img class="rust-logo" src="./rust-logo.svg" alt="logo"></a><nav class="sub"><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press S to search, ? for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><button type="button">?</button></div><div id="settings-menu" tabindex="-1"><a href="./settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="./wheel.svg"></a></div></div></form></nav></div><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Rustdoc settings</h1><span class="out-of-band"><a id="back" href="javascript:void(0)" onclick="history.back();">Back</a></span></div><noscript><section>You need to enable Javascript be able to update your settings.</section></noscript><link rel="stylesheet" type="text/css" href="settings.css"><script defer src="settings.js"></script></section></div></main><div id="rustdoc-vars" data-root-path="./" data-current-crate="halo2" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.0-nightly (8b0c05d9a 2022-10-07)" ></div></body></html>

View File

@ -391,9 +391,138 @@
<span id="376">376</span>
<span id="377">377</span>
<span id="378">378</span>
<span id="379">379</span>
<span id="380">380</span>
<span id="381">381</span>
<span id="382">382</span>
<span id="383">383</span>
<span id="384">384</span>
<span id="385">385</span>
<span id="386">386</span>
<span id="387">387</span>
<span id="388">388</span>
<span id="389">389</span>
<span id="390">390</span>
<span id="391">391</span>
<span id="392">392</span>
<span id="393">393</span>
<span id="394">394</span>
<span id="395">395</span>
<span id="396">396</span>
<span id="397">397</span>
<span id="398">398</span>
<span id="399">399</span>
<span id="400">400</span>
<span id="401">401</span>
<span id="402">402</span>
<span id="403">403</span>
<span id="404">404</span>
<span id="405">405</span>
<span id="406">406</span>
<span id="407">407</span>
<span id="408">408</span>
<span id="409">409</span>
<span id="410">410</span>
<span id="411">411</span>
<span id="412">412</span>
<span id="413">413</span>
<span id="414">414</span>
<span id="415">415</span>
<span id="416">416</span>
<span id="417">417</span>
<span id="418">418</span>
<span id="419">419</span>
<span id="420">420</span>
<span id="421">421</span>
<span id="422">422</span>
<span id="423">423</span>
<span id="424">424</span>
<span id="425">425</span>
<span id="426">426</span>
<span id="427">427</span>
<span id="428">428</span>
<span id="429">429</span>
<span id="430">430</span>
<span id="431">431</span>
<span id="432">432</span>
<span id="433">433</span>
<span id="434">434</span>
<span id="435">435</span>
<span id="436">436</span>
<span id="437">437</span>
<span id="438">438</span>
<span id="439">439</span>
<span id="440">440</span>
<span id="441">441</span>
<span id="442">442</span>
<span id="443">443</span>
<span id="444">444</span>
<span id="445">445</span>
<span id="446">446</span>
<span id="447">447</span>
<span id="448">448</span>
<span id="449">449</span>
<span id="450">450</span>
<span id="451">451</span>
<span id="452">452</span>
<span id="453">453</span>
<span id="454">454</span>
<span id="455">455</span>
<span id="456">456</span>
<span id="457">457</span>
<span id="458">458</span>
<span id="459">459</span>
<span id="460">460</span>
<span id="461">461</span>
<span id="462">462</span>
<span id="463">463</span>
<span id="464">464</span>
<span id="465">465</span>
<span id="466">466</span>
<span id="467">467</span>
<span id="468">468</span>
<span id="469">469</span>
<span id="470">470</span>
<span id="471">471</span>
<span id="472">472</span>
<span id="473">473</span>
<span id="474">474</span>
<span id="475">475</span>
<span id="476">476</span>
<span id="477">477</span>
<span id="478">478</span>
<span id="479">479</span>
<span id="480">480</span>
<span id="481">481</span>
<span id="482">482</span>
<span id="483">483</span>
<span id="484">484</span>
<span id="485">485</span>
<span id="486">486</span>
<span id="487">487</span>
<span id="488">488</span>
<span id="489">489</span>
<span id="490">490</span>
<span id="491">491</span>
<span id="492">492</span>
<span id="493">493</span>
<span id="494">494</span>
<span id="495">495</span>
<span id="496">496</span>
<span id="497">497</span>
<span id="498">498</span>
<span id="499">499</span>
<span id="500">500</span>
<span id="501">501</span>
<span id="502">502</span>
<span id="503">503</span>
<span id="504">504</span>
<span id="505">505</span>
<span id="506">506</span>
</pre><pre class="rust"><code><span class="doccomment">//! Developer tools for investigating the cost of a circuit.
</span><span class="kw">use </span>std::{
cmp,
collections::{HashMap, HashSet},
iter,
marker::PhantomData,
@ -404,7 +533,7 @@
<span class="kw">use </span>group::prime::PrimeGroup;
<span class="kw">use crate</span>::{
circuit::Value,
circuit::{layouter::RegionColumn, Value},
plonk::{
Advice, Any, Assigned, Assignment, Circuit, Column, ConstraintSystem, Error, Fixed,
FloorPlanner, Instance, Selector,
@ -416,7 +545,7 @@
</span><span class="attribute">#[derive(Debug)]
</span><span class="kw">pub struct </span>CircuitCost&lt;G: PrimeGroup, ConcreteCircuit: Circuit&lt;G::Scalar&gt;&gt; {
<span class="doccomment">/// Power-of-2 bound on the number of rows in the circuit.
</span>k: usize,
</span>k: u32,
<span class="doccomment">/// Maximum degree of the circuit.
</span>max_deg: usize,
<span class="doccomment">/// Number of advice columns.
@ -431,34 +560,145 @@
</span>permutation_cols: usize,
<span class="doccomment">/// Number of distinct sets of points in the multiopening argument.
</span>point_sets: usize,
<span class="doccomment">/// Maximum rows used over all columns
</span>max_rows: usize,
<span class="doccomment">/// Maximum rows used over all advice columns
</span>max_advice_rows: usize,
<span class="doccomment">/// Maximum rows used over all fixed columns
</span>max_fixed_rows: usize,
num_fixed_columns: usize,
num_advice_columns: usize,
num_instance_columns: usize,
num_total_columns: usize,
_marker: PhantomData&lt;(G, ConcreteCircuit)&gt;,
}
<span class="kw">struct </span>Assembly {
selectors: Vec&lt;Vec&lt;bool&gt;&gt;,
<span class="doccomment">/// Region implementation used by Layout
</span><span class="attribute">#[derive(Debug)]
</span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">struct </span>LayoutRegion {
<span class="doccomment">/// The name of the region. Not required to be unique.
</span><span class="kw">pub</span>(<span class="kw">crate</span>) name: String,
<span class="doccomment">/// The columns used by this region.
</span><span class="kw">pub</span>(<span class="kw">crate</span>) columns: HashSet&lt;RegionColumn&gt;,
<span class="doccomment">/// The row that this region starts on, if known.
</span><span class="kw">pub</span>(<span class="kw">crate</span>) offset: <span class="prelude-ty">Option</span>&lt;usize&gt;,
<span class="doccomment">/// The number of rows that this region takes up.
</span><span class="kw">pub</span>(<span class="kw">crate</span>) rows: usize,
<span class="doccomment">/// The cells assigned in this region.
</span><span class="kw">pub</span>(<span class="kw">crate</span>) cells: Vec&lt;(RegionColumn, usize)&gt;,
}
<span class="kw">impl</span>&lt;F: Field&gt; Assignment&lt;F&gt; <span class="kw">for </span>Assembly {
<span class="kw">fn </span>enter_region&lt;NR, N&gt;(<span class="kw-2">&amp;mut </span><span class="self">self</span>, <span class="kw">_</span>: N)
<span class="doccomment">/// Cost and graphing layouter
</span><span class="attribute">#[derive(Default, Debug)]
</span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">struct </span>Layout {
<span class="doccomment">/// k = 1 &lt;&lt; n
</span><span class="kw">pub</span>(<span class="kw">crate</span>) k: u32,
<span class="doccomment">/// Regions of the layout
</span><span class="kw">pub</span>(<span class="kw">crate</span>) regions: Vec&lt;LayoutRegion&gt;,
current_region: <span class="prelude-ty">Option</span>&lt;usize&gt;,
<span class="doccomment">/// Total row count
</span><span class="kw">pub</span>(<span class="kw">crate</span>) total_rows: usize,
<span class="doccomment">/// Total advice rows
</span><span class="kw">pub</span>(<span class="kw">crate</span>) total_advice_rows: usize,
<span class="doccomment">/// Total fixed rows
</span><span class="kw">pub</span>(<span class="kw">crate</span>) total_fixed_rows: usize,
<span class="doccomment">/// Any cells assigned outside of a region.
</span><span class="kw">pub</span>(<span class="kw">crate</span>) loose_cells: Vec&lt;(RegionColumn, usize)&gt;,
<span class="doccomment">/// Pairs of cells between which we have equality constraints.
</span><span class="kw">pub</span>(<span class="kw">crate</span>) equality: Vec&lt;(Column&lt;Any&gt;, usize, Column&lt;Any&gt;, usize)&gt;,
<span class="doccomment">/// Selector assignments used for optimization pass
</span><span class="kw">pub</span>(<span class="kw">crate</span>) selectors: Vec&lt;Vec&lt;bool&gt;&gt;,
}
<span class="kw">impl </span>Layout {
<span class="doccomment">/// Creates a empty layout
</span><span class="kw">pub fn </span>new(k: u32, n: usize, num_selectors: usize) -&gt; <span class="self">Self </span>{
Layout {
k,
regions: <span class="macro">vec!</span>[],
current_region: <span class="prelude-val">None</span>,
total_rows: <span class="number">0</span>,
total_advice_rows: <span class="number">0</span>,
total_fixed_rows: <span class="number">0</span>,
<span class="doccomment">/// Any cells assigned outside of a region.
</span>loose_cells: <span class="macro">vec!</span>[],
<span class="doccomment">/// Pairs of cells between which we have equality constraints.
</span>equality: <span class="macro">vec!</span>[],
<span class="doccomment">/// Selector assignments used for optimization pass
</span>selectors: <span class="macro">vec!</span>[<span class="macro">vec!</span>[<span class="bool-val">false</span>; n]; num_selectors],
}
}
<span class="doccomment">/// Update layout metadata
</span><span class="kw">pub fn </span>update(<span class="kw-2">&amp;mut </span><span class="self">self</span>, column: RegionColumn, row: usize) {
<span class="self">self</span>.total_rows = cmp::max(<span class="self">self</span>.total_rows, row + <span class="number">1</span>);
<span class="kw">if let </span>RegionColumn::Column(col) = column {
<span class="kw">match </span>col.column_type() {
Any::Advice =&gt; <span class="self">self</span>.total_advice_rows = cmp::max(<span class="self">self</span>.total_advice_rows, row + <span class="number">1</span>),
Any::Fixed =&gt; <span class="self">self</span>.total_fixed_rows = cmp::max(<span class="self">self</span>.total_fixed_rows, row + <span class="number">1</span>),
<span class="kw">_ </span>=&gt; {}
}
}
<span class="kw">if let </span><span class="prelude-val">Some</span>(region) = <span class="self">self</span>.current_region {
<span class="kw">let </span>region = <span class="kw-2">&amp;mut </span><span class="self">self</span>.regions[region];
region.columns.insert(column);
<span class="comment">// The region offset is the earliest row assigned to.
</span><span class="kw">let </span><span class="kw-2">mut </span>offset = region.offset.unwrap_or(row);
<span class="kw">if </span>row &lt; offset {
<span class="comment">// The first row assigned was not at offset 0 within the region.
</span>region.rows += offset - row;
offset = row;
}
<span class="comment">// The number of rows in this region is the gap between the earliest and
// latest rows assigned.
</span>region.rows = cmp::max(region.rows, row - offset + <span class="number">1</span>);
region.offset = <span class="prelude-val">Some</span>(offset);
region.cells.push((column, row));
} <span class="kw">else </span>{
<span class="self">self</span>.loose_cells.push((column, row));
}
}
}
<span class="kw">impl</span>&lt;F: Field&gt; Assignment&lt;F&gt; <span class="kw">for </span>Layout {
<span class="kw">fn </span>enter_region&lt;NR, N&gt;(<span class="kw-2">&amp;mut </span><span class="self">self</span>, name_fn: N)
<span class="kw">where
</span>NR: Into&lt;String&gt;,
N: FnOnce() -&gt; NR,
{
<span class="comment">// Do nothing; we don&#39;t care about regions in this context.
</span>}
<span class="macro">assert!</span>(<span class="self">self</span>.current_region.is_none());
<span class="self">self</span>.current_region = <span class="prelude-val">Some</span>(<span class="self">self</span>.regions.len());
<span class="self">self</span>.regions.push(LayoutRegion {
name: name_fn().into(),
columns: HashSet::default(),
offset: <span class="prelude-val">None</span>,
rows: <span class="number">0</span>,
cells: <span class="macro">vec!</span>[],
})
}
<span class="kw">fn </span>exit_region(<span class="kw-2">&amp;mut </span><span class="self">self</span>) {
<span class="comment">// Do nothing; we don&#39;t care about regions in this context.
</span>}
<span class="macro">assert!</span>(<span class="self">self</span>.current_region.is_some());
<span class="self">self</span>.current_region = <span class="prelude-val">None</span>;
}
<span class="kw">fn </span>enable_selector&lt;A, AR&gt;(<span class="kw-2">&amp;mut </span><span class="self">self</span>, <span class="kw">_</span>: A, selector: <span class="kw-2">&amp;</span>Selector, row: usize) -&gt; <span class="prelude-ty">Result</span>&lt;(), Error&gt;
<span class="kw">where
</span>A: FnOnce() -&gt; AR,
AR: Into&lt;String&gt;,
{
<span class="self">self</span>.selectors[selector.<span class="number">0</span>][row] = <span class="bool-val">true</span>;
<span class="kw">if let </span><span class="prelude-val">Some</span>(cell) = <span class="self">self</span>.selectors[selector.<span class="number">0</span>].get_mut(row) {
<span class="kw-2">*</span>cell = <span class="bool-val">true</span>;
} <span class="kw">else </span>{
<span class="kw">return </span><span class="prelude-val">Err</span>(Error::not_enough_rows_available(<span class="self">self</span>.k));
}
<span class="self">self</span>.update((<span class="kw-2">*</span>selector).into(), row);
<span class="prelude-val">Ok</span>(())
}
@ -469,8 +709,8 @@
<span class="kw">fn </span>assign_advice&lt;V, VR, A, AR&gt;(
<span class="kw-2">&amp;mut </span><span class="self">self</span>,
<span class="kw">_</span>: A,
<span class="kw">_</span>: Column&lt;Advice&gt;,
<span class="kw">_</span>: usize,
column: Column&lt;Advice&gt;,
row: usize,
<span class="kw">_</span>: V,
) -&gt; <span class="prelude-ty">Result</span>&lt;(), Error&gt;
<span class="kw">where
@ -479,14 +719,15 @@
A: FnOnce() -&gt; AR,
AR: Into&lt;String&gt;,
{
<span class="self">self</span>.update(Column::&lt;Any&gt;::from(column).into(), row);
<span class="prelude-val">Ok</span>(())
}
<span class="kw">fn </span>assign_fixed&lt;V, VR, A, AR&gt;(
<span class="kw-2">&amp;mut </span><span class="self">self</span>,
<span class="kw">_</span>: A,
<span class="kw">_</span>: Column&lt;Fixed&gt;,
<span class="kw">_</span>: usize,
column: Column&lt;Fixed&gt;,
row: usize,
<span class="kw">_</span>: V,
) -&gt; <span class="prelude-ty">Result</span>&lt;(), Error&gt;
<span class="kw">where
@ -495,10 +736,18 @@
A: FnOnce() -&gt; AR,
AR: Into&lt;String&gt;,
{
<span class="self">self</span>.update(Column::&lt;Any&gt;::from(column).into(), row);
<span class="prelude-val">Ok</span>(())
}
<span class="kw">fn </span>copy(<span class="kw-2">&amp;mut </span><span class="self">self</span>, <span class="kw">_</span>: Column&lt;Any&gt;, <span class="kw">_</span>: usize, <span class="kw">_</span>: Column&lt;Any&gt;, <span class="kw">_</span>: usize) -&gt; <span class="prelude-ty">Result</span>&lt;(), Error&gt; {
<span class="kw">fn </span>copy(
<span class="kw-2">&amp;mut </span><span class="self">self</span>,
l_col: Column&lt;Any&gt;,
l_row: usize,
r_col: Column&lt;Any&gt;,
r_row: usize,
) -&gt; <span class="prelude-ty">Result</span>&lt;(), <span class="kw">crate</span>::plonk::Error&gt; {
<span class="self">self</span>.equality.push((l_col, l_row, r_col, r_row));
<span class="prelude-val">Ok</span>(())
}
@ -528,21 +777,19 @@
<span class="doccomment">/// Measures a circuit with parameter constant `k`.
///
/// Panics if `k` is not large enough for the circuit.
</span><span class="kw">pub fn </span>measure(k: usize, circuit: <span class="kw-2">&amp;</span>ConcreteCircuit) -&gt; <span class="self">Self </span>{
</span><span class="kw">pub fn </span>measure(k: u32, circuit: <span class="kw-2">&amp;</span>ConcreteCircuit) -&gt; <span class="self">Self </span>{
<span class="comment">// Collect the layout details.
</span><span class="kw">let </span><span class="kw-2">mut </span>cs = ConstraintSystem::default();
<span class="kw">let </span>config = ConcreteCircuit::configure(<span class="kw-2">&amp;mut </span>cs);
<span class="kw">let </span><span class="kw-2">mut </span>assembly = Assembly {
selectors: <span class="macro">vec!</span>[<span class="macro">vec!</span>[<span class="bool-val">false</span>; <span class="number">1 </span>&lt;&lt; k]; cs.num_selectors],
};
<span class="kw">let </span><span class="kw-2">mut </span>layout = Layout::new(k, <span class="number">1 </span>&lt;&lt; k, cs.num_selectors);
ConcreteCircuit::FloorPlanner::synthesize(
<span class="kw-2">&amp;mut </span>assembly,
<span class="kw-2">&amp;mut </span>layout,
circuit,
config,
cs.constants.clone(),
)
.unwrap();
<span class="kw">let </span>(cs, <span class="kw">_</span>) = cs.compress_selectors(assembly.selectors);
<span class="kw">let </span>(cs, <span class="kw">_</span>) = cs.compress_selectors(layout.selectors);
<span class="macro">assert!</span>((<span class="number">1 </span>&lt;&lt; k) &gt;= cs.minimum_rows());
@ -598,6 +845,15 @@
permutation_cols,
point_sets: point_sets.len(),
_marker: PhantomData::default(),
max_rows: layout.total_rows,
max_advice_rows: layout.total_advice_rows,
max_fixed_rows: layout.total_fixed_rows,
num_advice_columns: cs.num_advice_columns,
num_fixed_columns: cs.num_fixed_columns,
num_instance_columns: cs.num_instance_columns,
num_total_columns: cs.num_instance_columns
+ cs.num_advice_columns
+ cs.num_fixed_columns,
}
}
@ -669,7 +925,7 @@
// - inner product argument (2 * k round commitments)
// - a
// - xi
</span>polycomm: ProofContribution::new(<span class="number">1 </span>+ <span class="number">2 </span>* <span class="self">self</span>.k, <span class="number">2</span>),
</span>polycomm: ProofContribution::new((<span class="number">1 </span>+ <span class="number">2 </span>* <span class="self">self</span>.k).try_into().unwrap(), <span class="number">2</span>),
_marker: PhantomData::default(),
}

View File

@ -333,205 +333,18 @@
<span id="318">318</span>
<span id="319">319</span>
<span id="320">320</span>
<span id="321">321</span>
<span id="322">322</span>
<span id="323">323</span>
<span id="324">324</span>
<span id="325">325</span>
<span id="326">326</span>
<span id="327">327</span>
<span id="328">328</span>
<span id="329">329</span>
<span id="330">330</span>
<span id="331">331</span>
<span id="332">332</span>
<span id="333">333</span>
<span id="334">334</span>
<span id="335">335</span>
<span id="336">336</span>
<span id="337">337</span>
<span id="338">338</span>
<span id="339">339</span>
<span id="340">340</span>
<span id="341">341</span>
<span id="342">342</span>
<span id="343">343</span>
<span id="344">344</span>
<span id="345">345</span>
<span id="346">346</span>
<span id="347">347</span>
<span id="348">348</span>
<span id="349">349</span>
<span id="350">350</span>
<span id="351">351</span>
<span id="352">352</span>
<span id="353">353</span>
<span id="354">354</span>
<span id="355">355</span>
<span id="356">356</span>
<span id="357">357</span>
<span id="358">358</span>
<span id="359">359</span>
<span id="360">360</span>
<span id="361">361</span>
<span id="362">362</span>
<span id="363">363</span>
<span id="364">364</span>
<span id="365">365</span>
<span id="366">366</span>
<span id="367">367</span>
<span id="368">368</span>
<span id="369">369</span>
<span id="370">370</span>
<span id="371">371</span>
<span id="372">372</span>
<span id="373">373</span>
<span id="374">374</span>
<span id="375">375</span>
<span id="376">376</span>
<span id="377">377</span>
<span id="378">378</span>
<span id="379">379</span>
<span id="380">380</span>
<span id="381">381</span>
<span id="382">382</span>
<span id="383">383</span>
<span id="384">384</span>
<span id="385">385</span>
<span id="386">386</span>
<span id="387">387</span>
<span id="388">388</span>
<span id="389">389</span>
<span id="390">390</span>
<span id="391">391</span>
<span id="392">392</span>
<span id="393">393</span>
<span id="394">394</span>
<span id="395">395</span>
<span id="396">396</span>
<span id="397">397</span>
<span id="398">398</span>
<span id="399">399</span>
<span id="400">400</span>
<span id="401">401</span>
<span id="402">402</span>
<span id="403">403</span>
<span id="404">404</span>
<span id="405">405</span>
<span id="406">406</span>
<span id="407">407</span>
<span id="408">408</span>
<span id="409">409</span>
<span id="410">410</span>
<span id="411">411</span>
<span id="412">412</span>
<span id="413">413</span>
<span id="414">414</span>
<span id="415">415</span>
<span id="416">416</span>
<span id="417">417</span>
<span id="418">418</span>
<span id="419">419</span>
<span id="420">420</span>
<span id="421">421</span>
<span id="422">422</span>
<span id="423">423</span>
<span id="424">424</span>
<span id="425">425</span>
<span id="426">426</span>
<span id="427">427</span>
<span id="428">428</span>
<span id="429">429</span>
<span id="430">430</span>
<span id="431">431</span>
<span id="432">432</span>
<span id="433">433</span>
<span id="434">434</span>
<span id="435">435</span>
<span id="436">436</span>
<span id="437">437</span>
<span id="438">438</span>
<span id="439">439</span>
<span id="440">440</span>
<span id="441">441</span>
<span id="442">442</span>
<span id="443">443</span>
<span id="444">444</span>
<span id="445">445</span>
<span id="446">446</span>
<span id="447">447</span>
<span id="448">448</span>
<span id="449">449</span>
<span id="450">450</span>
<span id="451">451</span>
<span id="452">452</span>
<span id="453">453</span>
<span id="454">454</span>
<span id="455">455</span>
<span id="456">456</span>
<span id="457">457</span>
<span id="458">458</span>
<span id="459">459</span>
<span id="460">460</span>
<span id="461">461</span>
<span id="462">462</span>
<span id="463">463</span>
<span id="464">464</span>
<span id="465">465</span>
<span id="466">466</span>
<span id="467">467</span>
<span id="468">468</span>
<span id="469">469</span>
<span id="470">470</span>
<span id="471">471</span>
<span id="472">472</span>
<span id="473">473</span>
<span id="474">474</span>
<span id="475">475</span>
<span id="476">476</span>
<span id="477">477</span>
<span id="478">478</span>
<span id="479">479</span>
<span id="480">480</span>
<span id="481">481</span>
<span id="482">482</span>
<span id="483">483</span>
<span id="484">484</span>
<span id="485">485</span>
<span id="486">486</span>
<span id="487">487</span>
<span id="488">488</span>
<span id="489">489</span>
<span id="490">490</span>
<span id="491">491</span>
<span id="492">492</span>
<span id="493">493</span>
<span id="494">494</span>
<span id="495">495</span>
<span id="496">496</span>
<span id="497">497</span>
<span id="498">498</span>
<span id="499">499</span>
<span id="500">500</span>
<span id="501">501</span>
<span id="502">502</span>
<span id="503">503</span>
<span id="504">504</span>
</pre><pre class="rust"><code><span class="kw">use </span>ff::Field;
<span class="kw">use </span>plotters::{
coord::Shift,
prelude::{DrawingArea, DrawingAreaErrorKind, DrawingBackend},
};
<span class="kw">use </span>std::cmp;
<span class="kw">use </span>std::collections::HashSet;
<span class="kw">use </span>std::ops::Range;
<span class="kw">use crate</span>::{
circuit::{layouter::RegionColumn, Value},
plonk::{
Advice, Any, Assigned, Assignment, Circuit, Column, ConstraintSystem, Error, Fixed,
FloorPlanner, Instance, Selector,
},
circuit::layouter::RegionColumn,
dev::cost::Layout,
plonk::{Any, Circuit, Column, ConstraintSystem, FloorPlanner},
};
<span class="doccomment">/// Graphical renderer for circuit layouts.
@ -840,186 +653,5 @@
<span class="prelude-val">Ok</span>(())
}
}
<span class="attribute">#[derive(Debug)]
</span><span class="kw">struct </span>Region {
<span class="doccomment">/// The name of the region. Not required to be unique.
</span>name: String,
<span class="doccomment">/// The columns used by this region.
</span>columns: HashSet&lt;RegionColumn&gt;,
<span class="doccomment">/// The row that this region starts on, if known.
</span>offset: <span class="prelude-ty">Option</span>&lt;usize&gt;,
<span class="doccomment">/// The number of rows that this region takes up.
</span>rows: usize,
<span class="doccomment">/// The cells assigned in this region. We store this as a `Vec` so that if any cells
/// are double-assigned, they will be visibly darker.
</span>cells: Vec&lt;(RegionColumn, usize)&gt;,
}
<span class="attribute">#[derive(Default)]
</span><span class="kw">struct </span>Layout {
k: u32,
regions: Vec&lt;Region&gt;,
current_region: <span class="prelude-ty">Option</span>&lt;usize&gt;,
total_rows: usize,
<span class="doccomment">/// Any cells assigned outside of a region. We store this as a `Vec` so that if any
/// cells are double-assigned, they will be visibly darker.
</span>loose_cells: Vec&lt;(RegionColumn, usize)&gt;,
<span class="doccomment">/// Pairs of cells between which we have equality constraints.
</span>equality: Vec&lt;(Column&lt;Any&gt;, usize, Column&lt;Any&gt;, usize)&gt;,
<span class="doccomment">/// Selector assignments used for optimization pass
</span>selectors: Vec&lt;Vec&lt;bool&gt;&gt;,
}
<span class="kw">impl </span>Layout {
<span class="kw">fn </span>new(k: u32, n: usize, num_selectors: usize) -&gt; <span class="self">Self </span>{
Layout {
k,
regions: <span class="macro">vec!</span>[],
current_region: <span class="prelude-val">None</span>,
total_rows: <span class="number">0</span>,
<span class="doccomment">/// Any cells assigned outside of a region. We store this as a `Vec` so that if any
/// cells are double-assigned, they will be visibly darker.
</span>loose_cells: <span class="macro">vec!</span>[],
<span class="doccomment">/// Pairs of cells between which we have equality constraints.
</span>equality: <span class="macro">vec!</span>[],
<span class="doccomment">/// Selector assignments used for optimization pass
</span>selectors: <span class="macro">vec!</span>[<span class="macro">vec!</span>[<span class="bool-val">false</span>; n]; num_selectors],
}
}
<span class="kw">fn </span>update(<span class="kw-2">&amp;mut </span><span class="self">self</span>, column: RegionColumn, row: usize) {
<span class="self">self</span>.total_rows = cmp::max(<span class="self">self</span>.total_rows, row + <span class="number">1</span>);
<span class="kw">if let </span><span class="prelude-val">Some</span>(region) = <span class="self">self</span>.current_region {
<span class="kw">let </span>region = <span class="kw-2">&amp;mut </span><span class="self">self</span>.regions[region];
region.columns.insert(column);
<span class="comment">// The region offset is the earliest row assigned to.
</span><span class="kw">let </span><span class="kw-2">mut </span>offset = region.offset.unwrap_or(row);
<span class="kw">if </span>row &lt; offset {
<span class="comment">// The first row assigned was not at offset 0 within the region.
</span>region.rows += offset - row;
offset = row;
}
<span class="comment">// The number of rows in this region is the gap between the earliest and
// latest rows assigned.
</span>region.rows = cmp::max(region.rows, row - offset + <span class="number">1</span>);
region.offset = <span class="prelude-val">Some</span>(offset);
region.cells.push((column, row));
} <span class="kw">else </span>{
<span class="self">self</span>.loose_cells.push((column, row));
}
}
}
<span class="kw">impl</span>&lt;F: Field&gt; Assignment&lt;F&gt; <span class="kw">for </span>Layout {
<span class="kw">fn </span>enter_region&lt;NR, N&gt;(<span class="kw-2">&amp;mut </span><span class="self">self</span>, name_fn: N)
<span class="kw">where
</span>NR: Into&lt;String&gt;,
N: FnOnce() -&gt; NR,
{
<span class="macro">assert!</span>(<span class="self">self</span>.current_region.is_none());
<span class="self">self</span>.current_region = <span class="prelude-val">Some</span>(<span class="self">self</span>.regions.len());
<span class="self">self</span>.regions.push(Region {
name: name_fn().into(),
columns: HashSet::default(),
offset: <span class="prelude-val">None</span>,
rows: <span class="number">0</span>,
cells: <span class="macro">vec!</span>[],
})
}
<span class="kw">fn </span>exit_region(<span class="kw-2">&amp;mut </span><span class="self">self</span>) {
<span class="macro">assert!</span>(<span class="self">self</span>.current_region.is_some());
<span class="self">self</span>.current_region = <span class="prelude-val">None</span>;
}
<span class="kw">fn </span>enable_selector&lt;A, AR&gt;(<span class="kw-2">&amp;mut </span><span class="self">self</span>, <span class="kw">_</span>: A, selector: <span class="kw-2">&amp;</span>Selector, row: usize) -&gt; <span class="prelude-ty">Result</span>&lt;(), Error&gt;
<span class="kw">where
</span>A: FnOnce() -&gt; AR,
AR: Into&lt;String&gt;,
{
<span class="kw">if let </span><span class="prelude-val">Some</span>(cell) = <span class="self">self</span>.selectors[selector.<span class="number">0</span>].get_mut(row) {
<span class="kw-2">*</span>cell = <span class="bool-val">true</span>;
} <span class="kw">else </span>{
<span class="kw">return </span><span class="prelude-val">Err</span>(Error::not_enough_rows_available(<span class="self">self</span>.k));
}
<span class="self">self</span>.update((<span class="kw-2">*</span>selector).into(), row);
<span class="prelude-val">Ok</span>(())
}
<span class="kw">fn </span>query_instance(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="kw">_</span>: Column&lt;Instance&gt;, <span class="kw">_</span>: usize) -&gt; <span class="prelude-ty">Result</span>&lt;Value&lt;F&gt;, Error&gt; {
<span class="prelude-val">Ok</span>(Value::unknown())
}
<span class="kw">fn </span>assign_advice&lt;V, VR, A, AR&gt;(
<span class="kw-2">&amp;mut </span><span class="self">self</span>,
<span class="kw">_</span>: A,
column: Column&lt;Advice&gt;,
row: usize,
<span class="kw">_</span>: V,
) -&gt; <span class="prelude-ty">Result</span>&lt;(), Error&gt;
<span class="kw">where
</span>V: FnOnce() -&gt; Value&lt;VR&gt;,
VR: Into&lt;Assigned&lt;F&gt;&gt;,
A: FnOnce() -&gt; AR,
AR: Into&lt;String&gt;,
{
<span class="self">self</span>.update(Column::&lt;Any&gt;::from(column).into(), row);
<span class="prelude-val">Ok</span>(())
}
<span class="kw">fn </span>assign_fixed&lt;V, VR, A, AR&gt;(
<span class="kw-2">&amp;mut </span><span class="self">self</span>,
<span class="kw">_</span>: A,
column: Column&lt;Fixed&gt;,
row: usize,
<span class="kw">_</span>: V,
) -&gt; <span class="prelude-ty">Result</span>&lt;(), Error&gt;
<span class="kw">where
</span>V: FnOnce() -&gt; Value&lt;VR&gt;,
VR: Into&lt;Assigned&lt;F&gt;&gt;,
A: FnOnce() -&gt; AR,
AR: Into&lt;String&gt;,
{
<span class="self">self</span>.update(Column::&lt;Any&gt;::from(column).into(), row);
<span class="prelude-val">Ok</span>(())
}
<span class="kw">fn </span>copy(
<span class="kw-2">&amp;mut </span><span class="self">self</span>,
l_col: Column&lt;Any&gt;,
l_row: usize,
r_col: Column&lt;Any&gt;,
r_row: usize,
) -&gt; <span class="prelude-ty">Result</span>&lt;(), <span class="kw">crate</span>::plonk::Error&gt; {
<span class="self">self</span>.equality.push((l_col, l_row, r_col, r_row));
<span class="prelude-val">Ok</span>(())
}
<span class="kw">fn </span>fill_from_row(
<span class="kw-2">&amp;mut </span><span class="self">self</span>,
<span class="kw">_</span>: Column&lt;Fixed&gt;,
<span class="kw">_</span>: usize,
<span class="kw">_</span>: Value&lt;Assigned&lt;F&gt;&gt;,
) -&gt; <span class="prelude-ty">Result</span>&lt;(), Error&gt; {
<span class="prelude-val">Ok</span>(())
}
<span class="kw">fn </span>push_namespace&lt;NR, N&gt;(<span class="kw-2">&amp;mut </span><span class="self">self</span>, <span class="kw">_</span>: N)
<span class="kw">where
</span>NR: Into&lt;String&gt;,
N: FnOnce() -&gt; NR,
{
<span class="comment">// Do nothing; we don&#39;t care about namespaces in this context.
</span>}
<span class="kw">fn </span>pop_namespace(<span class="kw-2">&amp;mut </span><span class="self">self</span>, <span class="kw">_</span>: <span class="prelude-ty">Option</span>&lt;String&gt;) {
<span class="comment">// Do nothing; we don&#39;t care about namespaces in this context.
</span>}
}
</code></pre></div>
</section></div></main><div id="rustdoc-vars" data-root-path="../../../../" data-current-crate="halo2_proofs" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.0-nightly (8b0c05d9a 2022-10-07)" ></div></body></html>