├── .gitignore
├── LICENSE
├── README.md
├── aarch64.cmake
├── build_llvm_project_stage1.sh
├── build_llvm_project_stage2.sh
├── build_llvm_test_suite.sh
├── cmake_llvm_project_stage1.sh
├── cmake_llvm_project_stage2.sh
├── cmake_llvm_test_suite.sh
├── composer.json
├── compute_stddev.php
├── extract_non_main_data.php
├── fetch_data.sh
├── public
├── about.php
├── compare.php
├── compare_clang.php
├── compare_selected.php
├── graphs.php
├── index.php
├── ninja_trace.php
├── robots.txt
└── show_error.php
├── restart.sh
├── runner.php
├── setup.sh
├── src
├── build_log.php
├── common.php
├── data_aggregation.php
└── web_common.php
├── stddev
├── stats_0.msgpack
├── stats_1.msgpack
├── stats_2.msgpack
├── stats_3.msgpack
├── stats_4.msgpack
├── stats_5.msgpack
├── stats_6.msgpack
├── summary_0.json
├── summary_1.json
├── summary_2.json
├── summary_3.json
├── summary_4.json
├── summary_5.json
└── summary_6.json
├── timeit.sh
└── timeit_launcher.sh
/.gitignore:
--------------------------------------------------------------------------------
1 | llvm-project/
2 | llvm-test-suite/
3 | data/
4 | vendor/
5 | composer.lock
6 | *.swp
7 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Nikita Popov
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | LLVM Compile Time Tracker
2 | =========================
3 |
4 | This repository contains infrastructure for tracking LLVM compile-time performance over time. This includes both server code that performs measurements and publishes to the [llvm-compile-time-data](https://github.com/nikic/llvm-compile-time-data) repository, as well as display code for the website at http://llvm-compile-time-tracker.com/.
5 |
6 | Everything in here is something of a hack and not designed for general usage.
7 |
--------------------------------------------------------------------------------
/aarch64.cmake:
--------------------------------------------------------------------------------
1 | set(triple aarch64-linux-gnu)
2 | set(CMAKE_C_COMPILER_TARGET ${triple})
3 | set(CMAKE_CXX_COMPILER_TARGET ${triple})
4 |
--------------------------------------------------------------------------------
/build_llvm_project_stage1.sh:
--------------------------------------------------------------------------------
1 | rm -rf /tmp/llvm-project-build-stage1 && \
2 | ./cmake_llvm_project_stage1.sh && \
3 | time ninja -C/tmp/llvm-project-build-stage1 clang lld llvm-ar llvm-ranlib LLVMgold.so
4 |
--------------------------------------------------------------------------------
/build_llvm_project_stage2.sh:
--------------------------------------------------------------------------------
1 | BUILD_DIR=/tmp/llvm-project-build-stage2
2 | rm -rf $BUILD_DIR && \
3 | ./cmake_llvm_project_stage2.sh && \
4 | ./timeit.sh --summary $BUILD_DIR/build.time ninja -j`nproc` -C$BUILD_DIR clang
5 |
--------------------------------------------------------------------------------
/build_llvm_test_suite.sh:
--------------------------------------------------------------------------------
1 | rm -rf /tmp/llvm-test-suite-build
2 | ./cmake_llvm_test_suite.sh $1 $2 $3
3 | # By default ninja will use nproc + 2 threads.
4 | # Limit to nproc - 1 to reduce noise.
5 | ninja -j7 -C/tmp/llvm-test-suite-build
6 |
--------------------------------------------------------------------------------
/cmake_llvm_project_stage1.sh:
--------------------------------------------------------------------------------
1 | cmake -GNinja -H./llvm-project/llvm -B/tmp/llvm-project-build-stage1 \
2 | -DCMAKE_BUILD_TYPE=Release \
3 | -DLLVM_ENABLE_PROJECTS="clang;lld" \
4 | -DLLVM_TARGETS_TO_BUILD="X86;AArch64" \
5 | -DLLVM_BUILD_TOOLS=false \
6 | -DLLVM_INCLUDE_TESTS=false \
7 | -DLLVM_INCLUDE_BENCHMARKS=false \
8 | -DLLVM_APPEND_VC_REV=false \
9 | -DLLVM_CCACHE_BUILD=true \
10 | -DLLVM_USE_LINKER=gold \
11 | -DLLVM_BINUTILS_INCDIR=/usr/include \
12 | -DCLANG_ENABLE_ARCMT=false \
13 | -DCLANG_ENABLE_STATIC_ANALYZER=false
14 |
--------------------------------------------------------------------------------
/cmake_llvm_project_stage2.sh:
--------------------------------------------------------------------------------
1 | cmake -GNinja -H./llvm-project/llvm -B/tmp/llvm-project-build-stage2 \
2 | -DCMAKE_BUILD_TYPE=Release \
3 | -DCMAKE_C_COMPILER=/tmp/llvm-project-build-stage1/bin/clang \
4 | -DCMAKE_CXX_COMPILER=/tmp/llvm-project-build-stage1/bin/clang++ \
5 | -DCMAKE_C_COMPILER_LAUNCHER=$PWD/timeit_launcher.sh \
6 | -DCMAKE_CXX_COMPILER_LAUNCHER=$PWD/timeit_launcher.sh \
7 | -DCMAKE_C_LINKER_LAUNCHER=$PWD/timeit_launcher.sh \
8 | -DCMAKE_CXX_LINKER_LAUNCHER=$PWD/timeit_launcher.sh \
9 | -DLLVM_ENABLE_PROJECTS="clang" \
10 | -DLLVM_TARGETS_TO_BUILD="X86" \
11 | -DLLVM_BUILD_TOOLS=false \
12 | -DLLVM_INCLUDE_TESTS=false \
13 | -DLLVM_INCLUDE_BENCHMARKS=false \
14 | -DLLVM_APPEND_VC_REV=false \
15 | -DLLVM_USE_LINKER=lld \
16 | -DLLVM_ENABLE_LTO=Thin \
17 | -DCLANG_ENABLE_ARCMT=false \
18 | -DCLANG_ENABLE_STATIC_ANALYZER=false
19 | #-DLLVM_BINUTILS_INCDIR=/usr/include \
20 |
--------------------------------------------------------------------------------
/cmake_llvm_test_suite.sh:
--------------------------------------------------------------------------------
1 | toolchain=""
2 | if [ -n "$3" ]; then
3 | toolchain="--toolchain $PWD/$3.cmake"
4 | fi
5 | cmake -GNinja -H./llvm-test-suite -B/tmp/llvm-test-suite-build \
6 | -C./llvm-test-suite/cmake/caches/$1.cmake \
7 | -DCMAKE_C_COMPILER=/tmp/llvm-project-build-$2/bin/clang \
8 | -DTEST_SUITE_USE_PERF=true \
9 | -DTEST_SUITE_SUBDIRS=CTMark \
10 | -DTEST_SUITE_RUN_BENCHMARKS=false \
11 | -DTEST_SUITE_COLLECT_CODE_SIZE=false \
12 | $toolchain
13 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "require": {
3 | "php": ">=8.1",
4 | "ext-json": "*",
5 | "ext-zlib": "*",
6 | "ext-msgpack": "*",
7 | "cpliakas/git-wrapper": "^3.0",
8 | "symfony/process": "^5.0"
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/compute_stddev.php:
--------------------------------------------------------------------------------
1 | configNum != $configNum) {
49 | continue;
50 | }
51 | if (empty($summaryData)) {
52 | echo "First config $configNum hash: $hash\n";
53 | }
54 |
55 | foreach ($summary->data as $config => $configData) {
56 | foreach ($configData as $bench => $benchData) {
57 | foreach ($benchData as $stat => $value) {
58 | $summaryData[$config][$bench][$stat][] = $value;
59 | }
60 | }
61 | }
62 |
63 | foreach ($summary->stage1Stats as $stat => $value) {
64 | $summaryData['build']['stage1-clang'][$stat][] = $value;
65 | }
66 |
67 | foreach ($summary->stage2Stats as $stat => $value) {
68 | $summaryData['build']['stage2-clang'][$stat][] = $value;
69 | }
70 |
71 | foreach ($stats as $config => $configData) {
72 | foreach ($configData as $bench => $files) {
73 | foreach ($files as $file => $fileData) {
74 | foreach ($fileData as $stat => $value) {
75 | $statsData[$config][$file][$stat][] = $value;
76 | }
77 | }
78 | }
79 | }
80 |
81 | foreach ($log as $file => $entry) {
82 | foreach (BUILD_LOG_METRICS as $stat) {
83 | $value = $entry->getStat($stat);
84 | if ($value !== null) {
85 | $statsData['stage2-clang'][$file][$stat][] = $value;
86 | }
87 | }
88 | }
89 |
90 | if (++$i % 1000 == 0) {
91 | $logger->log("Read data for $i commits...");
92 | }
93 | }
94 |
95 | $logger->log("Read data for $i commits.");
96 | echo "Computing stddevs...\n";
97 | $summaryStddevs = [];
98 | $percentStddevs = [];
99 | foreach ($summaryData as $config => $configData) {
100 | foreach ($configData as $bench => $benchData) {
101 | foreach ($benchData as $stat => $statData) {
102 | $stddev = stddev($statData);
103 | $summaryStddevs[$config][$bench][$stat] = $stddev;
104 | $percentStddevs[$config][$bench][$stat] = $stddev / avg($statData) * 100.0;
105 | }
106 | }
107 | }
108 |
109 | $statsStddevs = [];
110 | foreach ($statsData as $config => $configData) {
111 | foreach ($configData as $file => $fileData) {
112 | foreach ($fileData as $stat => $statData) {
113 | $statsStddevs[$config][$file][$stat] = stddev($statData);
114 | }
115 | }
116 | }
117 |
118 |
119 | file_put_contents($summaryStddevFile, json_encode($summaryStddevs, JSON_PRETTY_PRINT));
120 | file_put_contents($statsStddevFile, msgpack_pack($statsStddevs));
121 | file_put_contents($percentStddevFile, json_encode($percentStddevs, JSON_PRETTY_PRINT));
122 |
123 | function diffs(array $values): array {
124 | $lastValue = null;
125 | $diffs = [];
126 | foreach ($values as $value) {
127 | if ($lastValue !== null) {
128 | $diffs[] = $value - $lastValue;
129 | }
130 | $lastValue = $value;
131 | }
132 | return $diffs;
133 | }
134 |
135 | /* We compute the standard deviation of the values based on the standard deviation of the
136 | * differences here, which are connected by a factor of sqrt(2) as a sum of independent normal
137 | * distributions. We do not correct for the mean, because the mean is expected to be zero. This
138 | * trick allows us to work on values that potentially have significant changes, because these
139 | * jumps will show up as individual large values in the differences, and don't have an overly
140 | * large impact on the final result. */
141 | function diffs_stddev(array $diffs): float {
142 | $sqSum = 0.0;
143 | foreach ($diffs as $diff) {
144 | $sqSum += $diff * $diff;
145 | }
146 | $stddev = sqrt($sqSum / (count($diffs) - 1));
147 | return $stddev;
148 | }
149 |
150 | function stddev(array $values): float {
151 | $diffs = diffs($values);
152 |
153 | // Compute preliminary stddev, discard diffs >= 5sigma, and then recompute.
154 | $changed = true;
155 | while ($changed) {
156 | $changed = false;
157 | $stddev = diffs_stddev($diffs);
158 | foreach ($diffs as $i => $diff) {
159 | if (abs($diff) >= 5 * $stddev) {
160 | unset($diffs[$i]);
161 | $changed = true;
162 | }
163 | }
164 | }
165 |
166 | // Taking abs() here to avoid negative zero.
167 | return abs($stddev / sqrt(2));
168 | }
169 |
170 | function avg(array $values): float {
171 | return array_sum($values) / count($values);
172 | }
173 |
174 | /*function stddev(array $values): float {
175 | $avg = avg($values);
176 | $sqSum = 0.0;
177 | foreach ($values as $value) {
178 | $delta = $value - $avg;
179 | $sqSum += $delta * $delta;
180 | }
181 | return sqrt($sqSum / (count($values) - 1));
182 | }*/
183 |
184 | class Logger {
185 | private int $startTime;
186 | public function __construct() {
187 | $this->startTime = time();
188 | }
189 | public function log(string $message): void {
190 | $dt = time() - $this->startTime;
191 | $s = $dt % 60;
192 | $m = intdiv($dt, 60);
193 | printf("[%d:%02d] %s\n", intdiv($dt, 60), $dt % 60, $message);
194 | }
195 | }
196 |
--------------------------------------------------------------------------------
/extract_non_main_data.php:
--------------------------------------------------------------------------------
1 | $branchCommits) {
26 | if ($branch === 'origin/main') {
27 | continue;
28 | }
29 |
30 | // Move branches to new commits file.
31 | $extractedCommits[$branch] = $branchCommits;
32 | unset($commits[$branch]);
33 |
34 | // Move the data files to the new location.
35 | foreach ($branchCommits as $commit) {
36 | $hash = $commit['hash'];
37 | $from = $inputDir . '/experiments/' . substr($hash, 0, 2) . '/' . substr($hash, 2);
38 | if (!file_exists($from)) {
39 | continue;
40 | }
41 |
42 | $to = $resultDir . '/experiments/' . substr($hash, 0, 2) . '/' . substr($hash, 2);
43 | @mkdir(dirname($to), 0777, true);
44 | rename($from, $to);
45 | }
46 | }
47 |
48 | file_put_contents($commitsFile, json_encode($commits, JSON_PRETTY_PRINT));
49 | file_put_contents($extractedCommitsFile, json_encode($extractedCommits, JSON_PRETTY_PRINT));
50 |
--------------------------------------------------------------------------------
/fetch_data.sh:
--------------------------------------------------------------------------------
1 | git -C ./data fetch origin
2 | git -C ./data reset --hard origin/master
3 |
--------------------------------------------------------------------------------
/public/about.php:
--------------------------------------------------------------------------------
1 |
7 |
8 | The source code for the compiler time tracker is available at nikic/llvm-compile-time-tracker .
9 | The raw data is available at nikic/llvm-compile-time-data .
10 |
11 |
12 | Pre-Commit Measurements
13 |
14 | If you are an LLVM contributor who regularly does compile-time sensitive work and would like to test the compile-time impact of your patches before they land, contact me at llvm@npopov.com with a link to your GitHub fork of llvm-project. Once your fork is added, any branches starting with `perf/` will get measured.
15 |
16 |
17 | Reproducing
18 |
19 | The compile time tracker tests the CTMark portion of the LLVM test-suite against specific cached CMake configurations. You can set up a test-suite build as follows:
20 |
21 |
22 | git clone https://github.com/llvm/llvm-test-suite.git
23 | mkdir build
24 | cd build
25 | cmake .. -G Ninja \
26 | -C ../cmake/caches/$CONFIG.cmake \
27 | -DCMAKE_C_COMPILER=$PATH_TO_CLANG
28 |
29 |
30 | The $CONFIGs used by the tracker are O3, ReleaseThinLTO, ReleaseLTO-g and O0-g.
31 |
32 |
33 | Next, you will want to pick out a single file with a particularly large regression by enabling the "Per-file details" checkbox on the comparison page. Let's assume we pick CMakeFiles/lencod.dir/rdopt.c.o. The compiler invocation can be obtained using `ninja -v lencod`, after which it can be modified to prepend your favorite profiling tool. For example:
34 |
35 |
36 |
37 | valgrind --tool=callgrind $PATH_TO_CLANG -DNDEBUG -O3 -w -Werror=date-time -fcommon -D__USE_LARGEFILE64 -D_FILE_OFFSET_BITS=64 -MD -MT MultiSource/Applications/JM/lencod/CMakeFiles/lencod.dir/rdopt_coding_state.c.o -MF MultiSource/Applications/JM/lencod/CMakeFiles/lencod.dir/rdopt_coding_state.c.o.d -o MultiSource/Applications/JM/lencod/CMakeFiles/lencod.dir/rdopt_coding_state.c.o -c ../MultiSource/Applications/JM/lencod/rdopt_coding_state.c
38 |
39 |
40 | Configurations
41 |
42 | Compilers:
43 |
44 |
45 | host : gcc 11.4
46 | stage1 :
47 | clang compiled using host compiler (release build)
48 | stage2 :
49 | clang compiled using stage1 compiler (release build with ThinLTO)
50 |
51 |
52 |
53 | Displayed statistics for clang generally refer to the stage2 build. The stage1 build uses ccache and as such does not produce stable timing results.
54 |
55 |
56 | Tested configurations:
57 |
58 |
59 | stage1-O3 :
60 | -O3, stage1 clang, native x86_64 target
61 | stage1-ReleaseThinLTO :
62 | -O3 -flto=thin, stage1 clang, native x86_64 target
63 | stage1-ReleaseLTO-g :
64 | -O3 -flto -g, stage1 clang, native x86_64 target
65 | stage1-O0-g :
66 | -O0 -g, stage1 clang, native x86_64 target
67 | stage1-aarch64-O3 :
68 | -O3, stage1 clang, cross-compilation from x86_64 to aarch64
69 | stage1-aarch64-O0-g :
70 | -O0 -g, stage1 clang, cross-compilation from x86_64 to aarch64
71 | stage2-O3 :
72 | -O3, stage2 clang, native x86_64 target
73 | stage2-O0-g :
74 | -O0 -g, stage2 clang, native x86_64 target
75 |
76 |
--------------------------------------------------------------------------------
/public/compare.php:
--------------------------------------------------------------------------------
1 | $lastCommit['hash'],
19 | 'to' => $to,
20 | 'stat' => $stat,
21 | ]);
22 | header("Location: " . $url);
23 | die;
24 | }
25 | $lastCommit = $commit;
26 | }
27 | }
28 |
29 | // Check whether this is a multi-commit interval on main.
30 | $numCommits = null;
31 | $foundCommits = false;
32 | foreach (getMainCommits() as $commit) {
33 | if ($commit['hash'] == $from) {
34 | $numCommits = 0;
35 | }
36 | if ($numCommits !== null) {
37 | $numCommits++;
38 | if ($commit['hash'] == $to) {
39 | $foundCommits = true;
40 | break;
41 | }
42 | }
43 | }
44 |
45 | printHeader();
46 |
47 | echo "\n";
55 | if (!is_string($from) || !is_string($to)) {
56 | return;
57 | }
58 |
59 | $swappedParams = ["stat" => $stat, "from" => $to, "to" => $from];
60 |
61 | echo " \n";
62 | echo "Comparing " . formatHash($from) . " to " . formatHash($to)
63 | . " (commits in range )."
64 | . " Swap commits .\n";
65 |
66 | if ($foundCommits && $numCommits > 2) {
67 | $url = makeUrl('index.php', [
68 | 'stat' => $stat,
69 | 'startHash' => $to,
70 | 'numCommits' => $numCommits,
71 | 'branch' => 'origin/main',
72 | ]);
73 | //echo " \n";
74 | echo "Show per-commit comparison for $numCommits commits.\n";
75 | }
76 |
77 | if ($stat === 'task-clock' || $stat === 'wall-time' || $stat === 'cycles') {
78 | echo "Warning: The " . h($stat) . " metric is very noisy and likely not meaningful for comparisons between specific revisions.
";
79 | }
80 |
81 | $stddevs = new StdDevManager();
82 | $fromSummary = getSummaryForHash($from);
83 | $fromStats = getStatsForHash($from);
84 | $toSummary = getSummaryForHash($to);
85 | $toStats = getStatsForHash($to);
86 |
87 | if (!$fromSummary) {
88 | reportMissingData($from);
89 | return;
90 | }
91 | if (!$toSummary) {
92 | reportMissingData($to);
93 | return;
94 | }
95 |
96 | if (hasBuildError($from)) {
97 | reportError($from);
98 | }
99 | if (hasBuildError($to)) {
100 | reportError($to);
101 | }
102 |
103 | if ($fromSummary->configNum != $toSummary->configNum) {
104 | echo "The server configuration changed between the selected commits. Differences may be spurious.
\n";
105 | }
106 |
107 | foreach (CONFIGS as $config) {
108 | $fromSummaryData = $fromSummary->getConfig($config);
109 | $toSummaryData = $toSummary->getConfig($config);
110 | if (!$fromSummaryData || !$toSummaryData) {
111 | continue;
112 | }
113 |
114 | echo "$config: \n";
115 | echo "\n";
116 | echo "\n";
117 | echo "Benchmark ";
118 | echo "Old ";
119 | echo "New ";
120 | echo " \n";
121 | foreach (BENCHES_GEOMEAN_LAST as $bench) {
122 | $fromAggMetric = $fromSummaryData[$bench][$stat] ?? null;
123 | $toAggMetric = $toSummaryData[$bench][$stat] ?? null;
124 | $stddev = $fromSummary->configNum === $toSummary->configNum
125 | ? $stddevs->getBenchStdDev($fromSummary->configNum, $config, $bench, $stat)
126 | : null;
127 | echo "\n";
128 | echo "$bench \n";
129 | echo "", formatMetric($fromAggMetric, $stat), " \n";
130 | echo "", formatMetricDiff($toAggMetric, $fromAggMetric, $stat, $stddev), " \n";
131 | echo " \n";
132 | if ($details) {
133 | $fromFiles = $fromStats[$config][$bench] ?? [];
134 | $toFiles = $toStats[$config][$bench] ?? [];
135 | ksort($fromFiles);
136 | foreach ($fromFiles as $file => $fromFile) {
137 | $toFile = $toFiles[$file];
138 | $fromMetric = $fromFile[$stat] ?? null;
139 | $toMetric = $toFile[$stat] ?? null;
140 | $stddev = $fromSummary->configNum === $toSummary->configNum
141 | ? $stddevs->getFileStdDev($fromSummary->configNum, $config, $file, $stat)
142 | : null;
143 | echo "\n";
144 | echo " $file \n";
145 | echo "", formatMetric($fromMetric, $stat), " \n";
146 | echo "", formatMetricDiff($toMetric, $fromMetric, $stat, $stddev), " \n";
147 | echo " \n";
148 | }
149 | }
150 | }
151 | echo "
\n";
152 | }
153 |
154 | if ($linkStats) {
155 | foreach (['stage1-ReleaseThinLTO', 'stage1-ReleaseLTO-g'] as $config) {
156 | $fromStats = getStats($from, $config);
157 | $toStats = getStats($to, $config);
158 | if (!$fromStats || !$toStats) {
159 | continue;
160 | }
161 |
162 | $fromSummaryData = addGeomean(array_map('getLinkStats', $fromStats));
163 | $toSummaryData = addGeomean(array_map('getLinkStats', $toStats));
164 |
165 | echo "$config (link only): \n";
166 | echo "\n";
167 | echo "\n";
168 | echo "Benchmark ";
169 | echo "Old ";
170 | echo "New ";
171 | echo " \n";
172 | foreach (BENCHES_GEOMEAN_LAST as $bench) {
173 | $fromAggMetric = $fromSummaryData[$bench][$stat];
174 | $toAggMetric = $toSummaryData[$bench][$stat];
175 | $stddev = $fromSummary->configNum === $toSummary->configNum
176 | ? $stddevs->getFileStdDev($fromSummary->configNum, $config, $fromSummaryData[$bench]['file'], $stat)
177 | : null;
178 | echo "\n";
179 | echo "$bench \n";
180 | echo "", formatMetric($fromAggMetric, $stat), " \n";
181 | echo "", formatMetricDiff($toAggMetric, $fromAggMetric, $stat, $stddev), " \n";
182 | echo " \n";
183 | }
184 | echo "
\n";
185 | }
186 | }
187 |
188 | $fromStage2 = $fromSummary->stage2Stats;
189 | $toStage2 = $toSummary->stage2Stats;
190 | if (!empty($fromStage2) || !empty($toStage2)) {
191 | echo "clang build: \n";
192 | echo "\n";
193 | echo "\n";
194 | echo "Metric \n";
195 | echo "Old \n";
196 | echo "New \n";
197 | echo " \n";
198 | $detailedStats = ['instructions:u', 'wall-time', 'size-file'];
199 | $stats = array_unique([$stat, ...$detailedStats]);
200 | foreach ($stats as $stat) {
201 | echo "\n";
202 | echo "";
203 | if (in_array($stat, $detailedStats)) {
204 | $compareClangUrl = makeUrl("compare_clang.php", [
205 | "from" => $from,
206 | "to" => $to,
207 | "stat" => $stat,
208 | ]);
209 | echo "$stat ";
210 | } else {
211 | echo $stat;
212 | }
213 | echo " \n";
214 | $fromMetric = $fromStage2[$stat] ?? null;
215 | $toMetric = $toStage2[$stat] ?? null;
216 | $stddev = $fromSummary->configNum === $toSummary->configNum
217 | ? $stddevs->getBenchStdDev($fromSummary->configNum, 'build', 'stage2-clang', $stat)
218 | : null;
219 | echo "", formatMetric($fromMetric, $stat), " \n";
220 | echo "", formatMetricDiff($toMetric, $fromMetric, $stat, $stddev), " \n";
221 | echo " \n";
222 | }
223 | $fromStage1 = $fromSummary->stage1Stats;
224 | $toStage1 = $toSummary->stage1Stats;
225 | if (!empty($fromStage1) || !empty($fromStage2)) {
226 | $stat = 'size-file';
227 | echo "\n";
228 | echo "$stat (stage1) \n";
229 | $fromMetric = $fromStage1[$stat] ?? null;
230 | $toMetric = $toStage1[$stat] ?? null;
231 | $stddev = $fromSummary->configNum === $toSummary->configNum
232 | ? $stddevs->getBenchStdDev($fromSummary->configNum, 'build', 'stage1-clang', $stat)
233 | : null;
234 | echo "", formatMetric($fromMetric, $stat), " \n";
235 | echo "", formatMetricDiff($toMetric, $fromMetric, $stat, $stddev), " \n";
236 | echo " \n";
237 | }
238 | echo "\n";
239 | echo "Ninja trace \n";
240 | echo "\n";
241 | if ($fromStage2) {
242 | $ninjaTraceUrlFrom = makeUrl("ninja_trace.php", ["commit" => $from]);
243 | echo "Download \n";
244 | echo "View \n";
245 | }
246 | echo " \n";
247 | echo "\n";
248 | if ($toStage2) {
249 | $ninjaTraceUrlTo = makeUrl("ninja_trace.php", ["commit" => $to]);
250 | echo "Download \n";
251 | echo "View \n";
252 | }
253 | echo " \n";
254 | echo " \n";
255 | echo "
\n";
256 | }
257 |
258 | printFooter();
259 |
260 | function getLinkStats(array $statsList): array {
261 | foreach ($statsList as $file => $stats) {
262 | if (strpos($file, '.link') === false) {
263 | continue;
264 | }
265 |
266 | $stats['file'] = $file;
267 | return $stats;
268 | }
269 |
270 | throw new Exception('No link stats found');
271 | }
272 |
273 | function reportMissingData(string $hash): void {
274 | if (hasBuildError($hash)) {
275 | reportError($hash);
276 | } else {
277 | echo "No data for commit " . formatHash($hash) . ".
\n";
278 | }
279 | }
280 |
281 | ?>
282 |
317 |
--------------------------------------------------------------------------------
/public/compare_clang.php:
--------------------------------------------------------------------------------
1 | \n";
22 | echo "From: \n";
23 | echo "To: \n";
24 | echo "Metric: "; printStatSelect($stat, BUILD_LOG_METRICS); echo " \n";
25 | echo "Sort by: "; printSelect("sortBy", $sortBy, $sortOptions); echo " \n";
26 | echo " \n";
27 | echo "\n";
28 | echo " \n";
29 | echo "Comparing " . formatHash($from) . " to " . formatHash($to)
30 | . " (commits in range ).\n";
31 | echo "stage2-clang: \n";
32 |
33 | if (!is_string($from) || !is_string($to)) {
34 | return;
35 | }
36 |
37 | if (hasBuildError($from)) {
38 | reportError($from);
39 | }
40 |
41 | if (hasBuildError($to)) {
42 | reportError($to);
43 | }
44 |
45 | $fromSummary = getSummaryForHash($from);
46 | $fromData = readBuildLog($from);
47 | if ($fromSummary === null || $fromData === null) {
48 | echo "No data for commit " . formatHash($from) . ".
\n";
49 | return;
50 | }
51 |
52 | $toSummary = getSummaryForHash($to);
53 | $toData = readBuildLog($to);
54 | if ($toSummary === null || $toData === null) {
55 | echo "No data for commit " . formatHash($to) . ".
\n";
56 | return;
57 | }
58 |
59 | $stddevs = new StdDevManager();
60 | $configNum = $fromSummary->configNum === $toSummary->configNum ? $fromSummary->configNum : null;
61 |
62 | $files = array_unique(array_merge(array_keys($fromData), array_keys($toData)));
63 | sort($files);
64 | if ($sortBy !== 'alphabetic') {
65 | usort($files, function(string $f1, string $f2) use ($fromData, $toData, $sortBy, $stat, $stddevs, $configNum) {
66 | $from1 = ($fromData[$f1] ?? null)?->getStat($stat);
67 | $to1 = ($toData[$f1] ?? null)?->getStat($stat);
68 | $from2 = ($fromData[$f2] ?? null)?->getStat($stat);
69 | $to2 = ($toData[$f2] ?? null)?->getStat($stat);
70 |
71 | $noData1 = $to1 === null && $from1 === null;
72 | $noData2 = $to2 === null && $from2 === null;
73 | if ($noData1 !== $noData2) {
74 | // Sort files without data to the end.
75 | return $noData1 <=> $noData2;
76 | }
77 | if ($noData1 && $noData2) {
78 | // Keep files without data in alphabetic order.
79 | return $f1 <=> $f2;
80 | }
81 |
82 | if ($sortBy === 'absolute') {
83 | return ($from2 ?? $to2) <=> ($from1 ?? $to1);
84 | }
85 |
86 | $diff1 = abs($from1 - $to1);
87 | $diff2 = abs($from2 - $to2);
88 | if ($sortBy == 'absolute-difference') {
89 | return $diff2 <=> $diff1;
90 | }
91 | if ($sortBy == 'relative-difference') {
92 | return fdiv($diff2, $from2) <=> fdiv($diff1, $from1);
93 | }
94 | if ($configNum === null) {
95 | return 0;
96 | }
97 | $stddev1 = $stddevs->getFileStdDev($configNum, 'stage2-clang', $f1, $stat);
98 | $stddev2 = $stddevs->getFileStdDev($configNum, 'stage2-clang', $f2, $stat);
99 | return getInterestingness($diff2, $stddev2) <=> getInterestingness($diff1, $stddev1);
100 | });
101 | }
102 |
103 | echo "\n";
104 | echo "\n";
105 | echo "File \n";
106 | echo "Old \n";
107 | echo "New \n";
108 | echo " \n";
109 | foreach ($files as $file) {
110 | $fromEntry = $fromData[$file] ?? null;
111 | $fromMetric = $fromEntry?->getStat($stat);
112 | $toEntry = $toData[$file] ?? null;
113 | $toMetric = $toEntry?->getStat($stat);
114 | $stddev = $configNum !== null
115 | ? $stddevs->getFileStdDev($configNum, 'stage2-clang', $file, $stat) : null;
116 | echo "\n";
117 | echo "$file \n";
118 | echo "", formatMetric($fromMetric, $displayStat), " \n";
119 | echo "", formatMetricDiff($toMetric, $fromMetric, $displayStat, $stddev), " \n";
120 | echo " \n";
121 | }
122 | echo "
\n";
123 | printFooter();
124 |
--------------------------------------------------------------------------------
/public/compare_selected.php:
--------------------------------------------------------------------------------
1 | data[$config] ?? [];
35 | foreach ($benches as $bench) {
36 | if ($bench == 'clang') {
37 | continue;
38 | }
39 | $value = $summary[$bench][$stat] ?? null;
40 | if ($value !== null) {
41 | $hasAtLeastOneConfig = true;
42 | }
43 | $values[$bench][$config] = $value;
44 | }
45 | }
46 | if (\in_array('clang', $benches)) {
47 | if (str_starts_with($stat, 'size-')) {
48 | $value = $fullSummary->stage1Stats[$stat] ?? null;
49 | if ($value !== null) {
50 | $hasAtLeastOneConfig = true;
51 | }
52 | $values['clang']['stage1'] = $value;
53 | }
54 | $value = $fullSummary->stage2Stats[$stat] ?? null;
55 | if ($value !== null) {
56 | $hasAtLeastOneConfig = true;
57 | }
58 | $values['clang']['stage2'] = $value;
59 | }
60 |
61 | if ($hasAtLeastOneConfig) {
62 | $hashes[] = $hash;
63 | $dates[] = $commit['commit_date'];
64 | foreach ($values as $bench => $benchValues) {
65 | foreach ($benchValues as $config => $value) {
66 | $data[$bench][$config][] = $value;
67 | }
68 | }
69 | $i = 0;
70 | }
71 | }
72 | return [$hashes, $dates, $data];
73 | }
74 |
75 | function transformData(array &$data, callable $fn): void {
76 | foreach ($data as $bench => &$benchValues) {
77 | foreach ($benchValues as $config => &$values) {
78 | $values = $fn($values);
79 | }
80 | }
81 | }
82 |
83 | function makeRelative(array $values): array {
84 | $first = null;
85 | $newValues = [];
86 | foreach ($values as $value) {
87 | if ($value === null) {
88 | $newValues[] = null;
89 | } else if ($first === null) {
90 | $first = $value;
91 | $newValues[] = 0.0;
92 | } else {
93 | $newValues[] = ($value - $first) / $first * 100;
94 | }
95 | }
96 | return $newValues;
97 | }
98 |
99 | function smooth(array $values, int $window): array {
100 | $newValues = [];
101 | foreach ($values as $i => $value) {
102 | if ($value === null) {
103 | $newValues[] = null;
104 | } else {
105 | // TODO: Can be done more efficiently, esp. if we stick to simple average.
106 | $sum = 0.0;
107 | $count = 0;
108 | for ($j = -$window; $j <= $window; $j++) {
109 | //$w = $window - abs($j) + 1;
110 | if (isset($values[$i+$j])) {
111 | $sum += $values[$i+$j];
112 | $count++;
113 | //$sum += $w * $values[$i+$j];
114 | //$count += $w;
115 | }
116 | }
117 | $newValues[] = $sum / $count;
118 | }
119 | }
120 | return $newValues;
121 | }
122 |
123 | ob_start("ob_gzhandler");
124 |
125 | $commits = getMainCommits();
126 | $stat = getStringParam('stat') ?? DEFAULT_METRIC;
127 | $bench = getStringParam('bench') ?? 'all';
128 | $relative = isset($_GET['relative']);
129 | $startDateStr = getStringParam('startDate') ?? '';
130 | $interval = getIntParam('interval') ?? 1;
131 | $configs = getConfigsParam('configs') ?? DEFAULT_CONFIGS;
132 | $width = getIntParam('width') ?? 480;
133 | $smoothWindow = getIntParam('smoothWindow') ?? 0;
134 |
135 | if (empty($_SERVER['QUERY_STRING'])) {
136 | // By default, show relative metrics for last month.
137 | $relative = true;
138 | $startDateStr = (new DateTime('-1 month'))->format('Y-m-d');
139 | }
140 |
141 | $startDate = $startDateStr ? new DateTime($startDateStr) : null;
142 |
143 | printHeader();
144 |
145 | echo "\n";
167 | echo " \n";
168 | echo "\n";
169 | echo " \n";
170 | echo "
175 | \n";
185 | echo "\n";
191 |
192 | if ($bench == 'all') {
193 | $benches = BENCHES;
194 | $benches[] = 'clang';
195 | } else {
196 | if (!in_array($bench, BENCHES) && $bench != 'clang') {
197 | die("Unknown benchmark " . h($bench));
198 | }
199 | $benches = [$bench];
200 | }
201 |
202 | if ($smoothWindow < 0 || $smoothWindow > 100) {
203 | echo "Invalid smoothing window
\n";
204 | return;
205 | }
206 |
207 | [$hashes, $dates, $data] = getData($commits, $configs, $benches, $stat, $interval, $startDate);
208 | if ($smoothWindow != 0) {
209 | transformData($data, fn($values) => smooth($values, $smoothWindow));
210 | }
211 | if ($relative) {
212 | transformData($data, 'makeRelative');
213 | }
214 |
215 | $numValues = count($hashes);
216 | foreach ($data as $bench => $benchValues) {
217 | $csv = "Date," . implode(",", array_keys($benchValues)) . "\n";
218 | for ($i = 0; $i < $numValues; ++$i) {
219 | $csv .= $dates[$i];
220 | foreach ($benchValues as $config => $values) {
221 | $csv .= ',' . $values[$i];
222 | }
223 | $csv .= "\n";
224 | }
225 |
226 | $encodedCsv = json_encode($csv);
227 | $encodedStat = json_encode($stat);
228 | echo <<
230 | $bench:
231 |
232 |
258 |
259 | HTML;
260 | }
261 |
262 | $encodedHashes = json_encode($hashes);
263 | echo <<
265 | hashes = $encodedHashes;
266 |
267 |
268 | HTML;
269 |
270 | printFooter();
271 |
--------------------------------------------------------------------------------
/public/index.php:
--------------------------------------------------------------------------------
1 | \n";
20 | echo "Config: "; printConfigSelect($config); echo " \n";
21 | echo "Metric: "; printStatSelect($stat); echo " \n";
22 | echo " \n";
23 | if ($sortBy !== 'date') {
24 | echo " \n";
25 | }
26 | if ($filterRemote) {
27 | echo " \n";
28 | }
29 | if ($filterBranch) {
30 | echo " \n";
31 | }
32 | if ($startHash) {
33 | echo " \n";
34 | }
35 | if ($numCommits != $defaultNumCommits) {
36 | echo " \n";
37 | }
38 | if ($minInterestingness > 0.0) {
39 | echo " \n";
40 | }
41 | echo "\n";
42 | echo " \n";
43 |
44 | $commitData = getAllCommits();
45 | $stddevs = new StdDevManager();
46 |
47 | echo "\n";
212 | printFooter();
213 |
214 | function formatCommit(array $commit): string {
215 | $hash = $commit['hash'];
216 | $shortHash = substr($hash, 0, 10);
217 | $title = h($commit['subject']);
218 | return "$shortHash ";
219 | }
220 |
221 | function printConfigSelect(string $name) {
222 | printSelect("config", $name, ['Overview', ...DEFAULT_CONFIGS]);
223 | }
224 |
225 | function groupByRemote(array $branchCommits): array {
226 | $remotes = [];
227 | foreach ($branchCommits as $branch => $commits) {
228 | $remote = strstr($branch, '/', true);
229 | $remotes[$remote][$branch] = $commits;
230 | }
231 |
232 | // Move the origin remote to the end. We display much more commits for it,
233 | // and don't want to obscure any of the "smaller" remotes.
234 | $origin = $remotes['origin'];
235 | unset($remotes['origin']);
236 | $remotes['origin'] = $origin;
237 | return $remotes;
238 | }
239 |
240 | function getNewestCommitDate(array $commits): DateTime {
241 | $commit = $commits[count($commits) - 1];
242 | return new DateTime($commit['commit_date']);
243 | }
244 |
245 | function sortBranchesByDate(array $branchCommits): array {
246 | uasort($branchCommits, function($a, $b) {
247 | return getNewestCommitDate($b) <=> getNewestCommitDate($a);
248 | });
249 | return $branchCommits;
250 | }
251 |
252 | function filterRecentBranches(array $branchCommits) {
253 | $now = new DateTime;
254 | return array_filter($branchCommits, function(array $commits) use ($now) {
255 | $date = getNewestCommitDate($commits);
256 | return $date->diff($now)->days <= 7;
257 | });
258 | }
259 |
260 | function partitionRemotes(array $remotes): array {
261 | $activeRemotes = [];
262 | $inactiveRemotes = [];
263 | foreach ($remotes as $remote => $branches) {
264 | $branches = filterRecentBranches($branches);
265 | if (empty($branches)) {
266 | $inactiveRemotes[] = $remote;
267 | } else {
268 | $activeRemotes[$remote] = $branches;
269 | }
270 | }
271 | return [$activeRemotes, $inactiveRemotes];
272 | }
273 |
274 | function findCommitIndex(array $commits, string $hash): ?int {
275 | foreach ($commits as $index => $commit) {
276 | if ($commit['hash'] === $hash) {
277 | return $index;
278 | }
279 | }
280 | return nuLL;
281 | }
282 |
283 | function filterCommits(array $commits, ?string $startHash, int $numCommits): array {
284 | // Note: Commits are ordered from oldest to newest
285 | if ($startHash !== null) {
286 | $startIndex = findCommitIndex($commits, $startHash);
287 | } else {
288 | $startIndex = count($commits) - 1;
289 | }
290 |
291 | if ($startIndex < $numCommits) {
292 | return [$commits, null];
293 | }
294 |
295 | $endIndex = $startIndex - $numCommits + 1;
296 | $filteredCommits = array_slice($commits, $endIndex, $numCommits);
297 | $nextStartHash = $commits[$endIndex - 1]['hash'] ?? null;
298 | return [$filteredCommits, $nextStartHash];
299 | }
300 |
301 | function filterByInterestingness(
302 | array $commits, string $config, string $stat, StdDevManager $stddevs,
303 | float $minInterestingness
304 | ): array {
305 | if ($minInterestingness <= 0.0) {
306 | return $commits;
307 | }
308 |
309 | $newCommits = [];
310 | $skippedCommits = [];
311 | $lastGeomean = null;
312 | foreach ($commits as $commit) {
313 | $hash = $commit['hash'];
314 | $summary = getSummaryForHash($hash);
315 | if ($summary === null) {
316 | continue;
317 | }
318 | $data = $summary->getConfig($config);
319 | if ($data === null) {
320 | continue;
321 | }
322 | $geomean = $data['geomean'][$stat];
323 | if ($lastGeomean !== null) {
324 | $stddev = $stddevs->getBenchStdDev($summary->configNum, $config, 'geomean', $stat);
325 | $diff = $geomean - $lastGeomean;
326 | $interestingness = getInterestingness($diff, $stddev);
327 | if ($diff !== 0.0 && $interestingness > $minInterestingness) {
328 | $numSkippedCommits = count($skippedCommits);
329 | if ($numSkippedCommits != 0) {
330 | if ($numSkippedCommits > 1) {
331 | // Indicate that some commits were omitted.
332 | $newCommits[] = null;
333 | }
334 | $newCommits[] = $skippedCommits[$numSkippedCommits - 1];
335 | }
336 | $skippedCommits = [];
337 | $newCommits[] = $commit;
338 | $lastGeomean = $geomean;
339 | continue;
340 | }
341 | }
342 | $skippedCommits[] = $commit;
343 | $lastGeomean = $geomean;
344 | }
345 | return $newCommits;
346 | }
347 |
--------------------------------------------------------------------------------
/public/ninja_trace.php:
--------------------------------------------------------------------------------
1 | threads as $id => &$end) {
23 | if ($end < $e->start) {
24 | $end = $e->end;
25 | return $id;
26 | }
27 | }
28 | $this->threads[] = $e->end;
29 | return \count($this->threads) - 1;
30 | }
31 | }
32 |
33 | // Sort by reverse start.
34 | uasort($data, fn(LogEntry $a, LogEntry $b) => $a->start <=> $b->start);
35 |
36 | $threads = new Threads;
37 | $result = [];
38 | foreach ($data as $name => $entry) {
39 | $tid = $threads->alloc($entry);
40 | $result[] = [
41 | 'name' => $name,
42 | 'cat' => 'targets',
43 | 'ph' => 'X',
44 | 'ts' => $entry->start * 1000,
45 | 'dur' => ($entry->end - $entry->start) * 1000,
46 | 'pid' => 0,
47 | 'tid' => $tid,
48 | ];
49 | }
50 |
51 | header('Content-Type: application/octet-stream');
52 | header("Content-Disposition: attachment; filename=\"trace.json\"");
53 | echo json_encode($result);
54 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Allow: /about.php
3 | Disallow: /
4 |
--------------------------------------------------------------------------------
/public/show_error.php:
--------------------------------------------------------------------------------
1 | ";
26 | echo "" . htmlspecialchars(file_get_contents($errorFile)) . " ";
27 |
--------------------------------------------------------------------------------
/restart.sh:
--------------------------------------------------------------------------------
1 | killall php
2 | killall ninja
3 | php ./runner.php >log 2>&1 &
4 |
--------------------------------------------------------------------------------
/runner.php:
--------------------------------------------------------------------------------
1 | 2,
34 | 'stage2-O0-g' => 2,
35 | ];
36 | $llvmTimeout = 20 * 60; // 20 minutes
37 | $benchTimeout = 5 * 60; // 5 minutes
38 | $fetchTimeout = 45; // 45 seconds
39 |
40 | $firstCommit = '36c1e568bb4f8e482e3f713c8cb9460c5cf19863';
41 | $buildAfterCommit = '366ff3a89880139a132fe2738f36b39c89f5333e';
42 | $branchPatterns = [
43 | '~^[^/]+/perf/.*~',
44 | '~^origin/main$~',
45 | '~^origin/release/(?:1[1-9]|2\d).x$~',
46 | ];
47 |
48 | $gitWrapper = new GitWrapper();
49 | $repo = $gitWrapper->workingCopy(__DIR__ . '/llvm-project');
50 | $dataRepo = $gitWrapper->workingCopy(__DIR__ . '/data');
51 | $stddevs = new StdDevManager();
52 |
53 | // We --prune remote branches, but don't want old experiments in the commits file
54 | // to be removed. For this reason, load the old data and overwrite the data, thus
55 | // not touching branches that have been removed upstream.
56 | $branchCommits = json_decode(file_get_contents($commitsFile), true);
57 | $remotes = [];
58 | while (true) {
59 | logInfo("Fetching remotes");
60 | foreach (explode("\n", rtrim($repo->remote())) as $remote) {
61 | $remotes[$remote] ??= new RemoteInfo();
62 | }
63 | updateLastCommitDates($remotes, $branchCommits);
64 | $now = new DateTime();
65 | uasort($remotes, function(RemoteInfo $r1, RemoteInfo $r2) use ($now) {
66 | return $r1->getScore($now) <=> $r2->getScore($now);
67 | });
68 | $fetchStart = time();
69 | foreach ($remotes as $remote => $info) {
70 | logInfo("Fetching $remote with score {$info->getScore($now)}");
71 | try {
72 | $repo->fetch($remote, ['prune' => true]);
73 | $info->lastFetch = $now;
74 | } catch (GitException $e) {
75 | logError($e->getMessage());
76 | }
77 | if (time() - $fetchStart > $fetchTimeout) {
78 | break;
79 | }
80 | }
81 |
82 | // Redoing all this work might get inefficient at some point...
83 | logInfo("Fetching commits");
84 | $branches = getRelevantBranches($repo, $branchPatterns);
85 | foreach ($branches as $branch) {
86 | $branchCommits[$branch] = getBranchCommits(
87 | $repo, $branch, $firstCommit, $branchCommits[$branch] ?? []);
88 | }
89 |
90 | logInfo("Finding work item");
91 | $workItem = getWorkItem($branchCommits, $stddevs, $buildAfterCommit);
92 | if ($workItem === null) {
93 | // Wait before checking for a new commit.
94 | sleep($sleepInterval);
95 | continue;
96 | }
97 |
98 | $hash = $workItem->hash;
99 | $configs = $workItem->configs;
100 | $reason = $workItem->reason;
101 | $hashDir = getDirForHash(CURRENT_DATA_DIR, $hash);
102 | logInfo("Building $hash. Reason: $reason");
103 |
104 | $repo->checkout($hash);
105 | @mkdir($hashDir, 0755, true);
106 |
107 | testHash($hash, $configs, $configNum, $runs, $llvmTimeout, $benchTimeout, $ctmarkDir);
108 | file_put_contents($commitsFile, json_encode($branchCommits, JSON_PRETTY_PRINT));
109 |
110 | $dataRepo->add('.');
111 | $dataRepo->commit('-m', 'Add data');
112 | try {
113 | $dataRepo->push('origin', 'master');
114 | } catch (GitException $e) {
115 | // Log the failure, but carry on, we can push the data later.
116 | logError($e->getMessage());
117 | }
118 | }
119 |
120 | function testHash(
121 | string $hash, array $configs,
122 | int $configNum, array $runs,
123 | int $llvmTimeout, int $benchTimeout,
124 | string $ctmarkDir) {
125 | $stage1Stats = buildStage($hash, 1, $llvmTimeout);
126 | if (null === $stage1Stats) {
127 | return null;
128 | }
129 |
130 | $stage2Stats = buildStage($hash, 2, $llvmTimeout);
131 | if (null === $stage2Stats) {
132 | return null;
133 | }
134 |
135 | [$stage2Stats, $ninjaLog] = parseStage2Stats($stage2Stats, '/tmp/llvm-project-build-stage2');
136 |
137 | $stats = [];
138 | $summary = new Summary($configNum, $stage1Stats, $stage2Stats, []);
139 | foreach ($configs as $config) {
140 | $rawDatas = [];
141 | $numRuns = $runs[$config] ?? 1;
142 | for ($run = 1; $run <= $numRuns; $run++) {
143 | logInfo("Building $config configuration (run $run)");
144 | try {
145 | [$stage, $realConfig] = explode('-', $config, 2);
146 | $arch = '';
147 | if (str_starts_with($realConfig, 'aarch64-')) {
148 | $realConfig = str_replace('aarch64-', '', $realConfig);
149 | $arch = 'aarch64';
150 | }
151 | // Use our own timeit.sh script.
152 | copy(__DIR__ . '/timeit.sh', __DIR__ . '/llvm-test-suite/tools/timeit.sh');
153 | runBuildCommand("./build_llvm_test_suite.sh $realConfig $stage $arch", $benchTimeout);
154 | } catch (CommandException $e) {
155 | writeError($hash, $e);
156 | // Skip this config, but test others.
157 | continue 2;
158 | }
159 | $rawDatas[] = readRawData($ctmarkDir);
160 | }
161 |
162 | $data = $runs > 1 ? averageRawData($rawDatas) : $rawDatas[0];
163 | $stats[$config] = $data;
164 | $summary->data[$config] = summarizeData($data);
165 | }
166 |
167 | writeSummaryForHash($hash, $summary);
168 | writeStatsForHash($hash, $stats);
169 | writeReducedNinjaLog($hash, $ninjaLog);
170 | }
171 |
172 | function buildStage(string $hash, int $stage, int $llvmTimeout): ?array {
173 | try {
174 | logInfo("Building stage$stage clang");
175 | $startTime = microtime(true);
176 | runBuildCommand("./build_llvm_project_stage$stage.sh", $llvmTimeout);
177 | $buildTime = microtime(true) - $startTime;
178 | } catch (CommandException $e) {
179 | writeError($hash, $e);
180 | return null;
181 | }
182 |
183 | // Gather statistics on the size of the clang binary.
184 | $stats = computeSizeStatsForObject("/tmp/llvm-project-build-stage$stage/bin/clang");
185 | $stats['wall-time'] = $buildTime;
186 | return $stats;
187 | }
188 |
189 | function writeReducedNinjaLog(string $hash, array $log): void {
190 | $result = '';
191 | foreach ($log as $elems) {
192 | $result .= implode("\t", $elems) . "\n";
193 | }
194 | $file = getDirForHash(CURRENT_DATA_DIR, $hash) . "/stage2log.gz";
195 | file_put_contents($file, gzencode($result, 9));
196 | }
197 |
198 | function logWithLevel(string $level, string $str) {
199 | $date = (new DateTime())->format('Y-m-d H:i:s.v');
200 | echo "[RUNNER] [$level] [$date] $str\n";
201 | }
202 |
203 | function logInfo(string $str) {
204 | logWithLevel("INFO", $str);
205 | }
206 |
207 | function logError(string $str) {
208 | logWithLevel("ERROR", $str);
209 | }
210 |
211 | function getLastLines(string $str, int $numLines): string {
212 | $lines = explode("\n", $str);
213 | $lines = array_slice($lines, -$numLines);
214 | return implode("\n", $lines);
215 | }
216 |
217 | class CommandException extends Exception {
218 | public $stdout;
219 | public $stderr;
220 |
221 | public function __construct(string $message, string $stdout, string $stderr) {
222 | parent::__construct($message);
223 | $this->stdout = $stdout;
224 | $this->stderr = $stderr;
225 | }
226 |
227 | public function getDebugOutput(): string {
228 | return "MESSAGE: " . $this->getMessage()
229 | . "\n\nSTDOUT:\n" . getLastLines($this->stdout, 200)
230 | . "\n\nSTDERR:\n" . getLastLines($this->stderr, 200);
231 | }
232 | }
233 |
234 | function runCommand(string $command, ?int $timeout = null): void {
235 | $process = Process::fromShellCommandline($command);
236 | $process->setTimeout($timeout);
237 | $exitCode = $process->run(function($type, $buffer) {
238 | echo $buffer;
239 | });
240 | if ($exitCode !== 0) {
241 | throw new CommandException(
242 | "Execution of \"$command\" failed",
243 | $process->getOutput(), $process->getErrorOutput()
244 | );
245 | }
246 | }
247 |
248 | function runBuildCommand(string $command, int $timeout): void {
249 | try {
250 | runCommand('sudo -u lctt-runner ' . $command, $timeout);
251 | } catch (ProcessTimedOutException $e) {
252 | // Kill ninja, which should kill any hanging clang/ld processes.
253 | try {
254 | runCommand("killall ninja clang++");
255 | } catch (CommandException $_) {
256 | /* We don't care if there was nothing to kill. */
257 | }
258 | $process = $e->getProcess();
259 | throw new CommandException(
260 | $e->getMessage(), $process->getOutput(), $process->getErrorOutput()
261 | );
262 | }
263 | }
264 |
265 | function getParsedLog(GitWorkingCopy $repo, string $branch, string $baseCommit) {
266 | $log = $repo->log(
267 | '--pretty=format:%H;%an;%cI;%s',
268 | '--reverse',
269 | '--first-parent',
270 | "$baseCommit^..$branch");
271 | $lines = explode("\n", $log);
272 |
273 | $parsedLog = [];
274 | foreach ($lines as $line) {
275 | $parts = explode(';', $line, 4);
276 | $parsedLog[] = [
277 | "hash" => $parts[0],
278 | "author_name" => $parts[1],
279 | "commit_date" => $parts[2],
280 | "subject" => $parts[3]
281 | ];
282 | }
283 | return $parsedLog;
284 | }
285 |
286 | function getRelevantBranches(GitWorkingCopy $repo, array $branchPatterns): array {
287 | return array_filter($repo->getBranches()->remote(), function($branch) use($branchPatterns) {
288 | foreach ($branchPatterns as $pattern) {
289 | if (preg_match($pattern, $branch)) {
290 | return true;
291 | }
292 | }
293 | return false;
294 | });
295 | }
296 |
297 | function getBranchCommits(
298 | GitWorkingCopy $repo, string $branch, string $firstCommit, array $prevCommits
299 | ): array {
300 | // Merge base calculations are expensive. If the HEAD commit of the branch did not change,
301 | // reuse the previous result.
302 | if (null !== $key = array_key_last($prevCommits)) {
303 | $prevLastCommit = $prevCommits[$key]['hash'];
304 | $curLastCommit = trim($repo->run('rev-parse', [$branch]));
305 | if ($prevLastCommit === $curLastCommit) {
306 | return $prevCommits;
307 | }
308 | }
309 |
310 | if ($branch === 'origin/main') {
311 | return getParsedLog($repo, $branch, $firstCommit);
312 | }
313 | $mergeBase = trim($repo->run('merge-base', [$branch, 'origin/main']));
314 | $commits = getParsedLog($repo, $branch, $mergeBase);
315 | // Ignore branches to which a large number of new commits was pushed,
316 | // this was likely a mistake. Only add the last commit to indicate that
317 | // the branch has been processed at all.
318 | if (count($commits) > count($prevCommits) + 100) {
319 | return [end($commits)];
320 | }
321 | return $commits;
322 | }
323 |
324 | function haveData(string $hash): bool {
325 | return file_exists(getDirForHash(CURRENT_DATA_DIR, $hash) . '/summary.json');
326 | }
327 |
328 | function haveError(string $hash): bool {
329 | return file_exists(getDirForHash(CURRENT_DATA_DIR, $hash) . '/error');
330 | }
331 |
332 | function writeError(string $hash, Exception $e): void {
333 | echo $e->getMessage(), "\n";
334 | file_put_contents(
335 | getDirForHash(CURRENT_DATA_DIR, $hash) . '/error',
336 | $e->getDebugOutput(), FILE_APPEND);
337 | }
338 |
339 | function getMissingConfigs(string $hash): array {
340 | if (haveError($hash) || haveData($hash)) {
341 | return [];
342 | }
343 |
344 | return RUNNER_CONFIGS;
345 | }
346 |
347 | class WorkItem {
348 | public function __construct(
349 | public string $hash,
350 | public array $configs,
351 | public string $reason,
352 | ) {}
353 | }
354 |
355 | class WorkItemCandidate {
356 | public function __construct(
357 | public WorkItem $workItem,
358 | public string $branch,
359 | public DateTime $date,
360 | ) {}
361 | }
362 |
363 | function getHeadWorkItem(array $commits): ?WorkItem {
364 | $head = $commits[count($commits) - 1];
365 | $hash = $head['hash'];
366 | if ($configs = getMissingConfigs($hash)) {
367 | return new WorkItem($hash, $configs, "New HEAD commit");
368 | }
369 | return null;
370 | }
371 |
372 | function getNewestWorkItemCandidate(
373 | string $branch, array $commits
374 | ): ?WorkItemCandidate {
375 | // Process newer commits first.
376 | foreach (array_reverse($commits) as $commit) {
377 | $hash = $commit['hash'];
378 | if ($configs = getMissingConfigs($hash)) {
379 | return new WorkItemCandidate(
380 | new WorkItem($hash, $configs, "Newest commit"),
381 | $branch, new DateTime($commit['commit_date'])
382 | );
383 | }
384 | }
385 | return null;
386 | }
387 |
388 | class MissingRange {
389 | public $hash1;
390 | public $hash2;
391 | public $missingHashes;
392 |
393 | public function __construct(string $hash1, string $hash2, array $missingHashes) {
394 | $this->hash1 = $hash1;
395 | $this->hash2 = $hash2;
396 | $this->missingHashes = $missingHashes;
397 | }
398 |
399 | public function getNonErrorSize(): int {
400 | $size = 0;
401 | foreach ($this->missingHashes as list(, $haveError)) {
402 | if (!$haveError) {
403 | $size++;
404 | }
405 | }
406 | return $size;
407 | }
408 |
409 | public function getBisectWorkItem(string $reason): WorkItem {
410 | $ranges = $this->getErrorFreeRanges();
411 | $largestRange = null;
412 | foreach ($ranges as $range) {
413 | if ($largestRange === null || count($range) > count($largestRange)) {
414 | $largestRange = $range;
415 | }
416 | }
417 |
418 | $idx = intdiv(count($largestRange), 2);
419 | $hash = $largestRange[$idx];
420 | return new WorkItem($hash, getMissingConfigs($hash), $reason);
421 | }
422 |
423 | private function getErrorFreeRanges(): array {
424 | $ranges = [];
425 | $curRange = [];
426 | foreach ($this->missingHashes as list($hash, $haveError)) {
427 | if (!$haveError) {
428 | $curRange[] = $hash;
429 | } else if (!empty($curRange)) {
430 | $ranges[] = $curRange;
431 | $curRange = [];
432 | }
433 | }
434 | if (!empty($curRange)) {
435 | $ranges[] = $curRange;
436 | }
437 | return $ranges;
438 | }
439 | }
440 |
441 | function getMissingRanges(array $commits): array {
442 | $lastPresentHash = null;
443 | $missingHashes = [];
444 | $missingRanges = [];
445 | foreach (array_reverse($commits) as $commit) {
446 | $hash = $commit['hash'];
447 | $haveError = haveError($hash);
448 | if ($haveError || getMissingConfigs($hash)) {
449 | $missingHashes[] = [$hash, $haveError];
450 | } else {
451 | if ($missingHashes && $lastPresentHash) {
452 | $missingRange = new MissingRange($lastPresentHash, $hash, $missingHashes);
453 | if ($missingRange->getNonErrorSize() !== 0) {
454 | $missingRanges[] = $missingRange;
455 | }
456 | }
457 |
458 | $missingHashes = [];
459 | $lastPresentHash = $hash;
460 | }
461 | }
462 | return $missingRanges;
463 | }
464 |
465 | function getInterestingness(
466 | Summary $summary1, Summary $summary2, string $config, StdDevManager $stddevs
467 | ): ?float {
468 | $sigma = 5;
469 | $stat = 'instructions:u';
470 | $configNum = $summary2->configNum;
471 | if ($config === 'stage2-clang') {
472 | $value1 = $summary1->stage2Stats[$stat];
473 | $value2 = $summary2->stage2Stats[$stat];
474 | $diff = abs($value1 - $value2);
475 | $stddev = $stddevs->getBenchStdDev($configNum, 'build', 'stage2-clang', $stat);
476 | if ($stddev !== null && $stddev !== 0.0) {
477 | $interestingness = $diff / $stddev;
478 | if ($interestingness > $sigma) {
479 | return $interestingness;
480 | }
481 | }
482 | return null;
483 | }
484 |
485 | $data1 = $summary1->getConfig($config);
486 | $data2 = $summary2->getConfig($config);
487 | if (!$data1 || !$data2) {
488 | return null;
489 | }
490 |
491 | $maxInterestingness = null;
492 | foreach (['instructions:u'] as $stat) {
493 | foreach ($data1 as $bench => $stats1) {
494 | $stats2 = $data2[$bench];
495 | $value1 = $stats1[$stat];
496 | $value2 = $stats2[$stat];
497 | $diff = abs($value1 - $value2);
498 | $stddev = $stddevs->getBenchStdDev($configNum, $config, $bench, $stat);
499 | if ($stddev !== null && $stddev !== 0.0) {
500 | $interestingness = $diff / $stddev;
501 | if ($interestingness > $sigma &&
502 | ($maxInterestingness === null || $interestingness > $maxInterestingness)) {
503 | $maxInterestingness = $interestingness;
504 | }
505 | }
506 | }
507 | }
508 | return $maxInterestingness;
509 | }
510 |
511 | function getMostInterestingWorkItem(array $missingRanges, StdDevManager $stddevs): ?WorkItem {
512 | $mostInterestingRange = null;
513 | foreach ($missingRanges as $missingRange) {
514 | $summary1 = getSummaryForHash($missingRange->hash1);
515 | $summary2 = getSummaryForHash($missingRange->hash2);
516 | if (!$summary1 || !$summary2) {
517 | continue;
518 | }
519 |
520 | foreach ([...RUNNER_CONFIGS, 'stage2-clang'] as $config) {
521 | $interestingness = getInterestingness($summary1, $summary2, $config, $stddevs);
522 | if ($interestingness != null) {
523 | if ($mostInterestingRange === null || $interestingness > $mostInterestingRange[2]) {
524 | $mostInterestingRange = [$missingRange, $config, $interestingness];
525 | }
526 | }
527 | }
528 | }
529 | if ($mostInterestingRange !== null) {
530 | return $mostInterestingRange[0]->getBisectWorkItem(
531 | "Bisecting interesting range for config " . $mostInterestingRange[1]);
532 | }
533 | return null;
534 | }
535 |
536 | function getBisectWorkItem(array $missingRanges): ?WorkItem {
537 | $largestMissingRange = null;
538 | foreach ($missingRanges as $missingRange) {
539 | if (!$largestMissingRange ||
540 | $missingRange->getNonErrorSize() > $largestMissingRange->getNonErrorSize()) {
541 | $largestMissingRange = $missingRange;
542 | }
543 | }
544 | if ($largestMissingRange) {
545 | return $largestMissingRange->getBisectWorkItem("Bisecting range");
546 | }
547 | return null;
548 | }
549 |
550 | function getRecentCommits(array $commits, ?string $buildAfterCommit): array {
551 | $recentCommits = [];
552 | $now = new DateTime();
553 | foreach ($commits as $commit) {
554 | if ($commit['hash'] === $buildAfterCommit) {
555 | $recentCommits = [];
556 | continue;
557 | }
558 |
559 | $date = new DateTime($commit['commit_date']);
560 | if ($date->diff($now)->days > 10) {
561 | continue;
562 | }
563 | $recentCommits[] = $commit;
564 | }
565 | return $recentCommits;
566 | }
567 |
568 | function getWorkItem(
569 | array $branchCommits, StdDevManager $stddevs, ?string $buildAfterCommit
570 | ): ?WorkItem {
571 | $candidates = [];
572 | foreach ($branchCommits as $branch => $commits) {
573 | // First process all non-main branches.
574 | if ($branch == 'origin/main') {
575 | continue;
576 | }
577 |
578 | // Build the newest missing commit.
579 | $candidate = getNewestWorkItemCandidate($branch, $commits);
580 | if ($candidate) {
581 | $candidates[] = $candidate;
582 | }
583 | }
584 |
585 | if (!empty($candidates)) {
586 | usort(
587 | $candidates,
588 | function(WorkItemCandidate $c1, WorkItemCandidate $c2): int {
589 | // Prefer non-origin branches.
590 | $isOrigin1 = str_starts_with($c1->branch, 'origin/');
591 | $isOrigin2 = str_starts_with($c2->branch, 'origin/');
592 | if ($isOrigin1 != $isOrigin2) {
593 | return $isOrigin1 ? 1 : -1;
594 | }
595 | // Prefer older commits.
596 | return $c1->date <=> $c2->date;
597 | });
598 | return $candidates[0]->workItem;
599 | }
600 |
601 | // Then build the main branch.
602 | $branch = 'origin/main';
603 | $commits = $branchCommits[$branch];
604 |
605 | // Don't try to build too old commits.
606 | $commits = getRecentCommits($commits, $buildAfterCommit);
607 | if (empty($commits)) {
608 | return null;
609 | }
610 |
611 | /*$firstHash = $commits[0]['hash'];
612 | if ($configs = getMissingConfigs($firstHash)) {
613 | return new WorkItem($firstHash, $configs, 'First commit');
614 | }*/
615 |
616 | $missingRanges = getMissingRanges($commits);
617 | // Bisect ranges where a signficant change occurred,
618 | // to pin-point the exact revision.
619 | if ($workItem = getMostInterestingWorkItem($missingRanges, $stddevs)) {
620 | return $workItem;
621 | }
622 | // Build new commit.
623 | if ($workItem = getHeadWorkItem($commits)) {
624 | return $workItem;
625 | }
626 | // Bisect large ranges, so gaps are smaller.
627 | if ($workItem = getBisectWorkItem($missingRanges)) {
628 | return $workItem;
629 | }
630 | // Build the newest missing commit.
631 | if ($candidate = getNewestWorkItemCandidate($branch, $commits)) {
632 | return $candidate->workItem;
633 | }
634 | return null;
635 | }
636 |
637 | class RemoteInfo {
638 | public ?DateTime $lastCommit = null;
639 | public ?DateTime $lastFetch = null;
640 |
641 | public function getScore(DateTime $now): float {
642 | $score = 0.0;
643 | if ($this->lastCommit === null) {
644 | $score += 10.0;
645 | } else {
646 | $dt = $now->getTimestamp() - $this->lastCommit->getTimestamp();
647 | $score += max(min(log($dt / (60*60)), 10), 0);
648 | }
649 | if ($this->lastFetch === null) {
650 | $score -= 10.0;
651 | } else {
652 | $dt = $now->getTimestamp() - $this->lastFetch->getTimestamp();
653 | $score -= max(min($dt / (60*60), 10), 0);
654 | }
655 | return $score;
656 | }
657 | }
658 |
659 | function updateLastCommitDates(array $remotes, array $branchCommits) {
660 | foreach ($branchCommits as $branch => $commits) {
661 | $remote = strstr($branch, "/", before_needle: true);
662 | if ($remote === false || empty($commits) || !isset($remotes[$remote])) {
663 | continue;
664 | }
665 | $newestCommit = $commits[count($commits) - 1];
666 | $date = new DateTime($newestCommit['commit_date']);
667 | if ($remotes[$remote]->lastCommit === null ||
668 | $remotes[$remote]->lastCommit < $date
669 | ) {
670 | $remotes[$remote]->lastCommit = $date;
671 | }
672 | }
673 | }
674 |
--------------------------------------------------------------------------------
/setup.sh:
--------------------------------------------------------------------------------
1 | sudo apt update
2 | sudo apt install -y \
3 | binutils-dev ccache composer cmake g++ \
4 | g++-aarch64-linux-gnu binutils-aarch64-linux-gnu \
5 | linux-tools-common linux-tools-generic linux-cloud-tools-generic \
6 | php-cli php-msgpack php-zip \
7 | ninja-build tcl time
8 | git clone https://github.com/llvm/llvm-project.git
9 | git clone https://github.com/llvm/llvm-test-suite.git
10 | git clone git@github.com:nikic/llvm-compile-time-data-1.git data
11 | git config --global user.name "LLVM Compile Time Bot"
12 | git config --global user.email "nikita.ppv+llvm-ct@gmail.com"
13 | composer install
14 | sudo useradd -m lctt-runner
15 | sudo -u lctt-runner ccache -M 50G
16 | # Set kernel.perf_event_paranoid=0 in /etc/sysctl.conf
17 |
--------------------------------------------------------------------------------
/src/build_log.php:
--------------------------------------------------------------------------------
1 | end - $this->start;
21 | case 'size-file':
22 | return $this->size ?: null;
23 | case 'instructions:u':
24 | return $this->instructions ?: null;
25 | default:
26 | return null;
27 | }
28 | }
29 | }
30 |
31 | function readBuildLog(string $hash) {
32 | $path = getPathForHash($hash, '/stage2log.gz');
33 | if ($path === null) {
34 | return null;
35 | }
36 |
37 | $contents = gzdecode(file_get_contents($path));
38 | $result = [];
39 | foreach (explode("\n", trim($contents)) as $line) {
40 | [$start, $end, $file, $size, $instructions] = explode("\t", $line);
41 | $result[$file] = new LogEntry($start, $end, $size, $instructions);
42 | }
43 |
44 | return $result;
45 | }
46 |
--------------------------------------------------------------------------------
/src/common.php:
--------------------------------------------------------------------------------
1 | 'LegacyPM-O3',
27 | 'ReleaseThinLTO' => 'LegacyPM-ReleaseThinLTO',
28 | 'ReleaseLTO-g' => 'LegacyPM-ReleaseLTO-g',
29 | 'O0-g' => 'LegacyPM-O0-g',
30 | 'NewPM-O3' => 'stage1-O3',
31 | 'NewPM-ReleaseThinLTO' => 'stage1-ReleaseThinLTO',
32 | 'NewPM-ReleaseLTO-g' => 'stage1-ReleaseLTO-g',
33 | 'NewPM-O0-g' => 'stage1-O0-g',
34 | ];
35 | const REAL_BENCHES = [
36 | 'kimwitu++',
37 | 'sqlite3',
38 | 'consumer-typeset',
39 | 'Bullet',
40 | 'tramp3d-v4',
41 | 'mafft',
42 | 'ClamAV',
43 | 'lencod',
44 | 'SPASS',
45 | '7zip',
46 | ];
47 | const BENCHES = [
48 | 'geomean',
49 | ...REAL_BENCHES,
50 | ];
51 | const BENCHES_GEOMEAN_LAST = [
52 | ...REAL_BENCHES,
53 | 'geomean',
54 | ];
55 |
56 | function array_column_with_keys(array $array, $column): array {
57 | $result = [];
58 | foreach ($array as $key => $subArray) {
59 | if (isset($subArray[$column])) {
60 | $result[$key] = $subArray[$column];
61 | }
62 | }
63 | return $result;
64 | }
65 |
66 | function geomean(array $stats): float {
67 | return pow(array_product($stats), 1/count($stats));
68 | }
69 |
70 | function getDirForHash(string $dataDir, string $hash): string {
71 | return $dataDir . '/experiments/' . substr($hash, 0, 2) . '/' . substr($hash, 2);
72 | }
73 |
74 | function getPathForHash(string $hash, string $file): ?string {
75 | foreach (DATA_DIRS as $dataDir) {
76 | $path = getDirForHash($dataDir, $hash) . '/' . $file;
77 | if (file_exists($path)) {
78 | return $path;
79 | }
80 | }
81 | return null;
82 | }
83 |
84 | function hasBuildError(string $hash): bool {
85 | return getPathForHash($hash, '/error') !== null;
86 | }
87 |
88 | function addGeomean(array $summary): array {
89 | $statValues = [];
90 | foreach ($summary as $bench => $stats) {
91 | foreach ($stats as $stat => $value) {
92 | $statValues[$stat][] = $value;
93 | }
94 | }
95 | $summary['geomean'] = array_map('geomean', $statValues);
96 | return $summary;
97 | }
98 |
99 | function upgradeConfigName(string $config): string {
100 | return CONFIG_RENAMES[$config] ?? $config;
101 | }
102 |
103 | function upgradeConfigNameKeys(array $data): array {
104 | $newData = [];
105 | foreach ($data as $config => $configData) {
106 | $newData[upgradeConfigName($config)] = $configData;
107 | }
108 | return $newData;
109 | }
110 |
111 | class Summary {
112 | public int $configNum;
113 | public array $stage1Stats;
114 | public array $stage2Stats;
115 | public array $data;
116 |
117 | public function __construct(
118 | int $configNum, array $stage1Stats, array $stage2Stats, array $data
119 | ) {
120 | $this->configNum = $configNum;
121 | $this->stage1Stats = $stage1Stats;
122 | $this->stage2Stats = $stage2Stats;
123 | $this->data = $data;
124 | }
125 |
126 | public static function fromArray(array $data): Summary {
127 | return new Summary(
128 | $data['config'],
129 | $data['clang_size'],
130 | $data['stage2'] ?? [],
131 | upgradeConfigNameKeys($data['data'])
132 | );
133 | }
134 |
135 | public function toArray(): array {
136 | return [
137 | 'config' => $this->configNum,
138 | 'clang_size' => $this->stage1Stats,
139 | 'stage2' => $this->stage2Stats,
140 | 'data' => $this->data,
141 | ];
142 | }
143 |
144 | public function getConfig(string $config): ?array {
145 | return $this->data[$config] ?? null;
146 | }
147 |
148 | public function getConfigStat(string $config, string $stat): ?array {
149 | $data = $this->getConfig($config);
150 | if ($data === null) {
151 | return null;
152 | }
153 | return array_column_with_keys($data, $stat);
154 | }
155 |
156 | public function getGeomeanStats(string $stat): ?array {
157 | $result = [];
158 | foreach ($this->data as $config => $configStats) {
159 | $result[$config] = $configStats['geomean'][$stat] ?? null;
160 | }
161 | return $result;
162 | }
163 | }
164 |
165 | function getSummaryForHash(string $hash): ?Summary {
166 | $file = getPathForHash($hash, "/summary.json");
167 | if ($file === null) {
168 | return null;
169 | }
170 |
171 | return Summary::fromArray(json_decode(file_get_contents($file), true));
172 | }
173 |
174 | function writeSummaryForHash(string $hash, Summary $summary): void {
175 | $file = getDirForHash(CURRENT_DATA_DIR, $hash) . "/summary.json";
176 | file_put_contents($file, json_encode($summary->toArray(), JSON_PRETTY_PRINT));
177 | }
178 |
179 | function getStatsForHash(string $hash): array {
180 | $file = getPathForHash($hash, "/stats.msgpack.gz");
181 | if ($file === null) {
182 | return [];
183 | }
184 |
185 | return upgradeConfigNameKeys(msgpack_unpack(gzdecode(file_get_contents($file))));
186 | }
187 |
188 | function writeStatsForHash(string $hash, array $stats): void {
189 | $file = getDirForHash(CURRENT_DATA_DIR, $hash) . "/stats.msgpack.gz";
190 | file_put_contents($file, gzencode(msgpack_pack($stats), 9));
191 | }
192 |
193 | function getSummary(string $hash, string $config): ?array {
194 | $summary = getSummaryForHash($hash);
195 | return $summary->data[$config] ?? null;
196 | }
197 |
198 | function getStats(string $hash, string $config): ?array {
199 | $stats = getStatsForHash($hash);
200 | return $stats[$config] ?? null;
201 | }
202 |
203 | class StdDevManager {
204 | private array $summaryData = [];
205 | private array $statsData = [];
206 |
207 | private function initSummaryData(int $configNum): void {
208 | if (!isset($this->summaryData[$configNum])) {
209 | $path = __DIR__ . "/../stddev/summary_$configNum.json";
210 | $this->summaryData[$configNum] = file_exists($path)
211 | ? upgradeConfigNameKeys(json_decode(file_get_contents($path), true))
212 | : null;
213 | }
214 | }
215 |
216 | private function initStatsData(int $configNum): void {
217 | if (!isset($this->statsData[$configNum])) {
218 | $path = __DIR__ . "/../stddev/stats_$configNum.msgpack";
219 | $this->statsData[$configNum] = file_exists($path)
220 | ? upgradeConfigNameKeys(msgpack_unpack(file_get_contents($path)))
221 | : null;
222 | }
223 | }
224 |
225 | public function getBenchStdDev(
226 | int $configNum, string $config, string $bench, string $stat
227 | ): ?float {
228 | $this->initSummaryData($configNum);
229 | return $this->summaryData[$configNum][$config][$bench][$stat] ?? null;
230 | }
231 |
232 | public function getFileStdDev(
233 | int $configNum, string $config, string $file, string $stat
234 | ): ?float {
235 | $this->initStatsData($configNum);
236 | return $this->statsData[$configNum][$config][$file][$stat] ?? null;
237 | }
238 | }
239 |
240 | // From oldest to newest
241 | function getMainCommits(): iterable {
242 | foreach (array_reverse(DATA_DIRS) as $dataDir) {
243 | $commitsFile = $dataDir . '/commits.json';
244 | $commits = json_decode(file_get_contents($commitsFile), true);
245 | yield from $commits['origin/main'];
246 | }
247 | }
248 |
249 | // FIXME: Implement this in a way that does not require loading all commits.json files into memory.
250 | function getAllCommits(): array {
251 | $allCommits = [];
252 | foreach (array_reverse(DATA_DIRS) as $dataDir) {
253 | $commitsFile = $dataDir . '/commits.json';
254 | $branchCommits = json_decode(file_get_contents($commitsFile), true);
255 | foreach ($branchCommits as $branch => $commits) {
256 | $existing = $allCommits[$branch] ?? [];
257 | $allCommits[$branch] = array_merge($existing, $commits);
258 | }
259 | }
260 | return $allCommits;
261 | }
262 |
--------------------------------------------------------------------------------
/src/data_aggregation.php:
--------------------------------------------------------------------------------
1 | $stats) {
10 | foreach ($stats as $name => $stat) {
11 | // When aggregating size stats, we want to report the size of the binary
12 | // as the aggregate stat, not the sum of all object files.
13 | if (0 === strpos($name, 'size-') && !preg_match('/\.link$/', $file)) {
14 | continue;
15 | }
16 |
17 | assert(is_float($stat));
18 | if (!isset($aggStats[$name])) {
19 | $aggStats[$name] = 0.0;
20 | }
21 | $aggStats[$name] += $stat;
22 | }
23 | }
24 | return $aggStats;
25 | }
26 |
27 | function average(array $values): float {
28 | return array_sum($values) / count($values);
29 | }
30 |
31 | function averageRawData(array $rawDatas): array {
32 | $data = [];
33 | foreach ($rawDatas as $rawData) {
34 | foreach ($rawData as $bench => $files) {
35 | foreach ($files as $file => $stats) {
36 | foreach ($stats as $stat => $value) {
37 | $data[$bench][$file][$stat][] = $value;
38 | }
39 | }
40 | }
41 | }
42 |
43 | $avgData = [];
44 | foreach ($data as $bench => $benchData) {
45 | foreach ($benchData as $file => $fileData) {
46 | $avgData[$bench][$file] = array_map('average', $fileData);
47 | }
48 | }
49 |
50 | return $avgData;
51 | }
52 |
53 | function readRawData(string $dir): array {
54 | $it = new RecursiveIteratorIterator(
55 | new RecursiveDirectoryIterator($dir),
56 | RecursiveIteratorIterator::LEAVES_ONLY
57 | );
58 | $projectData = [];
59 | foreach ($it as $file) {
60 | $pathName = $file->getPathName();
61 | if (!preg_match('~CTMark/([^/]+)/(.+)\.time\.perfstats$~', $pathName, $matches)) {
62 | // Make sure we didn't make any incorrect assumptions about file names.
63 | if (preg_match('~\.time\.perfstats$~', $pathName)) {
64 | throw new Exception("Unexpected file name: $pathName\n");
65 | }
66 | continue;
67 | }
68 | list(, $project, $file) = $matches;
69 |
70 | if (!preg_match('~(.+?)(?:\.link)?\.time\.perfstats~', $pathName, $matches)) {
71 | throw new Exception("Unexpected file name: $pathName");
72 | }
73 | list(, $objectName) = $matches;
74 |
75 | $perfContents = file_get_contents($pathName);
76 | $timeContents = file_get_contents(str_replace('.perfstats', '', $pathName));
77 |
78 | try {
79 | $perfStats = parsePerfStats($perfContents);
80 | $timeStats = parseTimeStats($timeContents);
81 | $sizeStats = computeSizeStatsForObject($objectName);
82 | } catch (Exception $e) {
83 | echo $pathName, ":\n";
84 | echo $perfContents, "\n";
85 | echo $timeContents, "\n";
86 | throw $e;
87 | }
88 |
89 | $stats = $perfStats + $timeStats + $sizeStats;
90 | if (!isset($projectData[$project])) {
91 | $projectData[$project] = [];
92 | }
93 | $projectData[$project][$file] = $stats;
94 | }
95 | return $projectData;
96 | }
97 |
98 | function parsePerfStats(string $str): array {
99 | if (!preg_match_all('~^([0-9.]+);[^;]*;([^;]+);~m', $str, $matches, PREG_SET_ORDER)) {
100 | throw new Exception("Failed to match perf stats");
101 | }
102 |
103 | $stats = [];
104 | foreach ($matches as list(, $value, $stat)) {
105 | $stats[$stat] = (float) $value;
106 | }
107 | return $stats;
108 | }
109 |
110 | function parseTimeStats(string $str): array {
111 | list($maxRss, $wallTime) = explode(';', trim($str));
112 | return [
113 | 'max-rss' => (float) $maxRss,
114 | 'wall-time' => (float) $wallTime,
115 | ];
116 | }
117 |
118 | function parseSizeStats(string $str): array {
119 | if (!preg_match('~^\s*(\d+)\s+(\d+)\s+(\d+)\s+(\d+)~m', $str, $matches)) {
120 | throw new Exception("Failed to match size output");
121 | }
122 | return [
123 | 'size-text' => (int) $matches[1],
124 | 'size-data' => (int) $matches[2],
125 | 'size-bss' => (int) $matches[3],
126 | 'size-total' => (int) $matches[4],
127 | ];
128 | }
129 |
130 | function computeSizeStatsForObject(string $objectName): array {
131 | $stats = ['size-file' => filesize($objectName)];
132 |
133 | exec("size $objectName 2>&1", $output, $returnCode);
134 | if ($returnCode !== 0) {
135 | // Silently ignore invalid objects.
136 | // We might be calling size on a bitcode LTO object.
137 | return $stats;
138 | }
139 |
140 | return $stats + parseSizeStats(implode("\n", $output));
141 | }
142 |
143 | function parseNinjaLog(string $path, string $sanitizePrefix): array {
144 | $lines = file($path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
145 | $result = [];
146 | foreach ($lines as $line) {
147 | if ($line[0] === '#') {
148 | continue;
149 | }
150 |
151 | $parts = explode("\t", $line);
152 | if (count($parts) < 4) {
153 | // Malformed line.
154 | continue;
155 | }
156 |
157 | [$start, $end, , $file] = $parts;
158 | if (str_starts_with($file, $sanitizePrefix . '/')) {
159 | $file = substr($file, strlen($sanitizePrefix . '/'));
160 | }
161 | $result[] = [(int) $start, (int) $end, $file];
162 | }
163 | return $result;
164 | }
165 |
166 | function parseStage2Stats(array $stats, string $dir): array {
167 | $ninjaLog = parseNinjaLog($dir . '/.ninja_log', $dir);
168 | $stats['wall-time-full'] = $stats['wall-time'];
169 | unset($stats['wall-time']);
170 | $stats += parseTimeStats(file_get_contents($dir . '/build.time'));
171 | $stats += parsePerfStats(file_get_contents($dir . '/build.time.perfstats'));
172 | $totalWallTime = 0;
173 | foreach ($ninjaLog as [$start, $end]) {
174 | $totalWallTime += $end - $start;
175 | }
176 | $stats['wall-time-sum'] = $totalWallTime / 1000.0;
177 |
178 | $newNinjaLog = [];
179 | foreach ($ninjaLog as [$start, $end, $name]) {
180 | $file = $dir . '/' . $name;
181 | $size = filesize($file);
182 |
183 | $perfStatsFile = $file . '.time.perfstats';
184 | $instructions = 0;
185 | if (file_exists($perfStatsFile)) {
186 | $perfStats = parsePerfStats(file_get_contents($perfStatsFile));
187 | $instructions = $perfStats['instructions:u'] ?? 0;
188 | }
189 |
190 | $newNinjaLog[] = [$start, $end, $name, $size, $instructions];
191 | }
192 |
193 | return [$stats, $newNinjaLog];
194 | }
195 |
--------------------------------------------------------------------------------
/src/web_common.php:
--------------------------------------------------------------------------------
1 | getMessage() . ' on line ' . $e->getLine());
30 | });
31 |
32 | function formatPerc(float $value, float $interestingness): string {
33 | if ($value === 0.0) {
34 | return " ";
35 | }
36 |
37 | $formattedValue = sprintf('%+.2f%%', $value);
38 |
39 | $minInterestingness = 3.0;
40 | $maxInterestingness = 4.0;
41 | if ($interestingness >= $minInterestingness) {
42 | // Map interestingness to [0, 1]
43 | $interestingness = min($interestingness, $maxInterestingness);
44 | $interestingness -= $minInterestingness;
45 | $interestingness /= $maxInterestingness - $minInterestingness;
46 | $alpha = 0.4 * $interestingness;
47 | if ($value > 0.0) {
48 | $color = "rgba(255, 0, 0, $alpha)";
49 | } else {
50 | $color = "rgba(0, 255, 0, $alpha)";
51 | }
52 | return "$formattedValue ";
53 | }
54 | return $formattedValue;
55 | }
56 |
57 | function formatMetric(?float $value, string $metric): string {
58 | if ($value === null) {
59 | return '---';
60 | }
61 |
62 | $metric = str_replace(':u', '', $metric);
63 | switch ($metric) {
64 | case 'instructions':
65 | case 'cycles':
66 | case 'branches':
67 | case 'branch-misses':
68 | $m = $value / (1000 * 1000);
69 | return round($m) . 'M';
70 | case 'task-clock':
71 | return round($value) . 'ms';
72 | case 'max-rss':
73 | $m = $value / 1024;
74 | return round($m) . 'MiB';
75 | case 'size-file':
76 | case 'size-total':
77 | case 'size-text':
78 | case 'size-data':
79 | case 'size-bss':
80 | $k = $value / 1024;
81 | return round($k) . 'KiB';
82 | case 'wall-time':
83 | return sprintf('%.2fs', $value);
84 | default:
85 | return (string) $value;
86 | }
87 | }
88 |
89 | function getInterestingness(float $diff, ?float $stddev): float {
90 | if ($stddev === null) {
91 | return 0.0;
92 | }
93 |
94 | if ($stddev === 0.0) {
95 | // Avoid division by zero. Could use fdiv() in PHP 8.
96 | return INF;
97 | }
98 |
99 | // Correct by sqrt(2) because we want the stddev of differences.
100 | return abs($diff) / $stddev / sqrt(2);
101 | }
102 |
103 | function formatMetricDiff(
104 | ?float $newValue, ?float $oldValue, string $stat, ?float $stddev): string {
105 | if ($oldValue !== null && $newValue !== null) {
106 | $perc = $oldValue !== 0.0 ? ($newValue / $oldValue - 1.0) * 100 : 0.0;
107 | $interestingness = getInterestingness($newValue - $oldValue, $stddev);
108 | return formatMetric($newValue, $stat) . ' (' . formatPerc($perc, $interestingness) . ')';
109 | } else {
110 | return formatMetric($newValue, $stat) . ' ';
111 | }
112 | }
113 |
114 | function formatHash(string $hash): string {
115 | return ""
116 | . h($hash) . " ";
117 | }
118 |
119 | function h(string $str): string {
120 | return htmlspecialchars($str);
121 | }
122 |
123 | function printHeader() {
124 | echo <<<'STYLE'
125 |
126 | LLVM Compile-Time Tracker
127 |
137 |
138 | Index |
139 | Graphs |
140 | Compare |
141 | About
142 |
143 |
144 | STYLE;
145 | }
146 |
147 | function printFooter() {
148 | $dt = microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'];
149 | $mem = intdiv(memory_get_peak_usage(), 1024 * 1024);
150 | echo "";
151 | }
152 |
153 | function printSelect(string $name, string $value, array $options) {
154 | echo "\n";
155 | foreach ($options as $option) {
156 | $selected = $option === $value ? " selected" : "";
157 | echo "$option \n";
158 | }
159 | echo " \n";
160 | }
161 |
162 | function printStatSelect(string $stat, array $stats = DEFAULT_METRICS) {
163 | return printSelect("stat", $stat, $stats);
164 | }
165 |
166 | function makeUrl(string $page, array $queryParams): string {
167 | return $page . '?' . http_build_query($queryParams);
168 | }
169 |
170 | function getStringParam(string $name): ?string {
171 | if (!isset($_GET[$name])) {
172 | return null;
173 | }
174 |
175 | $value = $_GET[$name];
176 | if (!is_string($value)) {
177 | throw new Exception("Query parameter \"$name\" is not a string");
178 | }
179 | return $value;
180 | }
181 |
182 | function getIntParam(string $name): ?int {
183 | $str = getStringParam($name);
184 | if ($str === null) {
185 | return null;
186 | }
187 |
188 | if (!ctype_digit($str)) {
189 | throw new Exception("Query parameter \"$name\" is not an integer");
190 | }
191 |
192 | return (int) $str;
193 | }
194 |
195 | function getConfigsParam(string $name): ?array {
196 | $str = getStringParam($name);
197 | if ($str === null) {
198 | return null;
199 | }
200 |
201 | $configs = explode(',', $str);
202 | foreach ($configs as $config) {
203 | if (!in_array($config, CONFIGS)) {
204 | throw new Exception("Unknown config \"$config\"");
205 | }
206 | }
207 |
208 | return $configs;
209 | }
210 |
211 | function isCommitHash(string $value): bool {
212 | return (bool) preg_match('/^[0-9a-f]{40}$/', $value);
213 | }
214 |
215 | function reportError(string $hash): void {
216 | $errorUrl = makeUrl("show_error.php", ["commit" => $hash]);
217 | echo "Failed to build commit " . formatHash($hash)
218 | . " in some configurations (
Log )
\n";
219 | }
220 |
221 | function getGitHubCompareUrl(string $fromHash, string $toHash): string {
222 | return "https://github.com/llvm/llvm-project/compare/"
223 | . urlencode($fromHash) . "..." . urlencode($toHash);
224 | }
225 |
--------------------------------------------------------------------------------
/stddev/stats_0.msgpack:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikic/llvm-compile-time-tracker/bfcdca82e632160ee86896f60bb88eba18e21da9/stddev/stats_0.msgpack
--------------------------------------------------------------------------------
/stddev/stats_1.msgpack:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikic/llvm-compile-time-tracker/bfcdca82e632160ee86896f60bb88eba18e21da9/stddev/stats_1.msgpack
--------------------------------------------------------------------------------
/stddev/stats_2.msgpack:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikic/llvm-compile-time-tracker/bfcdca82e632160ee86896f60bb88eba18e21da9/stddev/stats_2.msgpack
--------------------------------------------------------------------------------
/stddev/stats_3.msgpack:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikic/llvm-compile-time-tracker/bfcdca82e632160ee86896f60bb88eba18e21da9/stddev/stats_3.msgpack
--------------------------------------------------------------------------------
/stddev/stats_4.msgpack:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikic/llvm-compile-time-tracker/bfcdca82e632160ee86896f60bb88eba18e21da9/stddev/stats_4.msgpack
--------------------------------------------------------------------------------
/stddev/stats_5.msgpack:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikic/llvm-compile-time-tracker/bfcdca82e632160ee86896f60bb88eba18e21da9/stddev/stats_5.msgpack
--------------------------------------------------------------------------------
/stddev/stats_6.msgpack:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nikic/llvm-compile-time-tracker/bfcdca82e632160ee86896f60bb88eba18e21da9/stddev/stats_6.msgpack
--------------------------------------------------------------------------------
/stddev/summary_0.json:
--------------------------------------------------------------------------------
1 | {
2 | "O3": {
3 | "kimwitu++": {
4 | "task-clock": 828.1945363661556,
5 | "context-switches": 109.32397360046016,
6 | "cpu-migrations": 0.15264255013210187,
7 | "page-faults": 147.3533635498504,
8 | "cycles": 498811233.36763304,
9 | "instructions": 29887685.144921824,
10 | "branches": 5797604.210811966,
11 | "branch-misses": 1868182.308685746,
12 | "max-rss": 1075.915188081009,
13 | "wall-time": 0.8502627998603237,
14 | "size-text": 0,
15 | "size-data": 0,
16 | "size-bss": 0,
17 | "size-total": 0,
18 | "size-file": 0
19 | },
20 | "sqlite3": {
21 | "task-clock": 1038.249060666096,
22 | "context-switches": 127.72172696823729,
23 | "cpu-migrations": 0.5385372690430391,
24 | "page-faults": 47.05169598881752,
25 | "cycles": 901013259.2436613,
26 | "instructions": 24319945.717774536,
27 | "branches": 4973824.69862435,
28 | "branch-misses": 1150030.05806279,
29 | "max-rss": 474.9147585556831,
30 | "wall-time": 1.0441805717968111,
31 | "size-text": 0,
32 | "size-data": 0,
33 | "size-bss": 0,
34 | "size-total": 0,
35 | "size-file": 0
36 | },
37 | "consumer-typeset": {
38 | "task-clock": 634.4501220531138,
39 | "context-switches": 55.87323649359502,
40 | "cpu-migrations": 0.5083748644373918,
41 | "page-faults": 131.5439427136546,
42 | "cycles": 319417261.1116262,
43 | "instructions": 8447470.32412066,
44 | "branches": 1796084.6636708681,
45 | "branch-misses": 632115.9744333588,
46 | "max-rss": 2047.5664564570482,
47 | "wall-time": 0.6937028879012015,
48 | "size-text": 0,
49 | "size-data": 0,
50 | "size-bss": 0,
51 | "size-total": 0,
52 | "size-file": 0
53 | },
54 | "Bullet": {
55 | "task-clock": 1666.5691753832245,
56 | "context-switches": 155.02579777113695,
57 | "cpu-migrations": 1.9682005771781663,
58 | "page-faults": 233.49751893365598,
59 | "cycles": 859209278.1393025,
60 | "instructions": 22288431.576416694,
61 | "branches": 4537587.7353478195,
62 | "branch-misses": 1627315.9517111743,
63 | "max-rss": 3410.256906074422,
64 | "wall-time": 1.817395717896329,
65 | "size-text": 0,
66 | "size-data": 0,
67 | "size-bss": 0,
68 | "size-total": 0,
69 | "size-file": 0
70 | },
71 | "tramp3d-v4": {
72 | "task-clock": 1591.9438131304587,
73 | "context-switches": 189.4303662441783,
74 | "cpu-migrations": 0.48760166901831153,
75 | "page-faults": 150.63621963879805,
76 | "cycles": 1138561217.0012977,
77 | "instructions": 64751251.7745747,
78 | "branches": 13539251.781052737,
79 | "branch-misses": 2542655.302396621,
80 | "max-rss": 375.9134622513712,
81 | "wall-time": 1.6008989397545994,
82 | "size-text": 0,
83 | "size-data": 0,
84 | "size-bss": 0,
85 | "size-total": 0,
86 | "size-file": 0
87 | },
88 | "mafft": {
89 | "task-clock": 635.6454542308024,
90 | "context-switches": 42.7431967209027,
91 | "cpu-migrations": 0.6475883178151296,
92 | "page-faults": 226.11105751786235,
93 | "cycles": 331069775.009518,
94 | "instructions": 7918528.923764658,
95 | "branches": 1714285.5789617843,
96 | "branch-misses": 784676.4481168336,
97 | "max-rss": 1457.738162977661,
98 | "wall-time": 0.6679056652588,
99 | "size-text": 0,
100 | "size-data": 0,
101 | "size-bss": 0,
102 | "size-total": 0,
103 | "size-file": 0
104 | },
105 | "ClamAV": {
106 | "task-clock": 917.8776123244252,
107 | "context-switches": 91.11895798337774,
108 | "cpu-migrations": 2.0862887511159736,
109 | "page-faults": 314.20815726143593,
110 | "cycles": 460523102.3186746,
111 | "instructions": 14953688.84205265,
112 | "branches": 3465344.784466348,
113 | "branch-misses": 824193.0276280735,
114 | "max-rss": 3001.300749832229,
115 | "wall-time": 1.0386327975433642,
116 | "size-text": 0,
117 | "size-data": 0,
118 | "size-bss": 0,
119 | "size-total": 0,
120 | "size-file": 0
121 | },
122 | "lencod": {
123 | "task-clock": 1091.6290606418709,
124 | "context-switches": 69.24336254728725,
125 | "cpu-migrations": 0.91152861219998,
126 | "page-faults": 1102.8775093360941,
127 | "cycles": 463462233.0352357,
128 | "instructions": 13302149.017148878,
129 | "branches": 2859941.9412430124,
130 | "branch-misses": 899660.9145841073,
131 | "max-rss": 2210.3172343405286,
132 | "wall-time": 1.1596006415551736,
133 | "size-text": 0,
134 | "size-data": 0,
135 | "size-bss": 0,
136 | "size-total": 0,
137 | "size-file": 0
138 | },
139 | "SPASS": {
140 | "task-clock": 820.739940999805,
141 | "context-switches": 59.54739887308771,
142 | "cpu-migrations": 1.2096422066766572,
143 | "page-faults": 100.39787344720587,
144 | "cycles": 409901737.6468653,
145 | "instructions": 10308244.216517119,
146 | "branches": 2178920.7123625837,
147 | "branch-misses": 1250283.5109472352,
148 | "max-rss": 2060.4331301821826,
149 | "wall-time": 0.8858839268210057,
150 | "size-text": 0,
151 | "size-data": 0,
152 | "size-bss": 0,
153 | "size-total": 0,
154 | "size-file": 0
155 | },
156 | "7zip": {
157 | "task-clock": 2531.758973178314,
158 | "context-switches": 233.05972242806746,
159 | "cpu-migrations": 3.5549332794613155,
160 | "page-faults": 417.5792533064053,
161 | "cycles": 1313239098.7613933,
162 | "instructions": 29895688.841517102,
163 | "branches": 6174980.088543698,
164 | "branch-misses": 2248391.033145383,
165 | "max-rss": 4884.991099803044,
166 | "wall-time": 2.803702046061402,
167 | "size-text": 0,
168 | "size-data": 0,
169 | "size-bss": 0,
170 | "size-total": 0,
171 | "size-file": 0
172 | },
173 | "geomean": {
174 | "task-clock": 1010.9917948936269,
175 | "context-switches": 68.75796670459572,
176 | "cpu-migrations": 0.6681486293084008,
177 | "page-faults": 152.93717850323839,
178 | "cycles": 505881532.57963127,
179 | "instructions": 9531495.504523274,
180 | "branches": 1877320.1550018678,
181 | "branch-misses": 742813.0652702922,
182 | "max-rss": 782.5648101036238,
183 | "wall-time": 1.07387167127012,
184 | "size-text": 0,
185 | "size-data": 0,
186 | "size-bss": 0,
187 | "size-total": 0,
188 | "size-file": 0
189 | }
190 | },
191 | "ReleaseThinLTO": {
192 | "kimwitu++": {
193 | "task-clock": 1089.6680171157132,
194 | "context-switches": 183.94376661022227,
195 | "cpu-migrations": 24.32806716948577,
196 | "page-faults": 924.2576993981825,
197 | "cycles": 672981986.4916092,
198 | "instructions": 44706881.65038963,
199 | "branches": 9363012.584943794,
200 | "branch-misses": 1932321.8283284805,
201 | "max-rss": 3876.2524458531016,
202 | "wall-time": 1.0393529355035638,
203 | "size-text": 0,
204 | "size-data": 0,
205 | "size-bss": 0,
206 | "size-total": 0,
207 | "size-file": 0
208 | },
209 | "sqlite3": {
210 | "task-clock": 1442.0932743481899,
211 | "context-switches": 263.11104330951486,
212 | "cpu-migrations": 26.16574465843454,
213 | "page-faults": 119.75846489290208,
214 | "cycles": 1255294902.582406,
215 | "instructions": 40097942.408087276,
216 | "branches": 9113468.17443427,
217 | "branch-misses": 1796042.054506307,
218 | "max-rss": 721.922789179108,
219 | "wall-time": 1.8594844438233324,
220 | "size-text": 0,
221 | "size-data": 0,
222 | "size-bss": 0,
223 | "size-total": 0,
224 | "size-file": 0
225 | },
226 | "consumer-typeset": {
227 | "task-clock": 940.1352564151757,
228 | "context-switches": 111.44341542177816,
229 | "cpu-migrations": 27.741389734582935,
230 | "page-faults": 407.817750174428,
231 | "cycles": 549847969.0647109,
232 | "instructions": 25749017.039659448,
233 | "branches": 5907362.44152318,
234 | "branch-misses": 1820620.4460637853,
235 | "max-rss": 2825.471063943826,
236 | "wall-time": 0.9228874332469058,
237 | "size-text": 0,
238 | "size-data": 0,
239 | "size-bss": 0,
240 | "size-total": 0,
241 | "size-file": 0
242 | },
243 | "Bullet": {
244 | "task-clock": 1564.031961706852,
245 | "context-switches": 182.45370910275696,
246 | "cpu-migrations": 28.891391330783012,
247 | "page-faults": 395.18768768617014,
248 | "cycles": 847186760.2623374,
249 | "instructions": 21339450.487535086,
250 | "branches": 4390059.73939217,
251 | "branch-misses": 1355085.5401391846,
252 | "max-rss": 4111.386242823547,
253 | "wall-time": 2.145815939388421,
254 | "size-text": 0,
255 | "size-data": 0,
256 | "size-bss": 0,
257 | "size-total": 0,
258 | "size-file": 0
259 | },
260 | "tramp3d-v4": {
261 | "task-clock": 2813.2432324945185,
262 | "context-switches": 351.93870261467447,
263 | "cpu-migrations": 33.08137155639761,
264 | "page-faults": 1063.1626298740484,
265 | "cycles": 2117905188.9808297,
266 | "instructions": 74262171.6772153,
267 | "branches": 15515798.067482948,
268 | "branch-misses": 3671957.130212516,
269 | "max-rss": 2962.5556593216807,
270 | "wall-time": 3.37218306044319,
271 | "size-text": 0,
272 | "size-data": 0,
273 | "size-bss": 0,
274 | "size-total": 0,
275 | "size-file": 0
276 | },
277 | "mafft": {
278 | "task-clock": 553.0205904959274,
279 | "context-switches": 65.64252510687159,
280 | "cpu-migrations": 2.0488021772357095,
281 | "page-faults": 462.98638734733305,
282 | "cycles": 301811882.1139473,
283 | "instructions": 10263793.733271869,
284 | "branches": 2327483.3081299835,
285 | "branch-misses": 793178.5145298187,
286 | "max-rss": 1728.7628853122626,
287 | "wall-time": 0.46059313710305155,
288 | "size-text": 0,
289 | "size-data": 0,
290 | "size-bss": 0,
291 | "size-total": 0,
292 | "size-file": 0
293 | },
294 | "ClamAV": {
295 | "task-clock": 1300.5792526680245,
296 | "context-switches": 151.98377063424738,
297 | "cpu-migrations": 33.82302472891591,
298 | "page-faults": 801.2495259821541,
299 | "cycles": 755604428.9107586,
300 | "instructions": 30820011.029620927,
301 | "branches": 7292031.844942949,
302 | "branch-misses": 1058685.764290936,
303 | "max-rss": 4139.2964368199,
304 | "wall-time": 1.4462923442018256,
305 | "size-text": 0,
306 | "size-data": 0,
307 | "size-bss": 0,
308 | "size-total": 0,
309 | "size-file": 0
310 | },
311 | "lencod": {
312 | "task-clock": 1709.8299709999794,
313 | "context-switches": 178.23588615885373,
314 | "cpu-migrations": 41.98619046368422,
315 | "page-faults": 1257.9871782012262,
316 | "cycles": 872923353.1461991,
317 | "instructions": 27546813.6283389,
318 | "branches": 6261701.015390352,
319 | "branch-misses": 2356265.2118633003,
320 | "max-rss": 3720.7335779498503,
321 | "wall-time": 1.5677156375229073,
322 | "size-text": 0,
323 | "size-data": 0,
324 | "size-bss": 0,
325 | "size-total": 0,
326 | "size-file": 0
327 | },
328 | "SPASS": {
329 | "task-clock": 1197.2330608096356,
330 | "context-switches": 170.63644939441878,
331 | "cpu-migrations": 16.800036185656722,
332 | "page-faults": 365.7761185763815,
333 | "cycles": 603466784.2469559,
334 | "instructions": 19252261.708036948,
335 | "branches": 4180141.758093366,
336 | "branch-misses": 1271519.261532477,
337 | "max-rss": 2567.0818327532065,
338 | "wall-time": 1.1081706113205845,
339 | "size-text": 0,
340 | "size-data": 0,
341 | "size-bss": 0,
342 | "size-total": 0,
343 | "size-file": 0
344 | },
345 | "7zip": {
346 | "task-clock": 3586.199334412112,
347 | "context-switches": 363.7440432071673,
348 | "cpu-migrations": 30.40775940652205,
349 | "page-faults": 512.5985380762628,
350 | "cycles": 1902934377.4513564,
351 | "instructions": 55542994.02699384,
352 | "branches": 11638730.98091762,
353 | "branch-misses": 3096632.2608155925,
354 | "max-rss": 6692.529036784153,
355 | "wall-time": 3.387671596261361,
356 | "size-text": 0,
357 | "size-data": 0,
358 | "size-bss": 0,
359 | "size-total": 0,
360 | "size-file": 0
361 | },
362 | "geomean": {
363 | "task-clock": 1343.174284567407,
364 | "context-switches": 89.25813243224071,
365 | "cpu-migrations": 43.32262968889533,
366 | "page-faults": 270.98465474284,
367 | "cycles": 721231101.65356,
368 | "instructions": 12359975.369445764,
369 | "branches": 2607201.0128628276,
370 | "branch-misses": 933781.5671986744,
371 | "max-rss": 1768.0882102692276,
372 | "wall-time": 1.3527281759992442,
373 | "size-text": 0,
374 | "size-data": 0,
375 | "size-bss": 0,
376 | "size-total": 0,
377 | "size-file": 0
378 | }
379 | },
380 | "ReleaseLTO-g": {
381 | "kimwitu++": {
382 | "task-clock": 1195.6822954017482,
383 | "context-switches": 123.34408266014518,
384 | "cpu-migrations": 0.17819621116814394,
385 | "page-faults": 182.27648294644976,
386 | "cycles": 874393725.2269213,
387 | "instructions": 63993597.136577465,
388 | "branches": 13372580.109918855,
389 | "branch-misses": 2106030.4175572474,
390 | "max-rss": 1262.9072663669212,
391 | "wall-time": 1.2131311479694946,
392 | "size-text": 0,
393 | "size-data": 0,
394 | "size-bss": 0,
395 | "size-total": 0,
396 | "size-file": 0
397 | },
398 | "sqlite3": {
399 | "task-clock": 1555.2225728574465,
400 | "context-switches": 115.4790822626021,
401 | "cpu-migrations": 0.4370103861141854,
402 | "page-faults": 432.7114866115898,
403 | "cycles": 1320943386.6259534,
404 | "instructions": 48480612.55355348,
405 | "branches": 11022949.974598788,
406 | "branch-misses": 1157480.9156389139,
407 | "max-rss": 1798.826084839408,
408 | "wall-time": 1.5686274929095165,
409 | "size-text": 0,
410 | "size-data": 0,
411 | "size-bss": 0,
412 | "size-total": 0,
413 | "size-file": 0
414 | },
415 | "consumer-typeset": {
416 | "task-clock": 998.331911000465,
417 | "context-switches": 76.40339250034906,
418 | "cpu-migrations": 0.5810574698114104,
419 | "page-faults": 118.60707369729042,
420 | "cycles": 657243724.1499177,
421 | "instructions": 25685915.054911602,
422 | "branches": 5651862.765288767,
423 | "branch-misses": 655018.653624419,
424 | "max-rss": 2319.271274207633,
425 | "wall-time": 1.061153269985275,
426 | "size-text": 0,
427 | "size-data": 0,
428 | "size-bss": 0,
429 | "size-total": 0,
430 | "size-file": 0
431 | },
432 | "Bullet": {
433 | "task-clock": 1692.3568858448032,
434 | "context-switches": 347.8390115760253,
435 | "cpu-migrations": 0.8731662554007606,
436 | "page-faults": 169.22646223044896,
437 | "cycles": 943535191.0361427,
438 | "instructions": 31874297.511143666,
439 | "branches": 6309220.7077775225,
440 | "branch-misses": 1172168.0642483626,
441 | "max-rss": 3603.925868122338,
442 | "wall-time": 1.8224050434790566,
443 | "size-text": 0,
444 | "size-data": 0,
445 | "size-bss": 0,
446 | "size-total": 0,
447 | "size-file": 0
448 | },
449 | "tramp3d-v4": {
450 | "task-clock": 2964.5691043738025,
451 | "context-switches": 253.12742703977295,
452 | "cpu-migrations": 0.6685156939214411,
453 | "page-faults": 371.3855748551094,
454 | "cycles": 2566722580.1331725,
455 | "instructions": 158714140.26980937,
456 | "branches": 38117178.70912184,
457 | "branch-misses": 3052488.834155442,
458 | "max-rss": 1466.4721569973026,
459 | "wall-time": 2.968168631991912,
460 | "size-text": 0,
461 | "size-data": 0,
462 | "size-bss": 0,
463 | "size-total": 0,
464 | "size-file": 0
465 | },
466 | "mafft": {
467 | "task-clock": 573.9149850186161,
468 | "context-switches": 42.10061279423011,
469 | "cpu-migrations": 0.7084901663737968,
470 | "page-faults": 560.8044485128233,
471 | "cycles": 371325087.19585395,
472 | "instructions": 18523115.796347648,
473 | "branches": 3614851.73468628,
474 | "branch-misses": 781657.384191184,
475 | "max-rss": 1575.0145995399678,
476 | "wall-time": 0.6062674971399334,
477 | "size-text": 0,
478 | "size-data": 0,
479 | "size-bss": 0,
480 | "size-total": 0,
481 | "size-file": 0
482 | },
483 | "ClamAV": {
484 | "task-clock": 1466.4536336051517,
485 | "context-switches": 111.43184397228572,
486 | "cpu-migrations": 1.6416041726694413,
487 | "page-faults": 262.97501643293305,
488 | "cycles": 940617400.8052813,
489 | "instructions": 37786783.77902036,
490 | "branches": 8304758.168722857,
491 | "branch-misses": 943919.6248202174,
492 | "max-rss": 3245.8585928062826,
493 | "wall-time": 1.5772899658878932,
494 | "size-text": 0,
495 | "size-data": 0,
496 | "size-bss": 0,
497 | "size-total": 0,
498 | "size-file": 0
499 | },
500 | "lencod": {
501 | "task-clock": 1820.8373016104504,
502 | "context-switches": 138.3509562945747,
503 | "cpu-migrations": 0.4402941170396431,
504 | "page-faults": 962.9637461144966,
505 | "cycles": 1014599288.1156416,
506 | "instructions": 62175595.809643194,
507 | "branches": 13280523.306356102,
508 | "branch-misses": 1273488.4937425705,
509 | "max-rss": 2406.7016712856084,
510 | "wall-time": 1.8807572391671177,
511 | "size-text": 0,
512 | "size-data": 0,
513 | "size-bss": 0,
514 | "size-total": 0,
515 | "size-file": 0
516 | },
517 | "SPASS": {
518 | "task-clock": 1343.668862897233,
519 | "context-switches": 152.7132340055958,
520 | "cpu-migrations": 1.181594552753895,
521 | "page-faults": 129.47767634288246,
522 | "cycles": 1016241141.3333452,
523 | "instructions": 36867036.11002717,
524 | "branches": 7436579.469992832,
525 | "branch-misses": 1265675.956604338,
526 | "max-rss": 2223.6387608516266,
527 | "wall-time": 1.4048398137180307,
528 | "size-text": 0,
529 | "size-data": 0,
530 | "size-bss": 0,
531 | "size-total": 0,
532 | "size-file": 0
533 | },
534 | "7zip": {
535 | "task-clock": 3625.361990000583,
536 | "context-switches": 539.1884920149636,
537 | "cpu-migrations": 3.751809127444461,
538 | "page-faults": 367.39392394598616,
539 | "cycles": 2390174573.247298,
540 | "instructions": 103874961.57388207,
541 | "branches": 19651896.659599155,
542 | "branch-misses": 2731301.026891173,
543 | "max-rss": 5409.514711250535,
544 | "wall-time": 3.879145744755583,
545 | "size-text": 0,
546 | "size-data": 0,
547 | "size-bss": 0,
548 | "size-total": 0,
549 | "size-file": 0
550 | },
551 | "geomean": {
552 | "task-clock": 1441.4750255791187,
553 | "context-switches": 50.24069017057295,
554 | "cpu-migrations": 0.704106420798742,
555 | "page-faults": 211.02349931417862,
556 | "cycles": 896496042.2478487,
557 | "instructions": 19235626.527094662,
558 | "branches": 4019640.3432221203,
559 | "branch-misses": 804947.8343554736,
560 | "max-rss": 1318.954924508756,
561 | "wall-time": 1.5002387555306154,
562 | "size-text": 0,
563 | "size-data": 0,
564 | "size-bss": 0,
565 | "size-total": 0,
566 | "size-file": 0
567 | }
568 | },
569 | "O0-g": {
570 | "kimwitu++": {
571 | "task-clock": 471.24012608134177,
572 | "context-switches": 96.17210325345127,
573 | "cpu-migrations": 0.8777648611237137,
574 | "page-faults": 52.139087958959664,
575 | "cycles": 333831833.266721,
576 | "instructions": 16422032.682566985,
577 | "branches": 2988930.5694184056,
578 | "branch-misses": 741817.0677011836,
579 | "max-rss": 1043.62160307423,
580 | "wall-time": 0.49215576451795173,
581 | "size-text": 0,
582 | "size-data": 0,
583 | "size-bss": 0,
584 | "size-total": 0,
585 | "size-file": 0
586 | },
587 | "sqlite3": {
588 | "task-clock": 87.46311756933952,
589 | "context-switches": 27.99316045033115,
590 | "cpu-migrations": 0.8141789589353752,
591 | "page-faults": 13.84098446718739,
592 | "cycles": 70224986.68590225,
593 | "instructions": 3688588.9057383183,
594 | "branches": 665158.2085198921,
595 | "branch-misses": 138784.37832960256,
596 | "max-rss": 449.8811780081788,
597 | "wall-time": 0.09200737205776265,
598 | "size-text": 0,
599 | "size-data": 0,
600 | "size-bss": 0,
601 | "size-total": 0,
602 | "size-file": 0
603 | },
604 | "consumer-typeset": {
605 | "task-clock": 203.291488360083,
606 | "context-switches": 26.30935437353616,
607 | "cpu-migrations": 2.3693367455380026,
608 | "page-faults": 126.90915091389384,
609 | "cycles": 139916742.77956352,
610 | "instructions": 4427623.823806859,
611 | "branches": 797750.8085913161,
612 | "branch-misses": 195859.85338538224,
613 | "max-rss": 2275.4691500566782,
614 | "wall-time": 0.27310406013898714,
615 | "size-text": 0,
616 | "size-data": 0,
617 | "size-bss": 0,
618 | "size-total": 0,
619 | "size-file": 0
620 | },
621 | "Bullet": {
622 | "task-clock": 1031.5830042203174,
623 | "context-switches": 96.3217569827729,
624 | "cpu-migrations": 2.459718374931729,
625 | "page-faults": 197.61870495134434,
626 | "cycles": 639575497.3777295,
627 | "instructions": 21714207.701687872,
628 | "branches": 4243229.13531818,
629 | "branch-misses": 1058761.4037707637,
630 | "max-rss": 3707.307092897536,
631 | "wall-time": 1.2035263442798738,
632 | "size-text": 0,
633 | "size-data": 0,
634 | "size-bss": 0,
635 | "size-total": 0,
636 | "size-file": 0
637 | },
638 | "tramp3d-v4": {
639 | "task-clock": 437.1870739367235,
640 | "context-switches": 107.34327287395571,
641 | "cpu-migrations": 0.17596058924152058,
642 | "page-faults": 87.64827546267261,
643 | "cycles": 359939637.3402303,
644 | "instructions": 63162581.59523417,
645 | "branches": 11547008.559452914,
646 | "branch-misses": 864777.5787238932,
647 | "max-rss": 331.24878185848854,
648 | "wall-time": 0.4421539333547239,
649 | "size-text": 0,
650 | "size-data": 0,
651 | "size-bss": 0,
652 | "size-total": 0,
653 | "size-file": 0
654 | },
655 | "mafft": {
656 | "task-clock": 117.39145156573522,
657 | "context-switches": 18.13096534003119,
658 | "cpu-migrations": 1.3031349683665898,
659 | "page-faults": 109.22565582384318,
660 | "cycles": 90510400.42967139,
661 | "instructions": 3352519.068760894,
662 | "branches": 686669.7791947555,
663 | "branch-misses": 148550.4213311297,
664 | "max-rss": 1681.7137991023344,
665 | "wall-time": 0.15480304703437314,
666 | "size-text": 0,
667 | "size-data": 0,
668 | "size-bss": 0,
669 | "size-total": 0,
670 | "size-file": 0
671 | },
672 | "ClamAV": {
673 | "task-clock": 271.9615079523364,
674 | "context-switches": 40.83834418083471,
675 | "cpu-migrations": 5.054178626873078,
676 | "page-faults": 158.8737131461043,
677 | "cycles": 226666946.4599994,
678 | "instructions": 6563096.756768067,
679 | "branches": 1308227.3467434568,
680 | "branch-misses": 266465.4331115843,
681 | "max-rss": 3322.968511723633,
682 | "wall-time": 0.4080254211052032,
683 | "size-text": 0,
684 | "size-data": 0,
685 | "size-bss": 0,
686 | "size-total": 0,
687 | "size-file": 0
688 | },
689 | "lencod": {
690 | "task-clock": 218.98681343464477,
691 | "context-switches": 31.210698642461796,
692 | "cpu-migrations": 2.472550234297315,
693 | "page-faults": 119.95869856845924,
694 | "cycles": 163993789.88977715,
695 | "instructions": 5035135.414573242,
696 | "branches": 958071.4533001343,
697 | "branch-misses": 260382.37111015373,
698 | "max-rss": 2435.6198892474904,
699 | "wall-time": 0.29303928176972616,
700 | "size-text": 0,
701 | "size-data": 0,
702 | "size-bss": 0,
703 | "size-total": 0,
704 | "size-file": 0
705 | },
706 | "SPASS": {
707 | "task-clock": 271.1184024871516,
708 | "context-switches": 34.24125360511367,
709 | "cpu-migrations": 1.9057537100385702,
710 | "page-faults": 116.80577550460441,
711 | "cycles": 177811057.81565288,
712 | "instructions": 5235839.644470762,
713 | "branches": 1007190.0732965616,
714 | "branch-misses": 348339.3615205025,
715 | "max-rss": 2307.6875401182087,
716 | "wall-time": 0.33857083323979065,
717 | "size-text": 0,
718 | "size-data": 0,
719 | "size-bss": 0,
720 | "size-total": 0,
721 | "size-file": 0
722 | },
723 | "7zip": {
724 | "task-clock": 1322.1753728686726,
725 | "context-switches": 136.0044297735658,
726 | "cpu-migrations": 3.9700320558944915,
727 | "page-faults": 302.3416897383334,
728 | "cycles": 927560236.8266705,
729 | "instructions": 24440850.08822884,
730 | "branches": 4820270.21312487,
731 | "branch-misses": 1391535.918681276,
732 | "max-rss": 5520.156340191941,
733 | "wall-time": 1.5995317208094106,
734 | "size-text": 0,
735 | "size-data": 0,
736 | "size-bss": 0,
737 | "size-total": 0,
738 | "size-file": 0
739 | },
740 | "geomean": {
741 | "task-clock": 295.74391533489205,
742 | "context-switches": 40.55079917617846,
743 | "cpu-migrations": 1.5564955615175349,
744 | "page-faults": 38.95318191520634,
745 | "cycles": 191461089.24903995,
746 | "instructions": 7121459.681157505,
747 | "branches": 1281338.9864593295,
748 | "branch-misses": 207553.09252834143,
749 | "max-rss": 812.7039466094002,
750 | "wall-time": 0.3578994458170573,
751 | "size-text": 0,
752 | "size-data": 0,
753 | "size-bss": 0,
754 | "size-total": 0,
755 | "size-file": 0
756 | }
757 | }
758 | }
--------------------------------------------------------------------------------
/stddev/summary_1.json:
--------------------------------------------------------------------------------
1 | {
2 | "O3": {
3 | "lencod": {
4 | "instructions": 10076439.755316822,
5 | "instructions:u": 8051568.919639488,
6 | "cycles": 148715232.1522665,
7 | "task-clock": 41.340356871432824,
8 | "branches": 2146052.184225564,
9 | "branch-misses": 251124.3822821052,
10 | "max-rss": 1785.71015837814,
11 | "wall-time": 0.045902270726777744,
12 | "size-file": 0,
13 | "size-text": 0,
14 | "size-data": 0,
15 | "size-bss": 0,
16 | "size-total": 0
17 | },
18 | "Bullet": {
19 | "instructions": 13237121.34927864,
20 | "instructions:u": 12694034.706929011,
21 | "cycles": 259111730.03064817,
22 | "task-clock": 72.01399153446279,
23 | "branches": 3040528.4940466397,
24 | "branch-misses": 393406.27502530615,
25 | "max-rss": 2537.675969931367,
26 | "wall-time": 0.08195297994959631,
27 | "size-file": 0,
28 | "size-text": 0,
29 | "size-data": 0,
30 | "size-bss": 0,
31 | "size-total": 0
32 | },
33 | "mafft": {
34 | "instructions": 7170348.161414095,
35 | "instructions:u": 5013373.928777784,
36 | "cycles": 82762268.59340264,
37 | "task-clock": 23.0423793724895,
38 | "branches": 1485871.976112563,
39 | "branch-misses": 177978.6353590153,
40 | "max-rss": 1114.531410218839,
41 | "wall-time": 0.026983171011894295,
42 | "size-file": 0,
43 | "size-text": 0,
44 | "size-data": 0,
45 | "size-bss": 0,
46 | "size-total": 0
47 | },
48 | "tramp3d-v4": {
49 | "instructions": 43482109.670443095,
50 | "instructions:u": 43450075.365498215,
51 | "cycles": 179904162.0676551,
52 | "task-clock": 50.02971312893881,
53 | "branches": 10281980.7800717,
54 | "branch-misses": 789038.5598589166,
55 | "max-rss": 255.7513242995085,
56 | "wall-time": 0.050463892370727764,
57 | "size-file": 0,
58 | "size-text": 0,
59 | "size-data": 0,
60 | "size-bss": 0,
61 | "size-total": 0
62 | },
63 | "ClamAV": {
64 | "instructions": 15953132.806881297,
65 | "instructions:u": 5495440.537666091,
66 | "cycles": 128997525.87795225,
67 | "task-clock": 35.84619691612277,
68 | "branches": 2819617.709269492,
69 | "branch-misses": 218848.91327914983,
70 | "max-rss": 2349.081705623744,
71 | "wall-time": 0.04604194632802897,
72 | "size-file": 0,
73 | "size-text": 0,
74 | "size-data": 0,
75 | "size-bss": 0,
76 | "size-total": 0
77 | },
78 | "kimwitu++": {
79 | "instructions": 18330779.931630116,
80 | "instructions:u": 18334130.518070854,
81 | "cycles": 118972404.95761889,
82 | "task-clock": 33.10135295733946,
83 | "branches": 4213277.74403047,
84 | "branch-misses": 381252.5607105352,
85 | "max-rss": 832.2953334146536,
86 | "wall-time": 0.03532503050844382,
87 | "size-file": 0,
88 | "size-text": 0,
89 | "size-data": 0,
90 | "size-bss": 0,
91 | "size-total": 0
92 | },
93 | "sqlite3": {
94 | "instructions": 15925518.302302605,
95 | "instructions:u": 15666377.977310942,
96 | "cycles": 146147331.6539112,
97 | "task-clock": 40.69055134782373,
98 | "branches": 3483670.7247662507,
99 | "branch-misses": 508355.5531124034,
100 | "max-rss": 359.44664238742604,
101 | "wall-time": 0.04135318952443802,
102 | "size-file": 0,
103 | "size-text": 0,
104 | "size-data": 0,
105 | "size-bss": 0,
106 | "size-total": 0
107 | },
108 | "SPASS": {
109 | "instructions": 8326075.489848077,
110 | "instructions:u": 5149524.547848801,
111 | "cycles": 106623629.16791011,
112 | "task-clock": 29.622010337723967,
113 | "branches": 1639922.1560894481,
114 | "branch-misses": 240040.50281115167,
115 | "max-rss": 1614.7236158453836,
116 | "wall-time": 0.0368587189031148,
117 | "size-file": 0,
118 | "size-text": 0,
119 | "size-data": 0,
120 | "size-bss": 0,
121 | "size-total": 0
122 | },
123 | "7zip": {
124 | "instructions": 16732269.320360709,
125 | "instructions:u": 16117735.612388708,
126 | "cycles": 391795064.26816314,
127 | "task-clock": 108.90332817852303,
128 | "branches": 4012828.5070712627,
129 | "branch-misses": 625268.9444873771,
130 | "max-rss": 3586.217523151816,
131 | "wall-time": 0.1187918954736778,
132 | "size-file": 0,
133 | "size-text": 0,
134 | "size-data": 0,
135 | "size-bss": 0,
136 | "size-total": 0
137 | },
138 | "consumer-typeset": {
139 | "instructions": 19263416.49296984,
140 | "instructions:u": 4484296.29314739,
141 | "cycles": 95725267.88016425,
142 | "task-clock": 26.62367072781115,
143 | "branches": 3362765.2196864053,
144 | "branch-misses": 180848.9942577427,
145 | "max-rss": 1717.7741871034907,
146 | "wall-time": 0.03333608081363331,
147 | "size-file": 0,
148 | "size-text": 0,
149 | "size-data": 0,
150 | "size-bss": 0,
151 | "size-total": 0
152 | },
153 | "geomean": {
154 | "instructions": 6059687.126275765,
155 | "instructions:u": 4991556.2194457445,
156 | "cycles": 121850184.69209686,
157 | "task-clock": 33.861806363460154,
158 | "branches": 1269911.4729880446,
159 | "branch-misses": 196065.17815195158,
160 | "max-rss": 538.7030259005352,
161 | "wall-time": 0.03501384096783342,
162 | "size-file": 0,
163 | "size-text": 0,
164 | "size-data": 0,
165 | "size-bss": 0,
166 | "size-total": 0
167 | }
168 | },
169 | "ReleaseThinLTO": {
170 | "lencod": {
171 | "instructions": 16576352.606988259,
172 | "instructions:u": 15945731.276937915,
173 | "cycles": 200106935.94979408,
174 | "task-clock": 55.611512721837,
175 | "branches": 3944304.8441124666,
176 | "branch-misses": 535667.2137019982,
177 | "max-rss": 3798.7988398433577,
178 | "wall-time": 0.17877339174283807,
179 | "size-file": 0,
180 | "size-text": 0,
181 | "size-data": 0,
182 | "size-bss": 0,
183 | "size-total": 0
184 | },
185 | "Bullet": {
186 | "instructions": 13666156.875221103,
187 | "instructions:u": 13213450.70901968,
188 | "cycles": 229189324.67601204,
189 | "task-clock": 63.73139585181681,
190 | "branches": 3153940.450973945,
191 | "branch-misses": 419414.9360433825,
192 | "max-rss": 3512.2650223194064,
193 | "wall-time": 0.1868472865260363,
194 | "size-file": 0,
195 | "size-text": 0,
196 | "size-data": 0,
197 | "size-bss": 0,
198 | "size-total": 0
199 | },
200 | "mafft": {
201 | "instructions": 6396675.1861865185,
202 | "instructions:u": 6101829.991472173,
203 | "cycles": 58222236.851785734,
204 | "task-clock": 16.209791349969816,
205 | "branches": 1506189.484501522,
206 | "branch-misses": 189103.27957093157,
207 | "max-rss": 1958.9066226588025,
208 | "wall-time": 0.1026490097196685,
209 | "size-file": 0,
210 | "size-text": 0,
211 | "size-data": 0,
212 | "size-bss": 0,
213 | "size-total": 0
214 | },
215 | "tramp3d-v4": {
216 | "instructions": 46776334.98540214,
217 | "instructions:u": 46827335.14479708,
218 | "cycles": 255235451.843928,
219 | "task-clock": 70.93689942566377,
220 | "branches": 10762231.120511366,
221 | "branch-misses": 1001477.2736894377,
222 | "max-rss": 275.0215331632837,
223 | "wall-time": 0.3244469309639175,
224 | "size-file": 0,
225 | "size-text": 0,
226 | "size-data": 0,
227 | "size-bss": 0,
228 | "size-total": 0
229 | },
230 | "ClamAV": {
231 | "instructions": 18661830.062615372,
232 | "instructions:u": 18437335.0002958,
233 | "cycles": 133920098.44394211,
234 | "task-clock": 37.29408239475694,
235 | "branches": 4537192.582684129,
236 | "branch-misses": 466452.14038126933,
237 | "max-rss": 3292.2245989979547,
238 | "wall-time": 0.1542493584535553,
239 | "size-file": 0,
240 | "size-text": 0,
241 | "size-data": 0,
242 | "size-bss": 0,
243 | "size-total": 0
244 | },
245 | "kimwitu++": {
246 | "instructions": 28541257.32160369,
247 | "instructions:u": 28466352.17303771,
248 | "cycles": 112355083.31079254,
249 | "task-clock": 31.274554147666265,
250 | "branches": 6703236.130875748,
251 | "branch-misses": 481671.807478308,
252 | "max-rss": 2357.346520025469,
253 | "wall-time": 0.18855913165623264,
254 | "size-file": 0,
255 | "size-text": 0,
256 | "size-data": 0,
257 | "size-bss": 0,
258 | "size-total": 0
259 | },
260 | "sqlite3": {
261 | "instructions": 17886901.263844106,
262 | "instructions:u": 17822812.18664637,
263 | "cycles": 109450380.58791612,
264 | "task-clock": 30.488336259728484,
265 | "branches": 4131838.971662918,
266 | "branch-misses": 550743.126448106,
267 | "max-rss": 468.52205886474235,
268 | "wall-time": 0.20300435061605868,
269 | "size-file": 0,
270 | "size-text": 0,
271 | "size-data": 0,
272 | "size-bss": 0,
273 | "size-total": 0
274 | },
275 | "SPASS": {
276 | "instructions": 12273249.913256545,
277 | "instructions:u": 11756037.053303428,
278 | "cycles": 118843175.58855459,
279 | "task-clock": 33.096737766844726,
280 | "branches": 2882503.6760929646,
281 | "branch-misses": 524587.1638198539,
282 | "max-rss": 2370.979339050865,
283 | "wall-time": 0.17136687878016899,
284 | "size-file": 0,
285 | "size-text": 0,
286 | "size-data": 0,
287 | "size-bss": 0,
288 | "size-total": 0
289 | },
290 | "7zip": {
291 | "instructions": 36302969.331672415,
292 | "instructions:u": 35957833.92062785,
293 | "cycles": 387574398.65372103,
294 | "task-clock": 107.7793893147302,
295 | "branches": 8552703.227365501,
296 | "branch-misses": 1077722.703287393,
297 | "max-rss": 5775.5852294937695,
298 | "wall-time": 0.12541529227217238,
299 | "size-file": 0,
300 | "size-text": 0,
301 | "size-data": 0,
302 | "size-bss": 0,
303 | "size-total": 0
304 | },
305 | "consumer-typeset": {
306 | "instructions": 17613979.7282028,
307 | "instructions:u": 17380160.93626272,
308 | "cycles": 101288364.33905868,
309 | "task-clock": 28.186979854838206,
310 | "branches": 4238257.945244461,
311 | "branch-misses": 383402.31774124905,
312 | "max-rss": 2188.6790265915565,
313 | "wall-time": 0.1188440573618982,
314 | "size-file": 0,
315 | "size-text": 0,
316 | "size-data": 0,
317 | "size-bss": 0,
318 | "size-total": 0
319 | },
320 | "geomean": {
321 | "instructions": 7026276.735763754,
322 | "instructions:u": 6903100.886562123,
323 | "cycles": 118714648.60140947,
324 | "task-clock": 33.01216376665723,
325 | "branches": 1650081.3653727993,
326 | "branch-misses": 230719.41277442756,
327 | "max-rss": 818.1225123563593,
328 | "wall-time": 0.047404185767057204,
329 | "size-file": 0,
330 | "size-text": 0,
331 | "size-data": 0,
332 | "size-bss": 0,
333 | "size-total": 0
334 | }
335 | },
336 | "ReleaseLTO-g": {
337 | "lencod": {
338 | "instructions": 28493948.667409554,
339 | "instructions:u": 28301582.86395067,
340 | "cycles": 452687826.52374446,
341 | "task-clock": 126.13662959915979,
342 | "branches": 6585498.949553467,
343 | "branch-misses": 464798.2814377119,
344 | "max-rss": 1861.1378067139672,
345 | "wall-time": 0.12287579417071176,
346 | "size-file": 0,
347 | "size-text": 0,
348 | "size-data": 0,
349 | "size-bss": 0,
350 | "size-total": 0
351 | },
352 | "Bullet": {
353 | "instructions": 20704700.435393557,
354 | "instructions:u": 20544695.651163813,
355 | "cycles": 264439577.89460072,
356 | "task-clock": 73.5062549357298,
357 | "branches": 4846437.544686919,
358 | "branch-misses": 388628.33417959476,
359 | "max-rss": 2536.389690541903,
360 | "wall-time": 0.07870367232958954,
361 | "size-file": 0,
362 | "size-text": 0,
363 | "size-data": 0,
364 | "size-bss": 0,
365 | "size-total": 0
366 | },
367 | "mafft": {
368 | "instructions": 11053869.587041665,
369 | "instructions:u": 10957530.927630516,
370 | "cycles": 159247966.07064018,
371 | "task-clock": 44.43024278441724,
372 | "branches": 2505338.9757484603,
373 | "branch-misses": 194163.62652384807,
374 | "max-rss": 1178.4868078704073,
375 | "wall-time": 0.04155975354539633,
376 | "size-file": 0,
377 | "size-text": 0,
378 | "size-data": 0,
379 | "size-bss": 0,
380 | "size-total": 0
381 | },
382 | "tramp3d-v4": {
383 | "instructions": 134589516.1698273,
384 | "instructions:u": 134583254.0844132,
385 | "cycles": 446471363.0643212,
386 | "task-clock": 124.30010978498626,
387 | "branches": 33847714.36469823,
388 | "branch-misses": 856050.1356802923,
389 | "max-rss": 612.3510342343168,
390 | "wall-time": 0.12505839172675162,
391 | "size-file": 0,
392 | "size-text": 0,
393 | "size-data": 0,
394 | "size-bss": 0,
395 | "size-total": 0
396 | },
397 | "ClamAV": {
398 | "instructions": 22838765.66242953,
399 | "instructions:u": 22662116.764946803,
400 | "cycles": 327927815.7457274,
401 | "task-clock": 91.35267105754507,
402 | "branches": 5108734.889675777,
403 | "branch-misses": 410097.8607768009,
404 | "max-rss": 2446.151484673455,
405 | "wall-time": 0.09037599469597934,
406 | "size-file": 0,
407 | "size-text": 0,
408 | "size-data": 0,
409 | "size-bss": 0,
410 | "size-total": 0
411 | },
412 | "kimwitu++": {
413 | "instructions": 33327090.1061018,
414 | "instructions:u": 33456171.685385793,
415 | "cycles": 266619539.28501442,
416 | "task-clock": 74.29193790290853,
417 | "branches": 8030406.330263527,
418 | "branch-misses": 409406.99461617175,
419 | "max-rss": 890.5670963664616,
420 | "wall-time": 0.0745884136150085,
421 | "size-file": 0,
422 | "size-text": 0,
423 | "size-data": 0,
424 | "size-bss": 0,
425 | "size-total": 0
426 | },
427 | "sqlite3": {
428 | "instructions": 28716696.919483226,
429 | "instructions:u": 28694698.969228815,
430 | "cycles": 315285902.7813037,
431 | "task-clock": 87.86253259354554,
432 | "branches": 6489391.207856461,
433 | "branch-misses": 587204.1428423813,
434 | "max-rss": 1118.0597077012912,
435 | "wall-time": 0.08889619526189949,
436 | "size-file": 0,
437 | "size-text": 0,
438 | "size-data": 0,
439 | "size-bss": 0,
440 | "size-total": 0
441 | },
442 | "SPASS": {
443 | "instructions": 23459543.940058153,
444 | "instructions:u": 23437092.864126924,
445 | "cycles": 360205627.37949747,
446 | "task-clock": 100.3220469683002,
447 | "branches": 5333000.961531595,
448 | "branch-misses": 390282.4382975836,
449 | "max-rss": 1679.7393447166728,
450 | "wall-time": 0.09847575295230356,
451 | "size-file": 0,
452 | "size-text": 0,
453 | "size-data": 0,
454 | "size-bss": 0,
455 | "size-total": 0
456 | },
457 | "7zip": {
458 | "instructions": 68445422.36117455,
459 | "instructions:u": 68469216.13887492,
460 | "cycles": 484272747.70878774,
461 | "task-clock": 134.67566724550397,
462 | "branches": 15735716.900751073,
463 | "branch-misses": 899260.8862309896,
464 | "max-rss": 3723.251697586679,
465 | "wall-time": 0.14251801988190202,
466 | "size-file": 0,
467 | "size-text": 0,
468 | "size-data": 0,
469 | "size-bss": 0,
470 | "size-total": 0
471 | },
472 | "consumer-typeset": {
473 | "instructions": 17150296.12923441,
474 | "instructions:u": 17002592.446617056,
475 | "cycles": 229097511.4235813,
476 | "task-clock": 63.82752845593222,
477 | "branches": 4080701.554053691,
478 | "branch-misses": 328003.84190780873,
479 | "max-rss": 1856.7271277945786,
480 | "wall-time": 0.06285723539680046,
481 | "size-file": 0,
482 | "size-text": 0,
483 | "size-data": 0,
484 | "size-bss": 0,
485 | "size-total": 0
486 | },
487 | "geomean": {
488 | "instructions": 12345449.592495468,
489 | "instructions:u": 12278547.936421398,
490 | "cycles": 124005689.64311247,
491 | "task-clock": 34.4629009015263,
492 | "branches": 2789008.841269543,
493 | "branch-misses": 213420.40749255512,
494 | "max-rss": 825.6307934839514,
495 | "wall-time": 0.03507244244745925,
496 | "size-file": 0,
497 | "size-text": 0,
498 | "size-data": 0,
499 | "size-bss": 0,
500 | "size-total": 0
501 | }
502 | },
503 | "O0-g": {
504 | "lencod": {
505 | "instructions": 2730495.2733295355,
506 | "instructions:u": 2306071.7298485786,
507 | "cycles": 55232403.19887706,
508 | "task-clock": 15.352089157641299,
509 | "branches": 377861.6514575272,
510 | "branch-misses": 50961.76709430967,
511 | "max-rss": 1860.7256738550302,
512 | "wall-time": 0.0270927144091421,
513 | "size-file": 0,
514 | "size-text": 0,
515 | "size-data": 0,
516 | "size-bss": 0,
517 | "size-total": 0
518 | },
519 | "Bullet": {
520 | "instructions": 13778335.30745213,
521 | "instructions:u": 13660847.711150404,
522 | "cycles": 199312583.97756177,
523 | "task-clock": 55.37994931136801,
524 | "branches": 3071856.8203410143,
525 | "branch-misses": 315318.046502757,
526 | "max-rss": 2599.558285500448,
527 | "wall-time": 0.06275047992908114,
528 | "size-file": 0,
529 | "size-text": 0,
530 | "size-data": 0,
531 | "size-bss": 0,
532 | "size-total": 0
533 | },
534 | "mafft": {
535 | "instructions": 1974445.9700299108,
536 | "instructions:u": 1728148.5792484132,
537 | "cycles": 25468053.31630853,
538 | "task-clock": 7.080578920564487,
539 | "branches": 418116.56770431047,
540 | "branch-misses": 33463.817968863805,
541 | "max-rss": 1312.6772456283668,
542 | "wall-time": 0.014599049705575294,
543 | "size-file": 0,
544 | "size-text": 0,
545 | "size-data": 0,
546 | "size-bss": 0,
547 | "size-total": 0
548 | },
549 | "tramp3d-v4": {
550 | "instructions": 46475506.36842899,
551 | "instructions:u": 46485425.7988175,
552 | "cycles": 52010211.79708616,
553 | "task-clock": 14.46075036658818,
554 | "branches": 10699919.347341726,
555 | "branch-misses": 281830.00848103117,
556 | "max-rss": 232.3358854521843,
557 | "wall-time": 0.015266073233215178,
558 | "size-file": 0,
559 | "size-text": 0,
560 | "size-data": 0,
561 | "size-bss": 0,
562 | "size-total": 0
563 | },
564 | "ClamAV": {
565 | "instructions": 3284510.0167231853,
566 | "instructions:u": 2295706.396567847,
567 | "cycles": 73522179.61611174,
568 | "task-clock": 20.438145953349554,
569 | "branches": 509934.1480636718,
570 | "branch-misses": 64613.46508181979,
571 | "max-rss": 2538.78488573579,
572 | "wall-time": 0.03302983423239966,
573 | "size-file": 0,
574 | "size-text": 0,
575 | "size-data": 0,
576 | "size-bss": 0,
577 | "size-total": 0
578 | },
579 | "kimwitu++": {
580 | "instructions": 12052475.01529732,
581 | "instructions:u": 12014253.953124918,
582 | "cycles": 66281564.58350421,
583 | "task-clock": 18.41723164079286,
584 | "branches": 2638151.002667659,
585 | "branch-misses": 197656.87209368002,
586 | "max-rss": 795.2580269086983,
587 | "wall-time": 0.020579325265528095,
588 | "size-file": 0,
589 | "size-text": 0,
590 | "size-data": 0,
591 | "size-bss": 0,
592 | "size-total": 0
593 | },
594 | "sqlite3": {
595 | "instructions": 2372485.239977164,
596 | "instructions:u": 2356562.704193719,
597 | "cycles": 19648841.222692322,
598 | "task-clock": 5.4691920274030705,
599 | "branches": 414928.18613666523,
600 | "branch-misses": 58200.692356234096,
601 | "max-rss": 386.6536936918897,
602 | "wall-time": 0.006841709247037949,
603 | "size-file": 0,
604 | "size-text": 0,
605 | "size-data": 0,
606 | "size-bss": 0,
607 | "size-total": 0
608 | },
609 | "SPASS": {
610 | "instructions": 3195484.140636877,
611 | "instructions:u": 2813075.3556655045,
612 | "cycles": 57154926.04872979,
613 | "task-clock": 15.88109658334016,
614 | "branches": 541686.8551385736,
615 | "branch-misses": 96509.73573456456,
616 | "max-rss": 1798.3647979241093,
617 | "wall-time": 0.0246199164423698,
618 | "size-file": 0,
619 | "size-text": 0,
620 | "size-data": 0,
621 | "size-bss": 0,
622 | "size-total": 0
623 | },
624 | "7zip": {
625 | "instructions": 14246916.952818118,
626 | "instructions:u": 14027817.205212321,
627 | "cycles": 273505055.35141766,
628 | "task-clock": 76.00847750004243,
629 | "branches": 3369040.877917445,
630 | "branch-misses": 480466.221299757,
631 | "max-rss": 3870.3597313947635,
632 | "wall-time": 0.08837566047209997,
633 | "size-file": 0,
634 | "size-text": 0,
635 | "size-data": 0,
636 | "size-bss": 0,
637 | "size-total": 0
638 | },
639 | "consumer-typeset": {
640 | "instructions": 2870331.1929246257,
641 | "instructions:u": 2397893.9640833563,
642 | "cycles": 53766725.17612757,
643 | "task-clock": 14.944995235803386,
644 | "branches": 430715.4499251301,
645 | "branch-misses": 52668.18629826866,
646 | "max-rss": 1737.6631147398734,
647 | "wall-time": 0.026610363116107216,
648 | "size-file": 0,
649 | "size-text": 0,
650 | "size-data": 0,
651 | "size-bss": 0,
652 | "size-total": 0
653 | },
654 | "geomean": {
655 | "instructions": 4734089.302808252,
656 | "instructions:u": 4598047.827198434,
657 | "cycles": 57920776.24121865,
658 | "task-clock": 16.097603991109448,
659 | "branches": 929064.9248010732,
660 | "branch-misses": 74838.69009401138,
661 | "max-rss": 564.5531970698399,
662 | "wall-time": 0.017504688530757782,
663 | "size-file": 0,
664 | "size-text": 0,
665 | "size-data": 0,
666 | "size-bss": 0,
667 | "size-total": 0
668 | }
669 | },
670 | "NewPM-O3": {
671 | "lencod": {
672 | "instructions": 9170040.281151814,
673 | "instructions:u": 8843317.418703245,
674 | "cycles": 174108522.53421003,
675 | "task-clock": 48.50692945384487,
676 | "branches": 2082000.8592320061,
677 | "branch-misses": 245423.64390309417,
678 | "max-rss": 1813.8579734828963,
679 | "wall-time": 0.05761821648548128,
680 | "size-file": 0,
681 | "size-text": 0,
682 | "size-data": 0,
683 | "size-bss": 0,
684 | "size-total": 0
685 | },
686 | "Bullet": {
687 | "instructions": 15519505.799878187,
688 | "instructions:u": 15134251.2434066,
689 | "cycles": 298938689.83612764,
690 | "task-clock": 82.91155641280936,
691 | "branches": 3496120.215396852,
692 | "branch-misses": 382675.75616299146,
693 | "max-rss": 2936.888074904478,
694 | "wall-time": 0.0878346136488272,
695 | "size-file": 0,
696 | "size-text": 0,
697 | "size-data": 0,
698 | "size-bss": 0,
699 | "size-total": 0
700 | },
701 | "mafft": {
702 | "instructions": 6659106.308555456,
703 | "instructions:u": 6588530.21355354,
704 | "cycles": 88711816.19913253,
705 | "task-clock": 24.66126501494,
706 | "branches": 1559470.8780928566,
707 | "branch-misses": 167500.15994729663,
708 | "max-rss": 1010.7192319599238,
709 | "wall-time": 0.029845029845044658,
710 | "size-file": 0,
711 | "size-text": 0,
712 | "size-data": 0,
713 | "size-bss": 0,
714 | "size-total": 0
715 | },
716 | "tramp3d-v4": {
717 | "instructions": 46203515.56176312,
718 | "instructions:u": 45325541.531923555,
719 | "cycles": 174595453.5023494,
720 | "task-clock": 48.40323214785199,
721 | "branches": 11070619.398871405,
722 | "branch-misses": 652447.0556451938,
723 | "max-rss": 206.7560507364392,
724 | "wall-time": 0.04909975855666279,
725 | "size-file": 0,
726 | "size-text": 0,
727 | "size-data": 0,
728 | "size-bss": 0,
729 | "size-total": 0
730 | },
731 | "ClamAV": {
732 | "instructions": 5958359.966791389,
733 | "instructions:u": 5941103.084096791,
734 | "cycles": 158083817.81130219,
735 | "task-clock": 43.91078952023382,
736 | "branches": 1342505.6049988575,
737 | "branch-misses": 258765.85389147166,
738 | "max-rss": 2230.203730025433,
739 | "wall-time": 0.04912233740629663,
740 | "size-file": 0,
741 | "size-text": 0,
742 | "size-data": 0,
743 | "size-bss": 0,
744 | "size-total": 0
745 | },
746 | "kimwitu++": {
747 | "instructions": 40273635.54161706,
748 | "instructions:u": 40373408.87859276,
749 | "cycles": 114590111.6579974,
750 | "task-clock": 31.830544453110683,
751 | "branches": 8792013.152699446,
752 | "branch-misses": 369602.810554565,
753 | "max-rss": 772.5551760230462,
754 | "wall-time": 0.034562355990483344,
755 | "size-file": 0,
756 | "size-text": 0,
757 | "size-data": 0,
758 | "size-bss": 0,
759 | "size-total": 0
760 | },
761 | "sqlite3": {
762 | "instructions": 16216304.27199467,
763 | "instructions:u": 16281366.03177278,
764 | "cycles": 124055494.93468787,
765 | "task-clock": 34.438687390980725,
766 | "branches": 3259949.048104438,
767 | "branch-misses": 468554.9050817334,
768 | "max-rss": 320.08307893319636,
769 | "wall-time": 0.03496253755461783,
770 | "size-file": 0,
771 | "size-text": 0,
772 | "size-data": 0,
773 | "size-bss": 0,
774 | "size-total": 0
775 | },
776 | "SPASS": {
777 | "instructions": 5810736.578190548,
778 | "instructions:u": 5722388.852220032,
779 | "cycles": 117987424.31293267,
780 | "task-clock": 32.79519905486768,
781 | "branches": 1494504.436011207,
782 | "branch-misses": 279213.0553557818,
783 | "max-rss": 1620.1769566833561,
784 | "wall-time": 0.03758458203108897,
785 | "size-file": 0,
786 | "size-text": 0,
787 | "size-data": 0,
788 | "size-bss": 0,
789 | "size-total": 0
790 | },
791 | "7zip": {
792 | "instructions": 21623700.558387354,
793 | "instructions:u": 21750722.847475022,
794 | "cycles": 456828354.0572104,
795 | "task-clock": 126.78260295401209,
796 | "branches": 5831764.518198696,
797 | "branch-misses": 696607.5115224888,
798 | "max-rss": 3049.5838473923654,
799 | "wall-time": 0.13217550038954076,
800 | "size-file": 0,
801 | "size-text": 0,
802 | "size-data": 0,
803 | "size-bss": 0,
804 | "size-total": 0
805 | },
806 | "consumer-typeset": {
807 | "instructions": 5319084.578514375,
808 | "instructions:u": 5123890.106036547,
809 | "cycles": 107070582.34820159,
810 | "task-clock": 29.732496109462243,
811 | "branches": 1286527.0390969494,
812 | "branch-misses": 186978.33449125054,
813 | "max-rss": 1534.2792202876406,
814 | "wall-time": 0.0389193748913757,
815 | "size-file": 0,
816 | "size-text": 0,
817 | "size-data": 0,
818 | "size-bss": 0,
819 | "size-total": 0
820 | },
821 | "geomean": {
822 | "instructions": 8090848.436212413,
823 | "instructions:u": 8148875.38966464,
824 | "cycles": 138044233.2991571,
825 | "task-clock": 38.32036883946334,
826 | "branches": 1967692.5629665416,
827 | "branch-misses": 229865.31056615044,
828 | "max-rss": 526.6464004830285,
829 | "wall-time": 0.0397294710712811,
830 | "size-file": 0,
831 | "size-text": 0,
832 | "size-data": 0,
833 | "size-bss": 0,
834 | "size-total": 0
835 | }
836 | }
837 | }
--------------------------------------------------------------------------------
/stddev/summary_2.json:
--------------------------------------------------------------------------------
1 | {
2 | "NewPM-O3": {
3 | "lencod": {
4 | "instructions": 11377619.311588587,
5 | "instructions:u": 9091292.205879373,
6 | "cycles": 95214863.8137766,
7 | "task-clock": 26.525201070685128,
8 | "branches": 2568112.458170299,
9 | "branch-misses": 273598.2155167025,
10 | "max-rss": 2306.1652931703447,
11 | "wall-time": 0.03921099695584481,
12 | "size-file": 0,
13 | "size-text": 0,
14 | "size-data": 0,
15 | "size-bss": 0,
16 | "size-total": 0
17 | },
18 | "Bullet": {
19 | "instructions": 21431917.588546216,
20 | "instructions:u": 15296472.777979719,
21 | "cycles": 134980681.43536788,
22 | "task-clock": 37.63860195474292,
23 | "branches": 4342721.991045931,
24 | "branch-misses": 372000.5237205862,
25 | "max-rss": 3935.05954267271,
26 | "wall-time": 0.059887157752055956,
27 | "size-file": 0,
28 | "size-text": 0,
29 | "size-data": 0,
30 | "size-bss": 0,
31 | "size-total": 0
32 | },
33 | "mafft": {
34 | "instructions": 7412255.090108408,
35 | "instructions:u": 5813642.551933259,
36 | "cycles": 83596586.17223836,
37 | "task-clock": 23.335718808391665,
38 | "branches": 1758545.881897313,
39 | "branch-misses": 208242.44273453302,
40 | "max-rss": 1528.0624362166827,
41 | "wall-time": 0.030532819362835438,
42 | "size-file": 0,
43 | "size-text": 0,
44 | "size-data": 0,
45 | "size-bss": 0,
46 | "size-total": 0
47 | },
48 | "tramp3d-v4": {
49 | "instructions": 45529834.13799549,
50 | "instructions:u": 45342479.42813111,
51 | "cycles": 190868530.17329937,
52 | "task-clock": 53.11882943575115,
53 | "branches": 11097059.868431423,
54 | "branch-misses": 928507.7088320066,
55 | "max-rss": 425.343416427021,
56 | "wall-time": 0.05416258768460306,
57 | "size-file": 0,
58 | "size-text": 0,
59 | "size-data": 0,
60 | "size-bss": 0,
61 | "size-total": 0
62 | },
63 | "ClamAV": {
64 | "instructions": 55588116.56883852,
65 | "instructions:u": 8498343.366999345,
66 | "cycles": 111411090.69390003,
67 | "task-clock": 31.066583483252224,
68 | "branches": 9474293.184228081,
69 | "branch-misses": 291250.03287198883,
70 | "max-rss": 3111.9722108135716,
71 | "wall-time": 0.06541085092203391,
72 | "size-file": 0,
73 | "size-text": 0,
74 | "size-data": 0,
75 | "size-bss": 0,
76 | "size-total": 0
77 | },
78 | "kimwitu++": {
79 | "instructions": 27880673.267231997,
80 | "instructions:u": 27295429.047638424,
81 | "cycles": 130014323.42476869,
82 | "task-clock": 36.208898412127255,
83 | "branches": 6354683.925170853,
84 | "branch-misses": 658319.8747862871,
85 | "max-rss": 1238.1924157054618,
86 | "wall-time": 0.04066634196866981,
87 | "size-file": 0,
88 | "size-text": 0,
89 | "size-data": 0,
90 | "size-bss": 0,
91 | "size-total": 0
92 | },
93 | "sqlite3": {
94 | "instructions": 14911197.954737805,
95 | "instructions:u": 13756150.186965123,
96 | "cycles": 137458522.1463057,
97 | "task-clock": 38.30270424501772,
98 | "branches": 3130638.1232742136,
99 | "branch-misses": 497310.4731532994,
100 | "max-rss": 461.82313725889105,
101 | "wall-time": 0.03942464891047031,
102 | "size-file": 0,
103 | "size-text": 0,
104 | "size-data": 0,
105 | "size-bss": 0,
106 | "size-total": 0
107 | },
108 | "SPASS": {
109 | "instructions": 31892252.60146395,
110 | "instructions:u": 5688849.157649295,
111 | "cycles": 73556695.3435466,
112 | "task-clock": 20.524887066811875,
113 | "branches": 5435365.467405944,
114 | "branch-misses": 281561.81619785895,
115 | "max-rss": 2158.868554982876,
116 | "wall-time": 0.037722405680321806,
117 | "size-file": 0,
118 | "size-text": 0,
119 | "size-data": 0,
120 | "size-bss": 0,
121 | "size-total": 0
122 | },
123 | "7zip": {
124 | "instructions": 40002224.10490832,
125 | "instructions:u": 35831620.78504343,
126 | "cycles": 244642665.99627337,
127 | "task-clock": 68.14790940819971,
128 | "branches": 8957979.31304869,
129 | "branch-misses": 938493.2848222058,
130 | "max-rss": 5009.392091166113,
131 | "wall-time": 0.09356160315485058,
132 | "size-file": 0,
133 | "size-text": 0,
134 | "size-data": 0,
135 | "size-bss": 0,
136 | "size-total": 0
137 | },
138 | "consumer-typeset": {
139 | "instructions": 34476280.052716404,
140 | "instructions:u": 5819829.022749955,
141 | "cycles": 84873571.41649236,
142 | "task-clock": 23.660434085214103,
143 | "branches": 5877611.035729079,
144 | "branch-misses": 195503.6238929725,
145 | "max-rss": 2317.4279821722066,
146 | "wall-time": 0.042913521809138794,
147 | "size-file": 0,
148 | "size-text": 0,
149 | "size-data": 0,
150 | "size-bss": 0,
151 | "size-total": 0
152 | },
153 | "geomean": {
154 | "instructions": 9732614.865374401,
155 | "instructions:u": 6160750.210442767,
156 | "cycles": 58445926.71942353,
157 | "task-clock": 16.29006732848714,
158 | "branches": 1893208.181854034,
159 | "branch-misses": 202580.75664803418,
160 | "max-rss": 777.1702993528291,
161 | "wall-time": 0.022677324526526512,
162 | "size-file": 0,
163 | "size-text": 0,
164 | "size-data": 0,
165 | "size-bss": 0,
166 | "size-total": 0
167 | }
168 | },
169 | "NewPM-ReleaseThinLTO": {
170 | "lencod": {
171 | "instructions": 32087242.733293943,
172 | "instructions:u": 31434499.94465312,
173 | "cycles": 152210172.14109397,
174 | "task-clock": 42.404247257796676,
175 | "branches": 8326239.0675249845,
176 | "branch-misses": 758291.9133415178,
177 | "max-rss": 3516.4439985848426,
178 | "wall-time": 0.3860748602272239,
179 | "size-file": 0,
180 | "size-text": 0,
181 | "size-data": 0,
182 | "size-bss": 0,
183 | "size-total": 0
184 | },
185 | "Bullet": {
186 | "instructions": 14854871.739514831,
187 | "instructions:u": 14602218.123831099,
188 | "cycles": 134500673.50870717,
189 | "task-clock": 37.482939879358796,
190 | "branches": 3463500.4657467757,
191 | "branch-misses": 452003.3441088637,
192 | "max-rss": 4844.740878022526,
193 | "wall-time": 0.2300412161115846,
194 | "size-file": 0,
195 | "size-text": 0,
196 | "size-data": 0,
197 | "size-bss": 0,
198 | "size-total": 0
199 | },
200 | "mafft": {
201 | "instructions": 5916441.908558287,
202 | "instructions:u": 5714119.753884761,
203 | "cycles": 47093660.014001206,
204 | "task-clock": 13.08400817094489,
205 | "branches": 1391509.2159721202,
206 | "branch-misses": 241903.81542940612,
207 | "max-rss": 2290.717174809686,
208 | "wall-time": 0.1321781458397516,
209 | "size-file": 0,
210 | "size-text": 0,
211 | "size-data": 0,
212 | "size-bss": 0,
213 | "size-total": 0
214 | },
215 | "tramp3d-v4": {
216 | "instructions": 51473616.49647436,
217 | "instructions:u": 51263582.66609451,
218 | "cycles": 177319889.12625507,
219 | "task-clock": 49.43449324733694,
220 | "branches": 12323640.86878089,
221 | "branch-misses": 1382331.433056626,
222 | "max-rss": 405.88502110330984,
223 | "wall-time": 0.42781257544406426,
224 | "size-file": 0,
225 | "size-text": 0,
226 | "size-data": 0,
227 | "size-bss": 0,
228 | "size-total": 0
229 | },
230 | "ClamAV": {
231 | "instructions": 18310608.146698613,
232 | "instructions:u": 17900966.89756275,
233 | "cycles": 122174015.90656096,
234 | "task-clock": 34.02650830017194,
235 | "branches": 4250678.276511105,
236 | "branch-misses": 611602.6353698436,
237 | "max-rss": 4868.229289286127,
238 | "wall-time": 0.2495622924950238,
239 | "size-file": 0,
240 | "size-text": 0,
241 | "size-data": 0,
242 | "size-bss": 0,
243 | "size-total": 0
244 | },
245 | "kimwitu++": {
246 | "instructions": 31567490.157480016,
247 | "instructions:u": 31481452.25571163,
248 | "cycles": 97322723.14010882,
249 | "task-clock": 27.129870869169043,
250 | "branches": 7276668.246385179,
251 | "branch-misses": 705219.0516936458,
252 | "max-rss": 1567.1791627015202,
253 | "wall-time": 0.21244973844155593,
254 | "size-file": 0,
255 | "size-text": 0,
256 | "size-data": 0,
257 | "size-bss": 0,
258 | "size-total": 0
259 | },
260 | "sqlite3": {
261 | "instructions": 13898499.574716533,
262 | "instructions:u": 13849157.059818741,
263 | "cycles": 71416452.56002328,
264 | "task-clock": 19.894931431151985,
265 | "branches": 3025152.1340667573,
266 | "branch-misses": 537098.9546726642,
267 | "max-rss": 947.5622589723154,
268 | "wall-time": 0.25749718133302696,
269 | "size-file": 0,
270 | "size-text": 0,
271 | "size-data": 0,
272 | "size-bss": 0,
273 | "size-total": 0
274 | },
275 | "SPASS": {
276 | "instructions": 14141117.066376742,
277 | "instructions:u": 13537452.160244256,
278 | "cycles": 104269014.2532422,
279 | "task-clock": 29.19474704236331,
280 | "branches": 3140171.685977332,
281 | "branch-misses": 631417.9241563899,
282 | "max-rss": 3315.0911800186213,
283 | "wall-time": 0.24982575633141973,
284 | "size-file": 0,
285 | "size-text": 0,
286 | "size-data": 0,
287 | "size-bss": 0,
288 | "size-total": 0
289 | },
290 | "7zip": {
291 | "instructions": 51963646.08533746,
292 | "instructions:u": 51782051.01691626,
293 | "cycles": 260985181.69816834,
294 | "task-clock": 72.7300736567188,
295 | "branches": 12147565.211829958,
296 | "branch-misses": 1500553.842028342,
297 | "max-rss": 9229.615232903549,
298 | "wall-time": 0.10701416658850024,
299 | "size-file": 0,
300 | "size-text": 0,
301 | "size-data": 0,
302 | "size-bss": 0,
303 | "size-total": 0
304 | },
305 | "consumer-typeset": {
306 | "instructions": 11224049.884862527,
307 | "instructions:u": 10882147.270865379,
308 | "cycles": 89034244.36111416,
309 | "task-clock": 24.783348678851794,
310 | "branches": 2619247.832914016,
311 | "branch-misses": 451324.8135643357,
312 | "max-rss": 3255.4859478726376,
313 | "wall-time": 0.14540898859372167,
314 | "size-file": 0,
315 | "size-text": 0,
316 | "size-data": 0,
317 | "size-bss": 0,
318 | "size-total": 0
319 | },
320 | "geomean": {
321 | "instructions": 7663156.585958799,
322 | "instructions:u": 7557261.201166602,
323 | "cycles": 61556527.05631869,
324 | "task-clock": 17.14055709744711,
325 | "branches": 1770283.8802404176,
326 | "branch-misses": 261612.6499324623,
327 | "max-rss": 1122.0927782124975,
328 | "wall-time": 0.05223667800508821,
329 | "size-file": 0,
330 | "size-text": 0,
331 | "size-data": 0,
332 | "size-bss": 0,
333 | "size-total": 0
334 | }
335 | },
336 | "NewPM-ReleaseLTO-g": {
337 | "lencod": {
338 | "instructions": 123524696.95287225,
339 | "instructions:u": 123526866.60167167,
340 | "cycles": 673857988.9014966,
341 | "task-clock": 187.75168472624264,
342 | "branches": 28913546.31450327,
343 | "branch-misses": 676229.4242291342,
344 | "max-rss": 2702.390028962716,
345 | "wall-time": 0.18405252774258896,
346 | "size-file": 0,
347 | "size-text": 0,
348 | "size-data": 0,
349 | "size-bss": 0,
350 | "size-total": 0
351 | },
352 | "Bullet": {
353 | "instructions": 22620735.252955835,
354 | "instructions:u": 22409779.339410372,
355 | "cycles": 286835052.4277189,
356 | "task-clock": 79.93868606871344,
357 | "branches": 5302514.319736742,
358 | "branch-misses": 410062.1204846741,
359 | "max-rss": 4569.578419778021,
360 | "wall-time": 0.09220781432122709,
361 | "size-file": 0,
362 | "size-text": 0,
363 | "size-data": 0,
364 | "size-bss": 0,
365 | "size-total": 0
366 | },
367 | "mafft": {
368 | "instructions": 12338648.3864469,
369 | "instructions:u": 12159918.250757366,
370 | "cycles": 201029465.76114872,
371 | "task-clock": 56.073241987231114,
372 | "branches": 2857488.8162939236,
373 | "branch-misses": 253255.6220243881,
374 | "max-rss": 1779.286653327393,
375 | "wall-time": 0.05325628368394474,
376 | "size-file": 0,
377 | "size-text": 0,
378 | "size-data": 0,
379 | "size-bss": 0,
380 | "size-total": 0
381 | },
382 | "tramp3d-v4": {
383 | "instructions": 89708622.27011317,
384 | "instructions:u": 89643345.77136329,
385 | "cycles": 742461481.7366836,
386 | "task-clock": 206.7603176172981,
387 | "branches": 21417579.090360224,
388 | "branch-misses": 1200766.443165116,
389 | "max-rss": 658.4766315379235,
390 | "wall-time": 0.2082501749741313,
391 | "size-file": 0,
392 | "size-text": 0,
393 | "size-data": 0,
394 | "size-bss": 0,
395 | "size-total": 0
396 | },
397 | "ClamAV": {
398 | "instructions": 28616889.6631168,
399 | "instructions:u": 28407610.089484524,
400 | "cycles": 497862612.6353793,
401 | "task-clock": 138.73644358395913,
402 | "branches": 6668691.758544858,
403 | "branch-misses": 528983.2226841289,
404 | "max-rss": 3638.827989307329,
405 | "wall-time": 0.13886260287654936,
406 | "size-file": 0,
407 | "size-text": 0,
408 | "size-data": 0,
409 | "size-bss": 0,
410 | "size-total": 0
411 | },
412 | "kimwitu++": {
413 | "instructions": 33316082.39713122,
414 | "instructions:u": 33305691.00964997,
415 | "cycles": 466665147.3168189,
416 | "task-clock": 130.01199193619647,
417 | "branches": 7675021.762374458,
418 | "branch-misses": 567152.5337284517,
419 | "max-rss": 1501.870893582025,
420 | "wall-time": 0.12984577465644573,
421 | "size-file": 0,
422 | "size-text": 0,
423 | "size-data": 0,
424 | "size-bss": 0,
425 | "size-total": 0
426 | },
427 | "sqlite3": {
428 | "instructions": 31860792.06101292,
429 | "instructions:u": 31814923.937014524,
430 | "cycles": 528658466.75687766,
431 | "task-clock": 147.22333714759932,
432 | "branches": 7348824.183824497,
433 | "branch-misses": 547891.2867951078,
434 | "max-rss": 549.0131917955648,
435 | "wall-time": 0.14910234353875995,
436 | "size-file": 0,
437 | "size-text": 0,
438 | "size-data": 0,
439 | "size-bss": 0,
440 | "size-total": 0
441 | },
442 | "SPASS": {
443 | "instructions": 35578934.827587225,
444 | "instructions:u": 35522032.84871818,
445 | "cycles": 623255773.3303015,
446 | "task-clock": 173.57866860591142,
447 | "branches": 8292841.541256866,
448 | "branch-misses": 500760.8217799259,
449 | "max-rss": 2509.244017891559,
450 | "wall-time": 0.17042901745558942,
451 | "size-file": 0,
452 | "size-text": 0,
453 | "size-data": 0,
454 | "size-bss": 0,
455 | "size-total": 0
456 | },
457 | "7zip": {
458 | "instructions": 70708715.68221468,
459 | "instructions:u": 70574327.44920947,
460 | "cycles": 601859368.5936258,
461 | "task-clock": 167.58145544541486,
462 | "branches": 16489170.997893833,
463 | "branch-misses": 1299759.2059916302,
464 | "max-rss": 6081.229597401897,
465 | "wall-time": 0.17879820129565574,
466 | "size-file": 0,
467 | "size-text": 0,
468 | "size-data": 0,
469 | "size-bss": 0,
470 | "size-total": 0
471 | },
472 | "consumer-typeset": {
473 | "instructions": 18148286.96318447,
474 | "instructions:u": 17895300.32455656,
475 | "cycles": 298459711.3136276,
476 | "task-clock": 83.18255916135075,
477 | "branches": 4391762.068436882,
478 | "branch-misses": 366731.84963383246,
479 | "max-rss": 2702.7506484484243,
480 | "wall-time": 0.08179789619501404,
481 | "size-file": 0,
482 | "size-text": 0,
483 | "size-data": 0,
484 | "size-bss": 0,
485 | "size-total": 0
486 | },
487 | "geomean": {
488 | "instructions": 13621778.9307946,
489 | "instructions:u": 13543918.37065854,
490 | "cycles": 94573283.74695693,
491 | "task-clock": 26.369237139707842,
492 | "branches": 3180653.283836327,
493 | "branch-misses": 229801.69374783916,
494 | "max-rss": 773.2707581588107,
495 | "wall-time": 0.027249376855125705,
496 | "size-file": 0,
497 | "size-text": 0,
498 | "size-data": 0,
499 | "size-bss": 0,
500 | "size-total": 0
501 | }
502 | },
503 | "NewPM-O0-g": {
504 | "lencod": {
505 | "instructions": 2478059.0154992617,
506 | "instructions:u": 1543916.0392569108,
507 | "cycles": 48673407.31148913,
508 | "task-clock": 13.515214255703816,
509 | "branches": 571074.8174032298,
510 | "branch-misses": 53071.84615266461,
511 | "max-rss": 2714.4484696260065,
512 | "wall-time": 0.03079543087587097,
513 | "size-file": 0,
514 | "size-text": 0,
515 | "size-data": 0,
516 | "size-bss": 0,
517 | "size-total": 0
518 | },
519 | "Bullet": {
520 | "instructions": 15795171.458770467,
521 | "instructions:u": 15440601.08395003,
522 | "cycles": 105049923.61105448,
523 | "task-clock": 29.2109987016235,
524 | "branches": 3586546.612276304,
525 | "branch-misses": 297658.6804843499,
526 | "max-rss": 4509.706159586713,
527 | "wall-time": 0.05190984586630712,
528 | "size-file": 0,
529 | "size-text": 0,
530 | "size-data": 0,
531 | "size-bss": 0,
532 | "size-total": 0
533 | },
534 | "mafft": {
535 | "instructions": 2506575.706279445,
536 | "instructions:u": 1768448.261816984,
537 | "cycles": 20402930.56682028,
538 | "task-clock": 5.6669190432652465,
539 | "branches": 596071.7214545113,
540 | "branch-misses": 39953.11773870727,
541 | "max-rss": 2199.638440602927,
542 | "wall-time": 0.021676075997623386,
543 | "size-file": 0,
544 | "size-text": 0,
545 | "size-data": 0,
546 | "size-bss": 0,
547 | "size-total": 0
548 | },
549 | "tramp3d-v4": {
550 | "instructions": 43225123.43150629,
551 | "instructions:u": 43207705.75898512,
552 | "cycles": 57323156.59231787,
553 | "task-clock": 15.951990831026896,
554 | "branches": 10085292.299314685,
555 | "branch-misses": 393781.5953877175,
556 | "max-rss": 335.80808391660895,
557 | "wall-time": 0.01720027027617435,
558 | "size-file": 0,
559 | "size-text": 0,
560 | "size-data": 0,
561 | "size-bss": 0,
562 | "size-total": 0
563 | },
564 | "ClamAV": {
565 | "instructions": 3989116.2517456147,
566 | "instructions:u": 1862800.0368963918,
567 | "cycles": 59025160.530303255,
568 | "task-clock": 16.374455919900363,
569 | "branches": 870602.9636926729,
570 | "branch-misses": 64466.73309378658,
571 | "max-rss": 4006.678898596915,
572 | "wall-time": 0.04500106388188518,
573 | "size-file": 0,
574 | "size-text": 0,
575 | "size-data": 0,
576 | "size-bss": 0,
577 | "size-total": 0
578 | },
579 | "kimwitu++": {
580 | "instructions": 16650914.84755788,
581 | "instructions:u": 16630897.363506798,
582 | "cycles": 41534934.25280051,
583 | "task-clock": 11.564704956515824,
584 | "branches": 3739192.658396491,
585 | "branch-misses": 270739.0075481378,
586 | "max-rss": 1263.95412752324,
587 | "wall-time": 0.01925515743352285,
588 | "size-file": 0,
589 | "size-text": 0,
590 | "size-data": 0,
591 | "size-bss": 0,
592 | "size-total": 0
593 | },
594 | "sqlite3": {
595 | "instructions": 2995074.3941251766,
596 | "instructions:u": 2950564.897523384,
597 | "cycles": 25223166.536833897,
598 | "task-clock": 7.017873852566865,
599 | "branches": 540085.1241737112,
600 | "branch-misses": 84223.94313413202,
601 | "max-rss": 573.8122659893052,
602 | "wall-time": 0.009875201570351625,
603 | "size-file": 0,
604 | "size-text": 0,
605 | "size-data": 0,
606 | "size-bss": 0,
607 | "size-total": 0
608 | },
609 | "SPASS": {
610 | "instructions": 2827269.8885912043,
611 | "instructions:u": 2095260.1333995776,
612 | "cycles": 36000703.17900554,
613 | "task-clock": 10.00627731802502,
614 | "branches": 632601.0714254966,
615 | "branch-misses": 96274.85270556588,
616 | "max-rss": 2590.4722386301733,
617 | "wall-time": 0.03087616538547428,
618 | "size-file": 0,
619 | "size-text": 0,
620 | "size-data": 0,
621 | "size-bss": 0,
622 | "size-total": 0
623 | },
624 | "7zip": {
625 | "instructions": 30816748.92870498,
626 | "instructions:u": 30331075.133050654,
627 | "cycles": 203004724.08532664,
628 | "task-clock": 56.47665977118398,
629 | "branches": 7137282.4910346,
630 | "branch-misses": 859486.1961022967,
631 | "max-rss": 5974.665565257672,
632 | "wall-time": 0.08646418883981878,
633 | "size-file": 0,
634 | "size-text": 0,
635 | "size-data": 0,
636 | "size-bss": 0,
637 | "size-total": 0
638 | },
639 | "consumer-typeset": {
640 | "instructions": 2524503.0189818367,
641 | "instructions:u": 1494333.974511118,
642 | "cycles": 45165441.16116515,
643 | "task-clock": 12.548021219517858,
644 | "branches": 570073.6978770602,
645 | "branch-misses": 56055.34717182862,
646 | "max-rss": 2652.5239504438555,
647 | "wall-time": 0.028129737730935432,
648 | "size-file": 0,
649 | "size-text": 0,
650 | "size-data": 0,
651 | "size-bss": 0,
652 | "size-total": 0
653 | },
654 | "geomean": {
655 | "instructions": 4333308.907187644,
656 | "instructions:u": 4072876.6956351204,
657 | "cycles": 35775400.72202236,
658 | "task-clock": 9.950319437331665,
659 | "branches": 996361.2512381134,
660 | "branch-misses": 79533.7774073527,
661 | "max-rss": 843.2697598721691,
662 | "wall-time": 0.01507403389755082,
663 | "size-file": 0,
664 | "size-text": 0,
665 | "size-data": 0,
666 | "size-bss": 0,
667 | "size-total": 0
668 | }
669 | }
670 | }
--------------------------------------------------------------------------------
/stddev/summary_3.json:
--------------------------------------------------------------------------------
1 | {
2 | "NewPM-O3": {
3 | "lencod": {
4 | "instructions": 10242781.070893515,
5 | "instructions:u": 8782255.827084105,
6 | "cycles": 136334527.1511841,
7 | "task-clock": 37.911893854954904,
8 | "branches": 2188748.9169933647,
9 | "branch-misses": 246527.52038342028,
10 | "max-rss": 2717.7108354325314,
11 | "wall-time": 0.047102384350296296,
12 | "size-file": 0,
13 | "size-text": 0,
14 | "size-data": 0,
15 | "size-bss": 0,
16 | "size-total": 0
17 | },
18 | "Bullet": {
19 | "instructions": 18666365.664043706,
20 | "instructions:u": 16971241.254317824,
21 | "cycles": 292330249.91540855,
22 | "task-clock": 81.32386642539363,
23 | "branches": 4050702.6372088264,
24 | "branch-misses": 387501.4048210667,
25 | "max-rss": 4369.727536930364,
26 | "wall-time": 0.08333337390950407,
27 | "size-file": 0,
28 | "size-text": 0,
29 | "size-data": 0,
30 | "size-bss": 0,
31 | "size-total": 0
32 | },
33 | "mafft": {
34 | "instructions": 5880798.208913936,
35 | "instructions:u": 5331374.686620967,
36 | "cycles": 89114295.27996606,
37 | "task-clock": 24.81844791333541,
38 | "branches": 1282717.4769402922,
39 | "branch-misses": 187879.75305460786,
40 | "max-rss": 1821.6550123935372,
41 | "wall-time": 0.031541048305259535,
42 | "size-file": 0,
43 | "size-text": 0,
44 | "size-data": 0,
45 | "size-bss": 0,
46 | "size-total": 0
47 | },
48 | "tramp3d-v4": {
49 | "instructions": 52751711.254187636,
50 | "instructions:u": 52160746.17600739,
51 | "cycles": 234986530.52577657,
52 | "task-clock": 65.3212928689367,
53 | "branches": 11911392.60136881,
54 | "branch-misses": 928058.7656715941,
55 | "max-rss": 445.24733878796934,
56 | "wall-time": 0.06749630859363717,
57 | "size-file": 0,
58 | "size-text": 0,
59 | "size-data": 0,
60 | "size-bss": 0,
61 | "size-total": 0
62 | },
63 | "ClamAV": {
64 | "instructions": 18543589.18047759,
65 | "instructions:u": 8565268.990797967,
66 | "cycles": 150557862.54244736,
67 | "task-clock": 41.90335639541081,
68 | "branches": 3186817.564615039,
69 | "branch-misses": 288489.6954548307,
70 | "max-rss": 3658.3689196724554,
71 | "wall-time": 0.0784686312005977,
72 | "size-file": 0,
73 | "size-text": 0,
74 | "size-data": 0,
75 | "size-bss": 0,
76 | "size-total": 0
77 | },
78 | "kimwitu++": {
79 | "instructions": 27773065.79451283,
80 | "instructions:u": 27350588.43990816,
81 | "cycles": 148672835.13165754,
82 | "task-clock": 41.397480302985954,
83 | "branches": 6094370.226057619,
84 | "branch-misses": 623195.9949997171,
85 | "max-rss": 1331.163031575344,
86 | "wall-time": 0.04448836759066926,
87 | "size-file": 0,
88 | "size-text": 0,
89 | "size-data": 0,
90 | "size-bss": 0,
91 | "size-total": 0
92 | },
93 | "sqlite3": {
94 | "instructions": 15278543.742960112,
95 | "instructions:u": 14909836.480388382,
96 | "cycles": 152698732.1695067,
97 | "task-clock": 42.47510780778093,
98 | "branches": 3379870.463607082,
99 | "branch-misses": 518631.27944064926,
100 | "max-rss": 514.9150724593734,
101 | "wall-time": 0.04440183377564006,
102 | "size-file": 0,
103 | "size-text": 0,
104 | "size-data": 0,
105 | "size-bss": 0,
106 | "size-total": 0
107 | },
108 | "SPASS": {
109 | "instructions": 10303143.258758018,
110 | "instructions:u": 6447104.102749876,
111 | "cycles": 121007350.00416557,
112 | "task-clock": 33.66575633962298,
113 | "branches": 1955653.757435491,
114 | "branch-misses": 253879.33206651043,
115 | "max-rss": 2548.9165176989973,
116 | "wall-time": 0.04227868629458605,
117 | "size-file": 0,
118 | "size-text": 0,
119 | "size-data": 0,
120 | "size-bss": 0,
121 | "size-total": 0
122 | },
123 | "7zip": {
124 | "instructions": 48104261.17702963,
125 | "instructions:u": 46765249.00183048,
126 | "cycles": 744386556.8684605,
127 | "task-clock": 207.06643335302275,
128 | "branches": 10892503.019612828,
129 | "branch-misses": 981018.9002269731,
130 | "max-rss": 5746.0551473592295,
131 | "wall-time": 0.2178069050103334,
132 | "size-file": 0,
133 | "size-text": 0,
134 | "size-data": 0,
135 | "size-bss": 0,
136 | "size-total": 0
137 | },
138 | "consumer-typeset": {
139 | "instructions": 11363302.469820047,
140 | "instructions:u": 6361587.293104113,
141 | "cycles": 97412170.98956184,
142 | "task-clock": 27.09406936876472,
143 | "branches": 2046344.0703354166,
144 | "branch-misses": 191950.50094623546,
145 | "max-rss": 2638.8868504147626,
146 | "wall-time": 0.04051023857909489,
147 | "size-file": 0,
148 | "size-text": 0,
149 | "size-data": 0,
150 | "size-bss": 0,
151 | "size-total": 0
152 | },
153 | "geomean": {
154 | "instructions": 7097841.281017012,
155 | "instructions:u": 6653616.9518028535,
156 | "cycles": 131703844.38670455,
157 | "task-clock": 36.62430492779904,
158 | "branches": 1546963.132098973,
159 | "branch-misses": 205082.41966435168,
160 | "max-rss": 863.9969190504848,
161 | "wall-time": 0.03787464375613184,
162 | "size-file": 0,
163 | "size-text": 0,
164 | "size-data": 0,
165 | "size-bss": 0,
166 | "size-total": 0
167 | }
168 | },
169 | "NewPM-ReleaseThinLTO": {
170 | "lencod": {
171 | "instructions": 35964787.04445018,
172 | "instructions:u": 35586089.89919918,
173 | "cycles": 171881010.2943715,
174 | "task-clock": 47.81425859272098,
175 | "branches": 9364857.977241209,
176 | "branch-misses": 713166.9919954109,
177 | "max-rss": 3775.990250313226,
178 | "wall-time": 0.4598158750469942,
179 | "size-file": 0,
180 | "size-text": 0,
181 | "size-data": 0,
182 | "size-bss": 0,
183 | "size-total": 0
184 | },
185 | "Bullet": {
186 | "instructions": 16204871.961841665,
187 | "instructions:u": 15086027.5668632,
188 | "cycles": 275360649.8012509,
189 | "task-clock": 76.54560982286404,
190 | "branches": 3494274.507341372,
191 | "branch-misses": 485896.1767959156,
192 | "max-rss": 5110.5556846672935,
193 | "wall-time": 0.2776257005765381,
194 | "size-file": 0,
195 | "size-text": 0,
196 | "size-data": 0,
197 | "size-bss": 0,
198 | "size-total": 0
199 | },
200 | "mafft": {
201 | "instructions": 5841211.908525024,
202 | "instructions:u": 5400522.629702335,
203 | "cycles": 62570676.01734449,
204 | "task-clock": 17.394828039210243,
205 | "branches": 1296017.8888034988,
206 | "branch-misses": 244947.99307175746,
207 | "max-rss": 2337.1951210096686,
208 | "wall-time": 0.16397063507944665,
209 | "size-file": 0,
210 | "size-text": 0,
211 | "size-data": 0,
212 | "size-bss": 0,
213 | "size-total": 0
214 | },
215 | "tramp3d-v4": {
216 | "instructions": 55367530.8794627,
217 | "instructions:u": 55353734.437396705,
218 | "cycles": 229936860.8606378,
219 | "task-clock": 64.01627586274414,
220 | "branches": 12754984.718757488,
221 | "branch-misses": 1318963.7775255197,
222 | "max-rss": 412.86167400974114,
223 | "wall-time": 0.4512465717984327,
224 | "size-file": 0,
225 | "size-text": 0,
226 | "size-data": 0,
227 | "size-bss": 0,
228 | "size-total": 0
229 | },
230 | "ClamAV": {
231 | "instructions": 18440227.615930986,
232 | "instructions:u": 17873937.585900396,
233 | "cycles": 159011410.7036675,
234 | "task-clock": 44.328048814447804,
235 | "branches": 4175166.850583439,
236 | "branch-misses": 596163.6424873503,
237 | "max-rss": 5288.44321253149,
238 | "wall-time": 0.25354572201230524,
239 | "size-file": 0,
240 | "size-text": 0,
241 | "size-data": 0,
242 | "size-bss": 0,
243 | "size-total": 0
244 | },
245 | "kimwitu++": {
246 | "instructions": 24188803.04488486,
247 | "instructions:u": 24054865.049131475,
248 | "cycles": 128423852.63261433,
249 | "task-clock": 35.731091211210504,
250 | "branches": 5396480.793936386,
251 | "branch-misses": 751999.9050126625,
252 | "max-rss": 1478.8986834886089,
253 | "wall-time": 0.2169434613183934,
254 | "size-file": 0,
255 | "size-text": 0,
256 | "size-data": 0,
257 | "size-bss": 0,
258 | "size-total": 0
259 | },
260 | "sqlite3": {
261 | "instructions": 14997968.91148988,
262 | "instructions:u": 14938417.474984726,
263 | "cycles": 96582955.83037582,
264 | "task-clock": 26.91157301067908,
265 | "branches": 3613947.4537849813,
266 | "branch-misses": 571724.9678132772,
267 | "max-rss": 961.8746503583658,
268 | "wall-time": 0.295334049529273,
269 | "size-file": 0,
270 | "size-text": 0,
271 | "size-data": 0,
272 | "size-bss": 0,
273 | "size-total": 0
274 | },
275 | "SPASS": {
276 | "instructions": 12526190.545236023,
277 | "instructions:u": 12064997.482939843,
278 | "cycles": 129583246.22718716,
279 | "task-clock": 36.09330396157915,
280 | "branches": 2736398.889957677,
281 | "branch-misses": 673343.2874818975,
282 | "max-rss": 3357.384013513911,
283 | "wall-time": 0.25848562110540474,
284 | "size-file": 0,
285 | "size-text": 0,
286 | "size-data": 0,
287 | "size-bss": 0,
288 | "size-total": 0
289 | },
290 | "7zip": {
291 | "instructions": 54622631.63999793,
292 | "instructions:u": 54173549.31476098,
293 | "cycles": 705866878.3860648,
294 | "task-clock": 196.326172043231,
295 | "branches": 12377566.950420909,
296 | "branch-misses": 1529575.344568011,
297 | "max-rss": 9362.890978612255,
298 | "wall-time": 0.21884627116707941,
299 | "size-file": 0,
300 | "size-text": 0,
301 | "size-data": 0,
302 | "size-bss": 0,
303 | "size-total": 0
304 | },
305 | "consumer-typeset": {
306 | "instructions": 11246502.177155461,
307 | "instructions:u": 10733578.380698528,
308 | "cycles": 110641054.68390824,
309 | "task-clock": 30.764275138249285,
310 | "branches": 2533606.7266538134,
311 | "branch-misses": 502228.3103434078,
312 | "max-rss": 3384.7318077126856,
313 | "wall-time": 0.18281452440863008,
314 | "size-file": 0,
315 | "size-text": 0,
316 | "size-data": 0,
317 | "size-bss": 0,
318 | "size-total": 0
319 | },
320 | "geomean": {
321 | "instructions": 7134451.232627899,
322 | "instructions:u": 6974617.612018467,
323 | "cycles": 121789034.67073776,
324 | "task-clock": 33.81534725722855,
325 | "branches": 1655221.6164435071,
326 | "branch-misses": 262755.37272715726,
327 | "max-rss": 1158.4525534368097,
328 | "wall-time": 0.0656919580719092,
329 | "size-file": 0,
330 | "size-text": 0,
331 | "size-data": 0,
332 | "size-bss": 0,
333 | "size-total": 0
334 | }
335 | },
336 | "NewPM-ReleaseLTO-g": {
337 | "lencod": {
338 | "instructions": 41066756.986810386,
339 | "instructions:u": 41050684.01904889,
340 | "cycles": 768531415.0077116,
341 | "task-clock": 214.04335159868992,
342 | "branches": 10220082.712808708,
343 | "branch-misses": 635597.4944830461,
344 | "max-rss": 2913.464868774317,
345 | "wall-time": 0.22072297304912136,
346 | "size-file": 0,
347 | "size-text": 0,
348 | "size-data": 0,
349 | "size-bss": 0,
350 | "size-total": 0
351 | },
352 | "Bullet": {
353 | "instructions": 22980112.72616729,
354 | "instructions:u": 22629135.111330222,
355 | "cycles": 401785536.5218499,
356 | "task-clock": 111.86217205855289,
357 | "branches": 5255094.605218108,
358 | "branch-misses": 415722.96411862556,
359 | "max-rss": 5007.466798069283,
360 | "wall-time": 0.11863092407144551,
361 | "size-file": 0,
362 | "size-text": 0,
363 | "size-data": 0,
364 | "size-bss": 0,
365 | "size-total": 0
366 | },
367 | "mafft": {
368 | "instructions": 11731223.455086963,
369 | "instructions:u": 11324046.324503826,
370 | "cycles": 227711672.88432643,
371 | "task-clock": 63.475606642879185,
372 | "branches": 2646461.8594379416,
373 | "branch-misses": 221561.4843704695,
374 | "max-rss": 1838.8510580775983,
375 | "wall-time": 0.06438017786734707,
376 | "size-file": 0,
377 | "size-text": 0,
378 | "size-data": 0,
379 | "size-bss": 0,
380 | "size-total": 0
381 | },
382 | "tramp3d-v4": {
383 | "instructions": 99956969.44718267,
384 | "instructions:u": 99809166.9186551,
385 | "cycles": 822012767.8148904,
386 | "task-clock": 228.7938576964927,
387 | "branches": 22973949.644172,
388 | "branch-misses": 1184603.4932657029,
389 | "max-rss": 1887.3347983952838,
390 | "wall-time": 0.22991539681273823,
391 | "size-file": 0,
392 | "size-text": 0,
393 | "size-data": 0,
394 | "size-bss": 0,
395 | "size-total": 0
396 | },
397 | "ClamAV": {
398 | "instructions": 26889109.772833634,
399 | "instructions:u": 26761637.114871643,
400 | "cycles": 578851694.8012153,
401 | "task-clock": 161.11816255081987,
402 | "branches": 6280644.396419886,
403 | "branch-misses": 543222.7638669404,
404 | "max-rss": 4046.4210116658787,
405 | "wall-time": 0.17416945771288347,
406 | "size-file": 0,
407 | "size-text": 0,
408 | "size-data": 0,
409 | "size-bss": 0,
410 | "size-total": 0
411 | },
412 | "kimwitu++": {
413 | "instructions": 29520735.628374636,
414 | "instructions:u": 29504682.695088074,
415 | "cycles": 493884118.92888397,
416 | "task-clock": 137.57742137948378,
417 | "branches": 6718538.849217551,
418 | "branch-misses": 563781.2034561638,
419 | "max-rss": 1462.5015552773407,
420 | "wall-time": 0.14197687867071682,
421 | "size-file": 0,
422 | "size-text": 0,
423 | "size-data": 0,
424 | "size-bss": 0,
425 | "size-total": 0
426 | },
427 | "sqlite3": {
428 | "instructions": 28812330.887916435,
429 | "instructions:u": 28798930.92576408,
430 | "cycles": 584638895.2261076,
431 | "task-clock": 162.7533855640675,
432 | "branches": 7026116.8413279615,
433 | "branch-misses": 551796.6038472054,
434 | "max-rss": 597.7120379618797,
435 | "wall-time": 0.16439896062803536,
436 | "size-file": 0,
437 | "size-text": 0,
438 | "size-data": 0,
439 | "size-bss": 0,
440 | "size-total": 0
441 | },
442 | "SPASS": {
443 | "instructions": 33812514.05876578,
444 | "instructions:u": 33693953.46737822,
445 | "cycles": 715526057.4676409,
446 | "task-clock": 199.1967029665613,
447 | "branches": 7869353.399463154,
448 | "branch-misses": 511286.808278135,
449 | "max-rss": 3279.621977672125,
450 | "wall-time": 0.20508903226693204,
451 | "size-file": 0,
452 | "size-text": 0,
453 | "size-data": 0,
454 | "size-bss": 0,
455 | "size-total": 0
456 | },
457 | "7zip": {
458 | "instructions": 73460867.96316044,
459 | "instructions:u": 73261219.9583856,
460 | "cycles": 917737302.9532976,
461 | "task-clock": 255.3608827925649,
462 | "branches": 16909088.990053866,
463 | "branch-misses": 1414129.466484592,
464 | "max-rss": 6483.822540524455,
465 | "wall-time": 0.2613352552157176,
466 | "size-file": 0,
467 | "size-text": 0,
468 | "size-data": 0,
469 | "size-bss": 0,
470 | "size-total": 0
471 | },
472 | "consumer-typeset": {
473 | "instructions": 17331200.062424973,
474 | "instructions:u": 16914863.767339606,
475 | "cycles": 314179251.8180003,
476 | "task-clock": 87.5024144441731,
477 | "branches": 4083408.18044431,
478 | "branch-misses": 379576.0098121533,
479 | "max-rss": 2915.0848696324847,
480 | "wall-time": 0.09519921463190514,
481 | "size-file": 0,
482 | "size-text": 0,
483 | "size-data": 0,
484 | "size-bss": 0,
485 | "size-total": 0
486 | },
487 | "geomean": {
488 | "instructions": 10755267.210967803,
489 | "instructions:u": 10692150.623801338,
490 | "cycles": 151611245.9826063,
491 | "task-clock": 42.198653516197844,
492 | "branches": 2519937.7479742533,
493 | "branch-misses": 227485.662190503,
494 | "max-rss": 980.0452813294273,
495 | "wall-time": 0.04319015110211913,
496 | "size-file": 0,
497 | "size-text": 0,
498 | "size-data": 0,
499 | "size-bss": 0,
500 | "size-total": 0
501 | }
502 | },
503 | "NewPM-O0-g": {
504 | "lencod": {
505 | "instructions": 2656099.4172798865,
506 | "instructions:u": 1613234.1881295857,
507 | "cycles": 66045168.299650624,
508 | "task-clock": 18.367187387440524,
509 | "branches": 535219.580100558,
510 | "branch-misses": 51715.63970192876,
511 | "max-rss": 3143.187168152178,
512 | "wall-time": 0.026660706373871742,
513 | "size-file": 0,
514 | "size-text": 0,
515 | "size-data": 0,
516 | "size-bss": 0,
517 | "size-total": 0
518 | },
519 | "Bullet": {
520 | "instructions": 16888675.51275845,
521 | "instructions:u": 16455029.17622803,
522 | "cycles": 242888461.44037846,
523 | "task-clock": 67.57744158531764,
524 | "branches": 3826876.039525417,
525 | "branch-misses": 311313.1334115878,
526 | "max-rss": 4768.651777936902,
527 | "wall-time": 0.07135546534132484,
528 | "size-file": 0,
529 | "size-text": 0,
530 | "size-data": 0,
531 | "size-bss": 0,
532 | "size-total": 0
533 | },
534 | "mafft": {
535 | "instructions": 2310490.5916153914,
536 | "instructions:u": 1117175.6856271266,
537 | "cycles": 31748184.540632706,
538 | "task-clock": 8.828126063158496,
539 | "branches": 455582.2789665655,
540 | "branch-misses": 37653.992263895314,
541 | "max-rss": 2532.062616467446,
542 | "wall-time": 0.018468217312722662,
543 | "size-file": 0,
544 | "size-text": 0,
545 | "size-data": 0,
546 | "size-bss": 0,
547 | "size-total": 0
548 | },
549 | "tramp3d-v4": {
550 | "instructions": 43604135.3286671,
551 | "instructions:u": 43569940.76329338,
552 | "cycles": 76646307.60399047,
553 | "task-clock": 21.338827590780504,
554 | "branches": 10433967.38096134,
555 | "branch-misses": 379431.13005602383,
556 | "max-rss": 366.4416731172855,
557 | "wall-time": 0.022696807261151548,
558 | "size-file": 0,
559 | "size-text": 0,
560 | "size-data": 0,
561 | "size-bss": 0,
562 | "size-total": 0
563 | },
564 | "ClamAV": {
565 | "instructions": 3523406.98777069,
566 | "instructions:u": 1600998.4730264433,
567 | "cycles": 92827858.25994845,
568 | "task-clock": 25.813779378706673,
569 | "branches": 744215.387373001,
570 | "branch-misses": 60949.448351060164,
571 | "max-rss": 4789.104235670978,
572 | "wall-time": 0.02950882564716904,
573 | "size-file": 0,
574 | "size-text": 0,
575 | "size-data": 0,
576 | "size-bss": 0,
577 | "size-total": 0
578 | },
579 | "kimwitu++": {
580 | "instructions": 16617345.596678177,
581 | "instructions:u": 16553069.012376063,
582 | "cycles": 83409669.02678752,
583 | "task-clock": 23.198593262674567,
584 | "branches": 3703456.132023096,
585 | "branch-misses": 223500.20642611344,
586 | "max-rss": 1392.0620110456102,
587 | "wall-time": 0.02503639063757842,
588 | "size-file": 0,
589 | "size-text": 0,
590 | "size-data": 0,
591 | "size-bss": 0,
592 | "size-total": 0
593 | },
594 | "sqlite3": {
595 | "instructions": 3286407.5441327407,
596 | "instructions:u": 3215228.560110111,
597 | "cycles": 30726742.419662938,
598 | "task-clock": 8.554279279749007,
599 | "branches": 617264.1386901432,
600 | "branch-misses": 78465.82687624365,
601 | "max-rss": 668.933531668904,
602 | "wall-time": 0.010165965570656273,
603 | "size-file": 0,
604 | "size-text": 0,
605 | "size-data": 0,
606 | "size-bss": 0,
607 | "size-total": 0
608 | },
609 | "SPASS": {
610 | "instructions": 3766919.364988156,
611 | "instructions:u": 3166842.9672714174,
612 | "cycles": 71057110.56288865,
613 | "task-clock": 19.764435171978562,
614 | "branches": 803685.5553824289,
615 | "branch-misses": 94144.3112742639,
616 | "max-rss": 3124.2191031460125,
617 | "wall-time": 0.02538326899411436,
618 | "size-file": 0,
619 | "size-text": 0,
620 | "size-data": 0,
621 | "size-bss": 0,
622 | "size-total": 0
623 | },
624 | "7zip": {
625 | "instructions": 37596244.67274396,
626 | "instructions:u": 37160817.174864195,
627 | "cycles": 655596003.3738506,
628 | "task-clock": 182.31399808594784,
629 | "branches": 8566083.901351487,
630 | "branch-misses": 903840.7190290903,
631 | "max-rss": 6821.884865067622,
632 | "wall-time": 0.1843346128455051,
633 | "size-file": 0,
634 | "size-text": 0,
635 | "size-data": 0,
636 | "size-bss": 0,
637 | "size-total": 0
638 | },
639 | "consumer-typeset": {
640 | "instructions": 2685609.725306762,
641 | "instructions:u": 1265173.7054511856,
642 | "cycles": 62870384.734676674,
643 | "task-clock": 17.48676930366644,
644 | "branches": 550351.1271082921,
645 | "branch-misses": 55837.328383100656,
646 | "max-rss": 3177.5301812474313,
647 | "wall-time": 0.02677606027127758,
648 | "size-file": 0,
649 | "size-text": 0,
650 | "size-data": 0,
651 | "size-bss": 0,
652 | "size-total": 0
653 | },
654 | "geomean": {
655 | "instructions": 4440986.421640543,
656 | "instructions:u": 4162913.8736166907,
657 | "cycles": 75733807.49299318,
658 | "task-clock": 21.068797881526695,
659 | "branches": 1034799.5131579224,
660 | "branch-misses": 76866.05307382064,
661 | "max-rss": 997.9367244048742,
662 | "wall-time": 0.02216125223113973,
663 | "size-file": 0,
664 | "size-text": 0,
665 | "size-data": 0,
666 | "size-bss": 0,
667 | "size-total": 0
668 | }
669 | }
670 | }
--------------------------------------------------------------------------------
/timeit.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | if [[ $# -lt 2 || $1 != "--summary" ]]; then
3 | echo "Missing --summary option"
4 | exit 1
5 | fi
6 |
7 | OUT=$2
8 | shift 2
9 |
10 | TIME_OUT=$OUT
11 | PERF_OUT="$OUT.perfstats"
12 | LC_ALL=C \
13 | time -f "%M;%e" -o $TIME_OUT \
14 | perf stat -x \; -o $PERF_OUT \
15 | -e instructions \
16 | -e instructions:u \
17 | -e cycles \
18 | -e task-clock \
19 | -e branches \
20 | -e branch-misses \
21 | $@
22 |
--------------------------------------------------------------------------------
/timeit_launcher.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | ARGS=("$@")
3 |
4 | PERF_OUT=""
5 | while [[ $# -gt 0 ]]; do
6 | if [ "$1" = "-o" ]; then
7 | PERF_OUT="$2.time.perfstats"
8 | fi
9 | shift
10 | done
11 |
12 | if [ -z "$PERF_OUT" ]; then
13 | "${ARGS[@]}"
14 | else
15 | LC_ALL=C perf stat -x \; -o $PERF_OUT -e instructions:u "${ARGS[@]}"
16 | fi
17 |
--------------------------------------------------------------------------------