Skip to content

Commit 5bc8ca7

Browse files
authored
Merge pull request #4994 from gottesmm/allow_for_buildscript_to_specify_benchmark_iterations
Allow for buildscript to specify benchmark iterations
2 parents 54445b0 + 6fd9dca commit 5bc8ca7

File tree

5 files changed

+95
-4
lines changed

5 files changed

+95
-4
lines changed

benchmark/CMakeLists.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,8 @@ runcmd(COMMAND "xcrun" "-toolchain" "${SWIFT_DARWIN_XCRUN_TOOLCHAIN}" "-f" "clan
139139
# You have to delete CMakeCache.txt in the swift build to force a
140140
# reconfiguration.
141141
set(SWIFT_EXTRA_BENCH_CONFIGS CACHE STRING
142-
"A semicolon separated list of benchmark configurations. Available configurations: <Optlevel>_SINGLEFILE, <Optlevel>_MULTITHREADED")
142+
"A semicolon separated list of benchmark configurations. \
143+
Available configurations: <Optlevel>_SINGLEFILE, <Optlevel>_MULTITHREADED")
143144

144145
# Syntax for an optset: <optimization-level>_<configuration>
145146
# where "_<configuration>" is optional.
@@ -148,6 +149,11 @@ if(NOT SWIFT_OPTIMIZATION_LEVELS)
148149
${SWIFT_EXTRA_BENCH_CONFIGS})
149150
endif()
150151

152+
set(SWIFT_BENCHMARK_NUM_O_ITERATIONS "" CACHE STRING
153+
"Number of iterations to perform when running -O benchmarks via cmake")
154+
set(SWIFT_BENCHMARK_NUM_ONONE_ITERATIONS "" CACHE STRING
155+
"Number of iterations to perform when running -Onone benchmarks via cmake")
156+
151157
# Options for the default (= empty) configuration
152158
set(BENCHOPTS "-whole-module-optimization")
153159

benchmark/cmake/modules/AddSwiftBenchmarkSuite.cmake

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -382,11 +382,11 @@ function(swift_benchmark_compile)
382382
COMMAND "${swift-bin-dir}/Benchmark_Driver" "run"
383383
"-o" "O" "--output-dir" "${CMAKE_CURRENT_BINARY_DIR}/logs"
384384
"--swift-repo" "${SWIFT_SOURCE_DIR}"
385-
"--iterations" "3"
385+
"--iterations" "${SWIFT_BENCHMARK_NUM_O_ITERATIONS}"
386386
COMMAND "${swift-bin-dir}/Benchmark_Driver" "run"
387387
"-o" "Onone" "--output-dir" "${CMAKE_CURRENT_BINARY_DIR}/logs"
388388
"--swift-repo" "${SWIFT_SOURCE_DIR}"
389-
"--iterations" "3"
389+
"--iterations" "${SWIFT_BENCHMARK_NUM_ONONE_ITERATIONS}"
390390
COMMAND "${swift-bin-dir}/Benchmark_Driver" "compare"
391391
"--log-dir" "${CMAKE_CURRENT_BINARY_DIR}/logs"
392392
"--swift-repo" "${SWIFT_SOURCE_DIR}"

