Skip to content

Commit 7a84bd6

Browse files
LessUpCopilot
andcommitted
Fix benchmark ratios and pin Rust
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 421c8da commit 7a84bd6

6 files changed

Lines changed: 81 additions & 76 deletions

File tree

.devcontainer/Dockerfile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ RUN arch="$(dpkg --print-architecture)" \
2424
&& curl -fsSL "https://go.dev/dl/go${GO_VERSION}.linux-${go_arch}.tar.gz" | tar -C /usr/local -xz
2525
ENV PATH="/usr/local/go/bin:${PATH}"
2626

27+
ARG RUST_VERSION=1.90.0
2728
USER vscode
28-
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --profile minimal --component clippy rustfmt
29+
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain ${RUST_VERSION} --profile minimal --component clippy rustfmt \
30+
&& /home/vscode/.cargo/bin/rustup default ${RUST_VERSION}
2931
ENV PATH="/home/vscode/.cargo/bin:${PATH}"

docs/.vitepress/data/benchmarks.json

Lines changed: 61 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -6,132 +6,132 @@
66
"algorithm": "huffman",
77
"language": "cpp",
88
"dataset": "textlike_10MiB",
9-
"encodeTime": 651.2,
10-
"decodeTime": 2263.5,
11-
"encodeSpeed": 15.4,
12-
"decodeSpeed": 4.4,
13-
"compressionRatio": 1.34,
9+
"encodeTime": 514.8,
10+
"decodeTime": 1874.4,
11+
"encodeSpeed": 19.4,
12+
"decodeSpeed": 5.3,
13+
"compressionRatio": 0.746,
1414
"throughput": "low"
1515
},
1616
{
1717
"algorithm": "huffman",
1818
"language": "go",
1919
"dataset": "textlike_10MiB",
20-
"encodeTime": 450.2,
21-
"decodeTime": 2592.7,
22-
"encodeSpeed": 22.2,
23-
"decodeSpeed": 3.9,
24-
"compressionRatio": 1.34,
20+
"encodeTime": 352.7,
21+
"decodeTime": 2344.1,
22+
"encodeSpeed": 28.4,
23+
"decodeSpeed": 4.3,
24+
"compressionRatio": 0.746,
2525
"throughput": "low"
2626
},
2727
{
2828
"algorithm": "huffman",
2929
"language": "rust",
3030
"dataset": "textlike_10MiB",
31-
"encodeTime": 916.5,
32-
"decodeTime": 1265.7,
33-
"encodeSpeed": 10.9,
34-
"decodeSpeed": 7.9,
35-
"compressionRatio": 1.34,
31+
"encodeTime": 808.9,
32+
"decodeTime": 1122.6,
33+
"encodeSpeed": 12.4,
34+
"decodeSpeed": 8.9,
35+
"compressionRatio": 0.746,
3636
"throughput": "low"
3737
},
3838
{
3939
"algorithm": "arithmetic",
4040
"language": "cpp",
4141
"dataset": "textlike_10MiB",
42-
"encodeTime": 1487.6,
43-
"decodeTime": 3749.6,
44-
"encodeSpeed": 6.7,
45-
"decodeSpeed": 2.7,
46-
"compressionRatio": 1.346,
42+
"encodeTime": 1293.2,
43+
"decodeTime": 3417.7,
44+
"encodeSpeed": 7.7,
45+
"decodeSpeed": 2.9,
46+
"compressionRatio": 0.743,
4747
"throughput": "low"
4848
},
4949
{
5050
"algorithm": "arithmetic",
5151
"language": "go",
5252
"dataset": "textlike_10MiB",
53-
"encodeTime": 1705.0,
54-
"decodeTime": 3844.3,
55-
"encodeSpeed": 5.9,
56-
"decodeSpeed": 2.6,
57-
"compressionRatio": 1.346,
53+
"encodeTime": 1567.4,
54+
"decodeTime": 3569.7,
55+
"encodeSpeed": 6.4,
56+
"decodeSpeed": 2.8,
57+
"compressionRatio": 0.743,
5858
"throughput": "low"
5959
},
6060
{
6161
"algorithm": "arithmetic",
6262
"language": "rust",
6363
"dataset": "textlike_10MiB",
64-
"encodeTime": 1200.5,
65-
"decodeTime": 4903.4,
66-
"encodeSpeed": 8.3,
67-
"decodeSpeed": 2.0,
68-
"compressionRatio": 1.346,
64+
"encodeTime": 1101.5,
65+
"decodeTime": 4484.3,
66+
"encodeSpeed": 9.1,
67+
"decodeSpeed": 2.2,
68+
"compressionRatio": 0.743,
6969
"throughput": "low"
7070
},
7171
{
7272
"algorithm": "range",
7373
"language": "cpp",
7474
"dataset": "small_dictionary_like",
75-
"encodeTime": 7.0,
76-
"decodeTime": 11.6,
77-
"encodeSpeed": 1.2,
78-
"decodeSpeed": 0.7,
79-
"compressionRatio": 1.626,
75+
"encodeTime": 4.4,
76+
"decodeTime": 4.2,
77+
"encodeSpeed": 1.9,
78+
"decodeSpeed": 2.0,
79+
"compressionRatio": 0.615,
8080
"throughput": "low"
8181
},
8282
{
8383
"algorithm": "range",
8484
"language": "go",
8585
"dataset": "small_dictionary_like",
86-
"encodeTime": 4.6,
87-
"decodeTime": 4.4,
88-
"encodeSpeed": 1.8,
89-
"decodeSpeed": 1.9,
90-
"compressionRatio": 1.626,
86+
"encodeTime": 3.1,
87+
"decodeTime": 3.1,
88+
"encodeSpeed": 2.7,
89+
"decodeSpeed": 2.7,
90+
"compressionRatio": 0.615,
9191
"throughput": "low"
9292
},
9393
{
9494
"algorithm": "range",
9595
"language": "rust",
9696
"dataset": "small_dictionary_like",
97-
"encodeTime": 3.3,
98-
"decodeTime": 5.3,
99-
"encodeSpeed": 2.5,
100-
"decodeSpeed": 1.6,
101-
"compressionRatio": 1.626,
97+
"encodeTime": 2.1,
98+
"decodeTime": 2.2,
99+
"encodeSpeed": 4.0,
100+
"decodeSpeed": 3.8,
101+
"compressionRatio": 0.615,
102102
"throughput": "low"
103103
},
104104
{
105105
"algorithm": "rle",
106106
"language": "cpp",
107107
"dataset": "repetitive_10MiB",
108-
"encodeTime": 203.2,
109-
"decodeTime": 671.3,
110-
"encodeSpeed": 49.2,
111-
"decodeSpeed": 14.9,
112-
"compressionRatio": 500.0,
108+
"encodeTime": 170.0,
109+
"decodeTime": 338.2,
110+
"encodeSpeed": 58.8,
111+
"decodeSpeed": 29.6,
112+
"compressionRatio": 0.002,
113113
"throughput": "medium"
114114
},
115115
{
116116
"algorithm": "rle",
117117
"language": "go",
118118
"dataset": "repetitive_10MiB",
119-
"encodeTime": 94.6,
120-
"decodeTime": 422.6,
121-
"encodeSpeed": 105.7,
122-
"decodeSpeed": 23.7,
123-
"compressionRatio": 500.0,
124-
"throughput": "medium"
119+
"encodeTime": 72.8,
120+
"decodeTime": 289.5,
121+
"encodeSpeed": 137.4,
122+
"decodeSpeed": 34.5,
123+
"compressionRatio": 0.002,
124+
"throughput": "high"
125125
},
126126
{
127127
"algorithm": "rle",
128128
"language": "rust",
129129
"dataset": "repetitive_10MiB",
130-
"encodeTime": 60.9,
131-
"decodeTime": 208.4,
132-
"encodeSpeed": 164.2,
133-
"decodeSpeed": 48.0,
134-
"compressionRatio": 500.0,
130+
"encodeTime": 36.1,
131+
"decodeTime": 167.5,
132+
"encodeSpeed": 277.0,
133+
"decodeSpeed": 59.7,
134+
"compressionRatio": 0.002,
135135
"throughput": "high"
136136
}
137137
]

