-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
125 lines (112 loc) · 3.72 KB
/
CMakeLists.txt
File metadata and controls
125 lines (112 loc) · 3.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
cmake_minimum_required(VERSION 3.5.0)
# Set the default build type to Release because we want to benchmark
# optimized code.
if (NOT CMAKE_BUILD_TYPE)
set(none "None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used)")
set(other "Debug Release RelWithDebInfo MinSizeRel")
set(CMAKE_BUILD_TYPE Release CACHE STRING
"Choose the type of build, options are: ${none} ${other}.")
endif ()
project(DTOA_BENCHMARK C CXX)
add_executable(
dtoa-benchmark
src/benchmark.cc
# Tests:
#src/asteria-test.cc
src/double-conversion-test.cc
src/dragonbox-test.cc
src/experimental-test.cc
src/fmt-test.cc
# Grisu2 variants are disabled since they don't guarantee correctness.
#src/milo-test.cc
src/null-test.cc
src/ostringstream-test.cc
#src/puff-test.cc
src/ryu-test.cc
src/schubfach-test.cc
src/sprintf-test.cc
src/to_chars-test.cc
src/uscale-test.cc
src/xjb-test.cc
src/yy-test.cc
src/zmij-test.cc
# Libraries:
src/asteria/ascii_numput.cpp
src/double-conversion/bignum-dtoa.cc
src/double-conversion/bignum.cc
src/double-conversion/cached-powers.cc
src/double-conversion/diy-fp.cc
src/double-conversion/double-conversion.cc
src/double-conversion/fast-dtoa.cc
src/double-conversion/fixed-dtoa.cc
src/double-conversion/strtod.cc
src/dragonbox/dragonbox_to_chars.cpp # 2 Aug 2025: 6c7c925
src/fmt/src/format.cc # 2 Aug 2025: 35dcc582
src/ryu/d2s.c
src/schubfach/schubfach.cc
src/xjb/xjb64.cpp # 12 Feb 2026: f7481b8
src/uscale/uscale.c # 19 Jan 2026: 6255750
src/yy/yy_double.c
src/zmij/zmij.cc # 11 Feb 2026: b35b64a
)
target_compile_options(dtoa-benchmark PUBLIC $<$<CXX_COMPILER_ID:MSVC>:/utf-8>)
target_compile_features(dtoa-benchmark PRIVATE cxx_std_20)
target_include_directories(dtoa-benchmark PRIVATE src src/fmt/include)
if (APPLE)
execute_process(
COMMAND sysctl -n machdep.cpu.brand_string
OUTPUT_VARIABLE CPU_NAME
)
elseif(LINUX)
execute_process(
COMMAND lscpu
OUTPUT_VARIABLE CPU_NAME
)
string(REGEX MATCH "Model name: ([^\n]*)\n" CPU_NAME "${CPU_NAME}")
string(REGEX REPLACE
"AMD|Intel|CPU|\\(R\\)|\\(TM\\)|@|[^ ]+-Core Processor" ""
CPU_NAME "${CMAKE_MATCH_1}"
)
else ()
set(CPU_NAME "unknown")
endif ()
string(STRIP "${CPU_NAME}" CPU_NAME)
string(REPLACE " " " " CPU_NAME "${CPU_NAME}")
string(REPLACE " " "-" CPU_NAME "${CPU_NAME}")
string(TOLOWER "${CPU_NAME}" CPU_NAME)
message("CPU_NAME: ${CPU_NAME}")
target_compile_definitions(dtoa-benchmark PRIVATE MACHINE="${CPU_NAME}")
execute_process(COMMAND git rev-parse --short HEAD OUTPUT_VARIABLE COMMIT_HASH)
string(STRIP "${COMMIT_HASH}" COMMIT_HASH)
function(add_benchmark_target name num_trials)
add_custom_target(
${name}
COMMAND dtoa-benchmark ${COMMIT_HASH} ${num_trials}
COMMAND cmake -P convert-results.cmake
# Run in the source directory because we want results to be in the source
# results directory.
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
DEPENDS dtoa-benchmark
)
endfunction()
add_benchmark_target(run-benchmark 10)
add_benchmark_target(run-benchmark-fast 3)
# Cache pressure measurement tool -- shares all dtoa implementations
# but uses a different main() that measures L1 cache pollution.
get_target_property(DTOA_SOURCES dtoa-benchmark SOURCES)
list(REMOVE_ITEM DTOA_SOURCES src/benchmark.cc)
add_executable(
cache-pressure
src/cache-pressure.cc
${DTOA_SOURCES}
)
target_compile_features(cache-pressure PRIVATE cxx_std_20)
target_include_directories(cache-pressure PRIVATE src src/fmt/include)
# L1 cache contention test -- measures dtoa degradation under L1 pressure.
add_executable(
cache-contention
src/cache-contention.cc
${DTOA_SOURCES}
)
target_compile_features(cache-contention PRIVATE cxx_std_20)
target_include_directories(cache-contention PRIVATE src src/fmt/include)