@@ -31,7 +31,8 @@ struct AA: NativeStruct {
3131let benchmarks = {
3232 let ints : [ Int ] = Array ( repeating: 42 , count: 100 )
3333 let bytes : [ UInt8 ] = Array ( repeating: 42 , count: 100 )
34- let str = ( 0 ... 99 ) . map { _ -> String in " x " } . joined ( )
34+ let str10 = ( 0 ... 9 ) . map { _ -> String in " x " } . joined ( )
35+ let str100 = ( 0 ... 99 ) . map { _ -> String in " x " } . joined ( )
3536 let array : [ AA ] = [
3637 AA ( a: 2.4 , b: 2.4 ) ,
3738 AA ( a: 2.4 , b: 2.4 ) ,
@@ -40,129 +41,124 @@ let benchmarks = {
4041 AA ( a: 2.4 , b: 2.4 ) ,
4142 ]
4243
43- Benchmark ( " Allocating " ) { benchmark in
44- for i in benchmark. scaledIterations {
44+ let metrics : [ BenchmarkMetric ] = [ . cpuTotal, . wallClock, . mallocCountTotal, . releaseCount, . peakMemoryResident]
45+ let maxIterations = 1_000_000
46+ let maxDuration : Duration = . seconds( 3 )
47+ let singleConfiguration : Benchmark . Configuration = . init(
48+ metrics: metrics,
49+ warmupIterations: 1 ,
50+ scalingFactor: . one,
51+ maxDuration: maxDuration,
52+ maxIterations: maxIterations)
53+ let kiloConfiguration : Benchmark . Configuration = . init(
54+ metrics: metrics,
55+ warmupIterations: 1 ,
56+ scalingFactor: . kilo,
57+ maxDuration: maxDuration,
58+ maxIterations: maxIterations)
59+ let megaConfiguration : Benchmark . Configuration = . init(
60+ metrics: metrics,
61+ warmupIterations: 1 ,
62+ scalingFactor: . mega,
63+ maxDuration: maxDuration,
64+ maxIterations: maxIterations)
65+
66+ Benchmark . defaultConfiguration = megaConfiguration
67+
68+ Benchmark ( " Allocating 1GB " , configuration: singleConfiguration) { benchmark in
69+ for _ in benchmark. scaledIterations {
4570 blackHole ( FlatBufferBuilder ( initialSize: 1_024_000_000 ) )
4671 }
4772 }
4873
4974 Benchmark ( " Strings 10 " ) { benchmark in
5075 var fb = FlatBufferBuilder ( initialSize: 1 <<20 )
5176 benchmark. startMeasurement ( )
52- for i in benchmark. scaledIterations {
53- for _ in 0 ..< 1_000_000 {
54- _ = fb. create ( string: " foobarbaz " )
55- }
77+ for _ in benchmark. scaledIterations {
78+ blackHole ( fb. create ( string: str10) )
5679 }
57- benchmark. stopMeasurement ( )
58- fb. clear ( )
5980 }
6081
6182 Benchmark ( " Strings 100 " ) { benchmark in
6283 var fb = FlatBufferBuilder ( initialSize: 1 <<20 )
6384 benchmark. startMeasurement ( )
64- for i in benchmark. scaledIterations {
65- for _ in 0 ..< 1_000_000 {
66- _ = fb. create ( string: str)
67- }
85+ for _ in benchmark. scaledIterations {
86+ blackHole ( fb. create ( string: str100) )
6887 }
69- benchmark. stopMeasurement ( )
70- fb. clear ( )
7188 }
7289
7390 Benchmark ( " Vector 1 Bytes " ) { benchmark in
7491 var fb = FlatBufferBuilder ( initialSize: 1 <<20 )
7592 benchmark. startMeasurement ( )
76- for i in benchmark. scaledIterations {
77- _ = fb. createVector ( bytes: bytes)
93+ for _ in benchmark. scaledIterations {
94+ blackHole ( fb. createVector ( bytes: bytes) )
7895 }
79- benchmark. stopMeasurement ( )
8096 }
8197
8298 Benchmark ( " Vector 1 Ints " ) { benchmark in
8399 var fb = FlatBufferBuilder ( initialSize: 1 <<20 )
84100 benchmark. startMeasurement ( )
85- for i in benchmark. scaledIterations {
86- _ = fb. createVector ( ints)
101+ for _ in benchmark. scaledIterations {
102+ blackHole ( fb. createVector ( ints) )
87103 }
88- benchmark. stopMeasurement ( )
89104 }
90105
91106 Benchmark ( " Vector 100 Ints " ) { benchmark in
92107 var fb = FlatBufferBuilder ( initialSize: 1 <<20 )
93108 benchmark. startMeasurement ( )
94109 for i in benchmark. scaledIterations {
95- for _ in 0 ..< 1_000_000 {
96- _ = fb. createVector ( ints)
97- }
110+ blackHole ( fb. createVector ( ints) )
98111 }
99- benchmark. stopMeasurement ( )
100112 }
101113
102114 Benchmark ( " Vector 100 Bytes " ) { benchmark in
103115 var fb = FlatBufferBuilder ( initialSize: 1 <<20 )
104116 benchmark. startMeasurement ( )
105117 for i in benchmark. scaledIterations {
106- for _ in 0 ..< 1_000_000 {
107- _ = fb. createVector ( bytes)
108- }
118+ blackHole ( fb. createVector ( bytes) )
109119 }
110- benchmark. stopMeasurement ( )
111120 }
112121
113122 Benchmark ( " Vector 100 ContiguousBytes " ) { benchmark in
114123 var fb = FlatBufferBuilder ( initialSize: 1 <<20 )
115124 benchmark. startMeasurement ( )
116125 for i in benchmark. scaledIterations {
117- for _ in 0 ..< 1_000_000 {
118- _ = fb. createVector ( bytes: bytes)
119- }
126+ blackHole ( fb. createVector ( bytes: bytes) )
120127 }
121- benchmark. stopMeasurement ( )
122128 }
123129
124- Benchmark ( " FlatBufferBuilder Add " ) { benchmark in
130+ Benchmark ( " FlatBufferBuilder Add " , configuration : kiloConfiguration ) { benchmark in
125131 var fb = FlatBufferBuilder ( initialSize: 1024 * 1024 * 32 )
126132 benchmark. startMeasurement ( )
127133 for _ in benchmark. scaledIterations {
128- for _ in 0 ..< 1_000_000 {
129- let off = fb. create ( string: " T " )
130- let s = fb. startTable ( with: 4 )
131- fb. add ( element: 3.2 , def: 0 , at: 2 )
132- fb. add ( element: 4.2 , def: 0 , at: 4 )
133- fb. add ( element: 5.2 , def: 0 , at: 6 )
134- fb. add ( offset: off, at: 8 )
135- _ = fb. endTable ( at: s)
136- }
134+ let off = fb. create ( string: " T " )
135+ let s = fb. startTable ( with: 4 )
136+ fb. add ( element: 3.2 , def: 0 , at: 2 )
137+ fb. add ( element: 4.2 , def: 0 , at: 4 )
138+ fb. add ( element: 5.2 , def: 0 , at: 6 )
139+ fb. add ( offset: off, at: 8 )
140+ blackHole ( fb. endTable ( at: s) )
137141 }
138- benchmark. stopMeasurement ( )
139- fb. clear ( )
140142 }
141143
142- Benchmark ( " structs " ) { benchmark in
143- let structCount = 1_000_000
144-
145- let rawSize = ( ( 16 * 5 ) * structCount) / 1024
146-
144+ Benchmark ( " Structs " ) { benchmark in
145+ let rawSize = ( ( 16 * 5 ) * benchmark. scaledIterations. count) / 1024
147146 var fb = FlatBufferBuilder ( initialSize: Int32 ( rawSize * 1600 ) )
147+ var offsets : [ Offset ] = [ ]
148148
149149 benchmark. startMeasurement ( )
150150 for _ in benchmark. scaledIterations {
151- var offsets : [ Offset ] = [ ]
152- for _ in 0 ..< structCount {
153151 let vector = fb. createVector (
154152 ofStructs: array)
155153 let start = fb. startTable ( with: 1 )
156154 fb. add ( offset: vector, at: 4 )
157155 offsets. append ( Offset ( offset: fb. endTable ( at: start) ) )
158- }
159- let vector = fb. createVector ( ofOffsets: offsets)
160- let start = fb. startTable ( with: 1 )
161- fb. add ( offset: vector, at: 4 )
162- let root = Offset ( offset: fb. endTable ( at: start) )
163- fb. finish ( offset: root)
164156 }
165- benchmark. stopMeasurement ( )
166- fb. clear ( )
157+
158+ let vector = fb. createVector ( ofOffsets: offsets)
159+ let start = fb. startTable ( with: 1 )
160+ fb. add ( offset: vector, at: 4 )
161+ let root = Offset ( offset: fb. endTable ( at: start) )
162+ fb. finish ( offset: root)
167163 }
168164}
0 commit comments