Skip to content

Commit 1310f14

Browse files
authored
Merge pull request #3 from hassila/benchmark-fixes
Some benchmark cleanup
2 parents 734cdea + c93b3fc commit 1310f14

File tree

1 file changed

+56
-60
lines changed

1 file changed

+56
-60
lines changed

tests/swift/benchmarks/Benchmarks/FlatbuffersBenchmarks/FlatbuffersBenchmarks.swift

Lines changed: 56 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ struct AA: NativeStruct {
3131
let 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

Comments
 (0)