@@ -4,6 +4,7 @@ use crc_fast::checksum;
4
4
use crc_fast:: CrcAlgorithm ;
5
5
use criterion:: * ;
6
6
use rand:: { rng, RngCore } ;
7
+ use std:: time:: Duration ;
7
8
8
9
pub const SIZES : & [ ( & str , i32 ) ; 2 ] = & [
9
10
( "1 MiB" , 1024 * 1024 ) ,
@@ -29,11 +30,12 @@ pub const SIZES: &[(&str, i32); 2] = &[
29
30
] ;
30
31
31
32
// these are the most important algorithms in popular use, with forward/reflected coverage
32
- pub const CRC32_ALGORITHMS : & [ CrcAlgorithm ; 4 ] = & [
33
- CrcAlgorithm :: Crc32Autosar , // reflected, internal
34
- CrcAlgorithm :: Crc32Iscsi , // reflected, custom
35
- CrcAlgorithm :: Crc32IsoHdlc , // reflected, custom
36
- CrcAlgorithm :: Crc32Bzip2 , // forward, internal
33
+ pub const CRC32_ALGORITHMS : & [ CrcAlgorithm ; 3 ] = & [
34
+ // benchmark both CRC-32/ISCSI and CRC-32/ISO-HDLC since they're special flowers with lots of
35
+ // different acceleration targets.
36
+ CrcAlgorithm :: Crc32Iscsi , // reflected
37
+ CrcAlgorithm :: Crc32IsoHdlc , // reflected
38
+ CrcAlgorithm :: Crc32Bzip2 , // forward
37
39
] ;
38
40
39
41
// these are the most important algorithms in popular use, with forward/reflected coverage
@@ -78,13 +80,9 @@ fn bench_crc32(c: &mut Criterion) {
78
80
let mut group = c. benchmark_group ( "CRC-32" ) ;
79
81
80
82
println ! (
81
- "CRC-32/ISCSI implementation {}" ,
83
+ "Acceleration target: {}" ,
82
84
crc_fast:: get_calculator_target( CrcAlgorithm :: Crc32Iscsi )
83
85
) ;
84
- println ! (
85
- "CRC-32/ISO-HDLC implementation {}" ,
86
- crc_fast:: get_calculator_target( CrcAlgorithm :: Crc32IsoHdlc )
87
- ) ;
88
86
89
87
for ( size_name, size) in SIZES {
90
88
let buf = create_aligned_data ( & * random_data ( * size) ) ;
@@ -101,6 +99,7 @@ fn bench_crc32(c: &mut Criterion) {
101
99
102
100
group. throughput ( Throughput :: Bytes ( * size as u64 ) ) ;
103
101
group. sample_size ( 1000 ) ;
102
+ group. measurement_time ( Duration :: from_secs ( 30 ) ) ;
104
103
105
104
let bench_name = [ alg_suffix. unwrap ( ) , "(checksum)" ] . join ( " " ) ;
106
105
@@ -128,6 +127,11 @@ fn bench_crc32(c: &mut Criterion) {
128
127
129
128
#[ inline( always) ]
130
129
fn bench_crc64 ( c : & mut Criterion ) {
130
+ println ! (
131
+ "Acceleration target: {}" ,
132
+ crc_fast:: get_calculator_target( CrcAlgorithm :: Crc64Nvme )
133
+ ) ;
134
+
131
135
let mut group = c. benchmark_group ( "CRC-64" ) ;
132
136
133
137
for ( size_name, size) in SIZES {
@@ -145,6 +149,7 @@ fn bench_crc64(c: &mut Criterion) {
145
149
146
150
group. throughput ( Throughput :: Bytes ( * size as u64 ) ) ;
147
151
group. sample_size ( 1000 ) ;
152
+ group. measurement_time ( Duration :: from_secs ( 30 ) ) ;
148
153
149
154
let bench_name = [ alg_suffix. unwrap ( ) , "(checksum)" ] . join ( " " ) ;
150
155
@@ -170,6 +175,6 @@ fn bench_crc64(c: &mut Criterion) {
170
175
}
171
176
}
172
177
173
- criterion_group ! ( benches, bench_crc64 , bench_crc32 ) ;
178
+ criterion_group ! ( benches, bench_crc32 , bench_crc64 ) ;
174
179
175
180
criterion_main ! ( benches) ;
0 commit comments