Skip to content

Commit 53e7a7f

Browse files
authored
Merge pull request #556 from Chia-Network/new-serialize-benchmark
Add two new serializer benchmark trees
2 parents b2d9d69 + 9f07edc commit 53e7a7f

File tree

6 files changed

+25
-10
lines changed

6 files changed

+25
-10
lines changed

benches/3.generator

10.8 KB
Binary file not shown.

benches/4.generator

1002 Bytes
Binary file not shown.

benches/serialize.rs

+19-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use clvmr::allocator::Allocator;
22
use clvmr::serde::{
3-
node_from_bytes, node_from_bytes_backrefs, node_to_bytes, node_to_bytes_backrefs, Serializer,
3+
node_from_bytes, node_from_bytes_backrefs, node_to_bytes_backrefs, node_to_bytes_limit,
4+
Serializer,
45
};
56
use criterion::black_box;
67
use criterion::{criterion_group, criterion_main, Criterion};
@@ -14,15 +15,28 @@ fn serialize_benchmark(c: &mut Criterion) {
1415
let block0: &[u8] = include_bytes!("0.generator");
1516
let block1: &[u8] = include_bytes!("1.generator");
1617
let block2: &[u8] = include_bytes!("2.generator");
18+
let block3: &[u8] = include_bytes!("3.generator");
19+
let block4: &[u8] = include_bytes!("4.generator");
1720

1821
let mut group = c.benchmark_group("serialize");
1922

20-
for (block, name) in [(&block0, "0"), (&block1, "1"), (&block2, "2")] {
23+
for (block, name) in [
24+
(&block0, "0"),
25+
(&block1, "1"),
26+
(&block2, "2"),
27+
(&block3, "3"),
28+
(&block4, "4"),
29+
] {
2130
let mut a = Allocator::new();
2231
let node = node_from_bytes_backrefs(&mut a, block).expect("node_from_bytes_backrefs");
23-
let inflated = node_to_bytes(&a, node).expect("node_to_bytes");
24-
let mut a = Allocator::new();
25-
let node = node_from_bytes(&mut a, inflated.as_slice()).expect("node_from_bytes");
32+
33+
// if the inflated form takes too much space, just run the benchmark on the compact form
34+
let node = if let Ok(inflated) = node_to_bytes_limit(&a, node, 2000000) {
35+
a = Allocator::new();
36+
node_from_bytes(&mut a, inflated.as_slice()).expect("node_from_bytes")
37+
} else {
38+
node
39+
};
2640

2741
group.bench_function(format!("node_to_bytes_backrefs {name}"), |b| {
2842
b.iter(|| {

src/more_ops.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ const MODPOW_COST_PER_BYTE_EXPONENT: Cost = 3;
9595
const MODPOW_COST_PER_BYTE_MOD: Cost = 21;
9696

9797
fn limbs_for_int(v: &Number) -> usize {
98-
((v.bits() + 7) / 8) as usize
98+
v.bits().div_ceil(8) as usize
9999
}
100100

101101
#[cfg(test)]

src/serde/serialized_length.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ pub fn atom_length_bits(num_bits: u64) -> Option<u64> {
2727
if num_bits < 8 {
2828
return Some(1);
2929
}
30-
let num_bytes = (num_bits + 7) / 8;
30+
let num_bytes = num_bits.div_ceil(8);
3131
match num_bytes {
3232
1..0x40 => Some(1 + num_bytes),
3333
0x40..0x2000 => Some(2 + num_bytes),
@@ -84,9 +84,9 @@ mod tests {
8484
#[case(505, Some(2+64))]
8585
#[case(0xfff8, Some(2+0x1fff))]
8686
#[case(0xfff9, Some(3+0x2000))]
87-
#[case(0x3ffffff8, Some(4 + (0x3ffffff8 + 7) / 8))]
88-
#[case(0x3ffffff9, Some(5 + (0x3ffffff9 + 7) / 8))]
89-
#[case(0x1ffffffff8, Some(5 + (0x1ffffffff8 + 7) / 8))]
87+
#[case(0x3ffffff8, Some(4 + 0x3ffffff8_u64.div_ceil(8)))]
88+
#[case(0x3ffffff9, Some(5 + 0x3ffffff9_u64.div_ceil(8)))]
89+
#[case(0x1ffffffff8, Some(5 + 0x1ffffffff8_u64.div_ceil(8)))]
9090
#[case(0x1ffffffff9, None)]
9191
fn test_atom_length_bits(#[case] num_bits: u64, #[case] expect: Option<u64>) {
9292
assert_eq!(atom_length_bits(num_bits), expect);

wheel/src/api.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#![allow(clippy::useless_conversion)]
12
use std::io;
23

34
use super::lazy_node::LazyNode;

0 commit comments

Comments
 (0)