docs/.vitepress/theme/components/BenchmarkChart.vue

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,15 +88,24 @@ const formatMetricName = (metric: string): string => {
8888
const names: Record<string, string> = {
8989
encodeSpeed: 'Encode Speed (MiB/s)',
9090
decodeSpeed: 'Decode Speed (MiB/s)',
91-
compressionRatio: 'Compression Ratio'
91+
compressionRatio: 'Compression Ratio (lower = better)'
9292
}
9393
return names[metric] || metric
9494
}
9595
9696
const getBarHeight = (value: number): number => {
97-
const max = Math.max(maxValue.value, selectedMetric.value === 'compressionRatio' ? 30 : 300)
97+
const max = selectedMetric.value === 'compressionRatio'
98+
? Math.max(maxValue.value, 0.001)
99+
: Math.max(maxValue.value, 300)
98100
return Math.max((value / max) * 100, 5)
99101
}
102+
103+
const formatMetricValue = (value: number): string => {
104+
if (selectedMetric.value === 'compressionRatio') {
105+
return value < 0.01 ? value.toFixed(3) : value.toFixed(2)
106+
}
107+
return value.toFixed(value < 10 ? 1 : 0)
108+
}
100109
</script>
101110

102111
<template>
@@ -138,7 +147,7 @@ const getBarHeight = (value: number): number => {
138147
v-for="result in groupedByAlgorithm[algo]"
139148
:key="result.language"
140149
class="bar-wrapper"
141-
:title="`${languageNames[result.language]}: ${result[selectedMetric].toFixed(1)}`"
150+
:title="`${languageNames[result.language]}: ${formatMetricValue(result[selectedMetric])}`"
142151
>
143152
<div
144153
class="bar"
@@ -147,7 +156,7 @@ const getBarHeight = (value: number): number => {
147156
backgroundColor: languageColors[result.language]
148157
}"
149158
>
150-
<span class="bar-value">{{ result[selectedMetric].toFixed(result[selectedMetric] < 10 ? 1 : 0) }}</span>
159+
<span class="bar-value">{{ formatMetricValue(result[selectedMetric]) }}</span>
151160
</div>
152161
</div>
153162
</div>

rust-toolchain.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[toolchain]
2+
channel = "1.90.0"

scripts/run_all_bench.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ def parse_benchmark_output(algorithm, dataset, output):
134134
"decodeTime": round(decode_seconds * 1000, 3),
135135
"encodeSpeed": round(encode_speed, 1),
136136
"decodeSpeed": round(decode_speed, 1),
137-
"compressionRatio": round(invert_ratio(ratio), 3),
137+
"compressionRatio": round(ratio, 3),
138138
"throughput": classify_throughput((encode_speed + decode_speed) / 2.0),
139139
}
140140
)
@@ -150,14 +150,6 @@ def compute_speed(size_mib, seconds):
150150
if seconds <= 0:
151151
return 0.0
152152
return size_mib / seconds
153-
154-
155-
def invert_ratio(ratio):
156-
if ratio <= 0:
157-
return 0.0
158-
return 1.0 / ratio
159-
160-
161153
def classify_throughput(speed_mib_per_second):
162154
if speed_mib_per_second >= 200:
163155
return "very-high"

tests/test_run_all_bench.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ def test_main_refreshes_docs_benchmark_json_from_driver_output(self):
7575
self.assertAlmostEqual(by_algorithm["huffman"]["decodeTime"], 200.0)
7676
self.assertAlmostEqual(by_algorithm["huffman"]["encodeSpeed"], 100.0)
7777
self.assertAlmostEqual(by_algorithm["huffman"]["decodeSpeed"], 50.0)
78-
self.assertAlmostEqual(by_algorithm["huffman"]["compressionRatio"], 2.0)
78+
self.assertAlmostEqual(by_algorithm["huffman"]["compressionRatio"], 0.5)
7979

8080
report_paths = sorted((self.root / "reports").glob("*_report_*.txt"))
8181
self.assertEqual(len(report_paths), 4)

0 commit comments

Comments
 (0)