utils/build-script

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1560,6 +1560,15 @@ details of the setups of other systems or automated environments.""")
15601560
"-B", "--benchmark",
15611561
help="run the Swift Benchmark Suite after building",
15621562
action="store_true")
1563+
run_tests_group.add_argument(
1564+
"--benchmark-num-o-iterations",
1565+
help="if the Swift Benchmark Suite is run after building, run N \
1566+
iterations with -O",
1567+
metavar='N', type=int, default=3)
1568+
run_tests_group.add_argument(
1569+
"--benchmark-num-onone-iterations",
1570+
help="if the Swift Benchmark Suite is run after building, run N \
1571+
iterations with -Onone", metavar='N', type=int, default=3)
15631572
run_tests_group.add_argument(
15641573
"--skip-test-osx",
15651574
help="skip testing Swift stdlibs for Mac OS X",

utils/swift_build_support/swift_build_support/products/swift.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ def __init__(self, args, toolchain, source_dir, build_dir):
2727
# Add any swift version related cmake flags.
2828
self.cmake_options.extend(self._version_flags)
2929

30+
# Add benchmark specific flags.
31+
self.cmake_options.extend(self._benchmark_flags)
32+
3033
@property
3134
def _runtime_sanitizer_flags(self):
3235
sanitizer_list = []
@@ -77,3 +80,15 @@ def _version_flags(self):
7780
"-DCLANG_COMPILER_VERSION={}".format(clang_compiler_version)
7881
)
7982
return r
83+
84+
@property
85+
def _benchmark_flags(self):
86+
if not self.args.benchmark:
87+
return []
88+
89+
onone_iters = self.args.benchmark_num_onone_iterations
90+
o_iters = self.args.benchmark_num_o_iterations
91+
return [
92+
"-DSWIFT_BENCHMARK_NUM_ONONE_ITERATIONS={}".format(onone_iters),
93+
"-DSWIFT_BENCHMARK_NUM_O_ITERATIONS={}".format(o_iters)
94+
]

utils/swift_build_support/tests/products/test_swift.py

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,10 @@ def setUp(self):
5151
swift_compiler_version=None,
5252
clang_compiler_version=None,
5353
swift_user_visible_version=None,
54-
darwin_deployment_version_osx="10.9")
54+
darwin_deployment_version_osx="10.9",
55+
benchmark=False,
56+
benchmark_num_onone_iterations=3,
57+
benchmark_num_o_iterations=3)
5558

5659
# Setup shell
5760
shell.dry_run = True
@@ -72,6 +75,14 @@ def tearDown(self):
7275
self.toolchain = None
7376
self.args = None
7477

78+
def test_by_default_no_cmake_options(self):
79+
swift = Swift(
80+
args=self.args,
81+
toolchain=self.toolchain,
82+
source_dir='/path/to/src',
83+
build_dir='/path/to/build')
84+
self.assertEqual(swift.cmake_options, [])
85+
7586
def test_swift_runtime_tsan(self):
7687
self.args.enable_tsan_runtime = True
7788
swift = Swift(
@@ -204,3 +215,53 @@ def test_version_flags(self):
204215
)
205216
self.args.swift_compiler_version = None
206217
self.args.clang_compiler_version = None
218+
219+
def test_benchmark_flags(self):
220+
self.args.benchmark = True
221+
swift = Swift(
222+
args=self.args,
223+
toolchain=self.toolchain,
224+
source_dir='/path/to/src',
225+
build_dir='/path/to/build')
226+
# By default, we should get an argument of 3 for both -Onone and -O
227+
self.assertEqual(
228+
['-DSWIFT_BENCHMARK_NUM_ONONE_ITERATIONS=3',
229+
'-DSWIFT_BENCHMARK_NUM_O_ITERATIONS=3'],
230+
swift.cmake_options)
231+
232+
self.args.benchmark_num_onone_iterations = 20
233+
swift = Swift(
234+
args=self.args,
235+
toolchain=self.toolchain,
236+
source_dir='/path/to/src',
237+
build_dir='/path/to/build')
238+
self.assertEqual(
239+
['-DSWIFT_BENCHMARK_NUM_ONONE_ITERATIONS=20',
240+
'-DSWIFT_BENCHMARK_NUM_O_ITERATIONS=3'],
241+
swift.cmake_options)
242+
self.args.benchmark_num_onone_iterations = 3
243+
244+
self.args.benchmark_num_o_iterations = 30
245+
swift = Swift(
246+
args=self.args,
247+
toolchain=self.toolchain,
248+
source_dir='/path/to/src',
249+
build_dir='/path/to/build')
250+
self.assertEqual(
251+
['-DSWIFT_BENCHMARK_NUM_ONONE_ITERATIONS=3',
252+
'-DSWIFT_BENCHMARK_NUM_O_ITERATIONS=30'],
253+
swift.cmake_options)
254+
self.args.benchmark_num_onone_iterations = 3
255+
256+
self.args.benchmark_num_onone_iterations = 10
257+
self.args.benchmark_num_o_iterations = 25
258+
swift = Swift(
259+
args=self.args,
260+
toolchain=self.toolchain,
261+
source_dir='/path/to/src',
262+
build_dir='/path/to/build')
263+
self.assertEqual(
264+
['-DSWIFT_BENCHMARK_NUM_ONONE_ITERATIONS=10',
265+
'-DSWIFT_BENCHMARK_NUM_O_ITERATIONS=25'],
266+
swift.cmake_options)
267+

0 commit comments

Comments
 (0)