@@ -978,140 +978,104 @@ mod tests {
978
978
979
979
#[ cfg( all( test, feature = "unstable" ) ) ]
980
980
mod bench {
981
- use std:: collections:: HashMap ;
982
- use std:: path:: Path ;
983
-
984
981
use fastfield_codecs:: Column ;
985
982
use test:: { self , Bencher } ;
986
983
987
- use super :: tests:: { generate_permutation, FIELD , SCHEMA } ;
984
+ use super :: tests:: generate_permutation;
988
985
use super :: * ;
989
- use crate :: directory:: { CompositeFile , Directory , RamDirectory , WritePtr } ;
990
986
use crate :: fastfield:: tests:: generate_permutation_gcd;
991
987
992
988
#[ bench]
993
- fn bench_intfastfield_linear_veclookup ( b : & mut Bencher ) {
989
+ fn bench_intfastfield_jumpy_veclookup ( b : & mut Bencher ) {
994
990
let permutation = generate_permutation ( ) ;
991
+ let n = permutation. len ( ) ;
995
992
b. iter ( || {
996
- let n = test:: black_box ( 7000u32 ) ;
997
993
let mut a = 0u64 ;
998
- for i in ( 0u32 ..n / 7 ) . map ( |v| v * 7 ) {
999
- a ^ = permutation[ i as usize ] ;
994
+ for _ in 0 ..n {
995
+ a = permutation[ a as usize ] ;
1000
996
}
1001
997
a
1002
998
} ) ;
1003
999
}
1004
1000
1005
1001
#[ bench]
1006
- fn bench_intfastfield_veclookup ( b : & mut Bencher ) {
1002
+ fn bench_intfastfield_jumpy_fflookup ( b : & mut Bencher ) {
1007
1003
let permutation = generate_permutation ( ) ;
1004
+ let n = permutation. len ( ) ;
1005
+ let column = DynamicFastFieldReader :: from ( permutation) ;
1008
1006
b. iter ( || {
1009
- let n = test:: black_box ( 1000u32 ) ;
1010
1007
let mut a = 0u64 ;
1011
- for _ in 0u32 ..n {
1012
- a = permutation [ a as usize ] ;
1008
+ for _ in 0 ..n {
1009
+ a = column . get_val ( a as u64 ) ;
1013
1010
}
1014
1011
a
1015
1012
} ) ;
1016
1013
}
1017
1014
1018
1015
#[ bench]
1019
- fn bench_intfastfield_linear_fflookup ( b : & mut Bencher ) {
1020
- let path = Path :: new ( "test" ) ;
1016
+ fn bench_intfastfield_stride7_vec ( b : & mut Bencher ) {
1021
1017
let permutation = generate_permutation ( ) ;
1022
- let directory: RamDirectory = RamDirectory :: create ( ) ;
1023
- {
1024
- let write: WritePtr = directory. open_write ( Path :: new ( "test" ) ) . unwrap ( ) ;
1025
- let mut serializer = CompositeFastFieldSerializer :: from_write ( write) . unwrap ( ) ;
1026
- let mut fast_field_writers = FastFieldsWriter :: from_schema ( & SCHEMA ) ;
1027
- for & x in & permutation {
1028
- fast_field_writers. add_document ( & doc ! ( * FIELD =>x) ) ;
1018
+ let n = permutation. len ( ) ;
1019
+ b. iter ( || {
1020
+ let mut a = 0u64 ;
1021
+ for i in ( 0 ..n / 7 ) . map ( |val| val * 7 ) {
1022
+ a += permutation[ i as usize ] ;
1029
1023
}
1030
- fast_field_writers
1031
- . serialize ( & mut serializer, & HashMap :: new ( ) , None )
1032
- . unwrap ( ) ;
1033
- serializer. close ( ) . unwrap ( ) ;
1034
- }
1035
- let file = directory. open_read ( & path) . unwrap ( ) ;
1036
- {
1037
- let fast_fields_composite = CompositeFile :: open ( & file) . unwrap ( ) ;
1038
- let data = fast_fields_composite. open_read ( * FIELD ) . unwrap ( ) ;
1039
- let fast_field_reader = DynamicFastFieldReader :: < u64 > :: open ( data) . unwrap ( ) ;
1040
-
1041
- b. iter ( || {
1042
- let n = test:: black_box ( 7000u32 ) ;
1043
- let mut a = 0u64 ;
1044
- for i in ( 0u32 ..n / 7 ) . map ( |val| val * 7 ) {
1045
- a ^= fast_field_reader. get_val ( i as u64 ) ;
1046
- }
1047
- a
1048
- } ) ;
1049
- }
1024
+ a
1025
+ } ) ;
1050
1026
}
1051
1027
1052
1028
#[ bench]
1053
- fn bench_intfastfield_fflookup ( b : & mut Bencher ) {
1054
- let path = Path :: new ( "test" ) ;
1029
+ fn bench_intfastfield_stride7_fflookup ( b : & mut Bencher ) {
1055
1030
let permutation = generate_permutation ( ) ;
1056
- let directory: RamDirectory = RamDirectory :: create ( ) ;
1057
- {
1058
- let write: WritePtr = directory. open_write ( Path :: new ( "test" ) ) . unwrap ( ) ;
1059
- let mut serializer = CompositeFastFieldSerializer :: from_write ( write) . unwrap ( ) ;
1060
- let mut fast_field_writers = FastFieldsWriter :: from_schema ( & SCHEMA ) ;
1061
- for & x in & permutation {
1062
- fast_field_writers. add_document ( & doc ! ( * FIELD =>x) ) ;
1031
+ let n = permutation. len ( ) ;
1032
+ let column = DynamicFastFieldReader :: from ( permutation) ;
1033
+ b. iter ( || {
1034
+ let mut a = 0u64 ;
1035
+ for i in ( 0 ..n / 7 ) . map ( |val| val * 7 ) {
1036
+ a += column. get_val ( i as u64 ) ;
1063
1037
}
1064
- fast_field_writers
1065
- . serialize ( & mut serializer, & HashMap :: new ( ) , None )
1066
- . unwrap ( ) ;
1067
- serializer. close ( ) . unwrap ( ) ;
1068
- }
1069
- let file = directory. open_read ( & path) . unwrap ( ) ;
1070
- {
1071
- let fast_fields_composite = CompositeFile :: open ( & file) . unwrap ( ) ;
1072
- let data = fast_fields_composite. open_read ( * FIELD ) . unwrap ( ) ;
1073
- let fast_field_reader = DynamicFastFieldReader :: < u64 > :: open ( data) . unwrap ( ) ;
1074
-
1075
- b. iter ( || {
1076
- let mut a = 0u32 ;
1077
- for i in 0u64 ..permutation. len ( ) as u64 {
1078
- a = fast_field_reader. get_val ( i) as u32 ;
1079
- }
1080
- a
1081
- } ) ;
1082
- }
1038
+ a
1039
+ } ) ;
1083
1040
}
1084
1041
1085
1042
#[ bench]
1086
- fn bench_intfastfield_fflookup_gcd ( b : & mut Bencher ) {
1087
- let path = Path :: new ( "test" ) ;
1043
+ fn bench_intfastfield_scan_all_fflookup ( b : & mut Bencher ) {
1044
+ let permutation = generate_permutation ( ) ;
1045
+ let n = permutation. len ( ) ;
1046
+ let column = DynamicFastFieldReader :: from ( permutation) ;
1047
+ b. iter ( || {
1048
+ let mut a = 0u64 ;
1049
+ for i in 0u64 ..n as u64 {
1050
+ a += column. get_val ( i) ;
1051
+ }
1052
+ a
1053
+ } ) ;
1054
+ }
1055
+
1056
+ #[ bench]
1057
+ fn bench_intfastfield_scan_all_fflookup_gcd ( b : & mut Bencher ) {
1088
1058
let permutation = generate_permutation_gcd ( ) ;
1089
- let directory: RamDirectory = RamDirectory :: create ( ) ;
1090
- {
1091
- let write: WritePtr = directory. open_write ( Path :: new ( "test" ) ) . unwrap ( ) ;
1092
- let mut serializer = CompositeFastFieldSerializer :: from_write ( write) . unwrap ( ) ;
1093
- let mut fast_field_writers = FastFieldsWriter :: from_schema ( & SCHEMA ) ;
1094
- for & x in & permutation {
1095
- fast_field_writers. add_document ( & doc ! ( * FIELD =>x) ) ;
1059
+ let n = permutation. len ( ) ;
1060
+ let column = DynamicFastFieldReader :: from ( permutation) ;
1061
+ b. iter ( || {
1062
+ let mut a = 0u64 ;
1063
+ for i in 0 ..n as u64 {
1064
+ a += column. get_val ( i) ;
1096
1065
}
1097
- fast_field_writers
1098
- . serialize ( & mut serializer, & HashMap :: new ( ) , None )
1099
- . unwrap ( ) ;
1100
- serializer. close ( ) . unwrap ( ) ;
1101
- }
1102
- let file = directory. open_read ( & path) . unwrap ( ) ;
1103
- {
1104
- let fast_fields_composite = CompositeFile :: open ( & file) . unwrap ( ) ;
1105
- let data = fast_fields_composite. open_read ( * FIELD ) . unwrap ( ) ;
1106
- let fast_field_reader = DynamicFastFieldReader :: < u64 > :: open ( data) . unwrap ( ) ;
1107
-
1108
- b. iter ( || {
1109
- let mut a = 0u32 ;
1110
- for i in 0u32 ..permutation. len ( ) as u32 {
1111
- a = fast_field_reader. get_val ( i as u64 ) as u32 ;
1112
- }
1113
- a
1114
- } ) ;
1115
- }
1066
+ a
1067
+ } ) ;
1068
+ }
1069
+
1070
+ #[ bench]
1071
+ fn bench_intfastfield_scan_all_vec ( b : & mut Bencher ) {
1072
+ let permutation = generate_permutation ( ) ;
1073
+ b. iter ( || {
1074
+ let mut a = 0u64 ;
1075
+ for i in 0 ..permutation. len ( ) {
1076
+ a += permutation[ i as usize ] as u64 ;
1077
+ }
1078
+ a
1079
+ } ) ;
1116
1080
}
1117
1081
}
0 commit comments