├── .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 | 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 | 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"; 48 | echo "\n"; 49 | echo "\n"; 50 | echo "\n"; 51 | echo ""; 53 | echo "\n"; 54 | 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 ""; 118 | echo ""; 119 | echo ""; 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 "\n"; 129 | echo "\n"; 130 | echo "\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 "\n"; 145 | echo "\n"; 146 | echo "\n"; 147 | echo "\n"; 148 | } 149 | } 150 | } 151 | echo "
BenchmarkOldNew
$bench", formatMetric($fromAggMetric, $stat), "", formatMetricDiff($toAggMetric, $fromAggMetric, $stat, $stddev), "
$file", formatMetric($fromMetric, $stat), "", formatMetricDiff($toMetric, $fromMetric, $stat, $stddev), "
\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 ""; 169 | echo ""; 170 | echo ""; 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 "\n"; 180 | echo "\n"; 181 | echo "\n"; 182 | echo "\n"; 183 | } 184 | echo "
BenchmarkOldNew
$bench", formatMetric($fromAggMetric, $stat), "", formatMetricDiff($toAggMetric, $fromAggMetric, $stat, $stddev), "
\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 "\n"; 195 | echo "\n"; 196 | echo "\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 "\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 "\n"; 220 | echo "\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 "\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 "\n"; 235 | echo "\n"; 236 | echo "\n"; 237 | } 238 | echo "\n"; 239 | echo "\n"; 240 | echo "\n"; 247 | echo "\n"; 254 | echo "\n"; 255 | echo "
MetricOldNew
"; 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 "", formatMetric($fromMetric, $stat), "", formatMetricDiff($toMetric, $fromMetric, $stat, $stddev), "
$stat (stage1)", formatMetric($fromMetric, $stat), "", formatMetricDiff($toMetric, $fromMetric, $stat, $stddev), "
Ninja trace\n"; 241 | if ($fromStage2) { 242 | $ninjaTraceUrlFrom = makeUrl("ninja_trace.php", ["commit" => $from]); 243 | echo "Download\n"; 244 | echo "View\n"; 245 | } 246 | 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"; 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 "\n"; 23 | echo "\n"; 24 | echo "\n"; 25 | 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 "\n"; 106 | echo "\n"; 107 | echo "\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 "\n"; 118 | echo "\n"; 119 | echo "\n"; 120 | echo "\n"; 121 | } 122 | echo "
FileOldNew
$file", formatMetric($fromMetric, $displayStat), "", formatMetricDiff($toMetric, $fromMetric, $displayStat, $stddev), "
\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"; 146 | echo "\n"; 147 | echo "\n"; 149 | echo "\n"; 150 | if ($bench !== 'all') { 151 | echo "\n"; 152 | } 153 | if ($interval !== 1) { 154 | echo "\n"; 155 | } 156 | if ($configs !== DEFAULT_CONFIGS) { 157 | echo "\n"; 158 | } 159 | echo "\n"; 160 | $longTermUrl = makeUrl("graphs.php", [ 161 | "startDate" => "2021-02-04", 162 | "interval" => "100", 163 | "relative" => "on", 164 | ]); 165 | echo "Long term view\n"; 166 | echo "
\n"; 167 | echo "
\n"; 168 | echo "\n"; 169 | echo "\n"; 170 | echo " 175 | \n"; 185 | echo "
\n"; 186 | foreach ($configs as $i => $config) { 187 | echo "\n"; 189 | } 190 | 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 "\n"; 21 | 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"; 48 | echo "\n"; 49 | echo "Compare selected: \n"; 50 | echo "Or click the \"C\" to compare with previous.\n"; 51 | 52 | $remotes = groupByRemote($commitData); 53 | $inactiveRemotes = []; 54 | if ($isFrontPage) { 55 | [$remotes, $inactiveRemotes] = partitionRemotes($remotes); 56 | echo "
\n"; 57 | echo "

Remotes without recent activity:

\n"; 58 | foreach ($inactiveRemotes as $remote) { 59 | $params = ["config" => $config, "stat" => $stat, "remote" => $remote]; 60 | echo "" . h($remote) . "\n"; 61 | } 62 | echo "
\n"; 63 | } 64 | 65 | foreach ($remotes as $remote => $branchCommits) { 66 | if ($filterRemote !== null && $filterRemote !== $remote) { 67 | continue; 68 | } 69 | 70 | if ($filterBranch === null) { 71 | echo "
\n"; 72 | echo "

Remote " . h($remote) . ":

\n"; 73 | $params = ["config" => $config, "stat" => $stat, "remote" => $remote]; 74 | if ($isFrontPage) { 75 | echo "Showing recent experiments. "; 76 | $url = makeUrl("", $params); 77 | echo "Show all\n"; 78 | } else { 79 | if ($sortBy == 'date') { 80 | $url = makeUrl("", $params + ["sortBy" => "name"]); 81 | echo "Sort by name\n"; 82 | } else { 83 | $url = makeUrl("", $params + ["sortBy" => "date"]); 84 | echo "Sort by date\n"; 85 | } 86 | } 87 | echo "
\n"; 88 | } 89 | 90 | if ($sortBy === 'date') { 91 | $branchCommits = sortBranchesByDate($branchCommits); 92 | } 93 | foreach ($branchCommits as $branch => $commits) { 94 | if ($filterBranch !== null && $filterBranch !== $branch) { 95 | continue; 96 | } 97 | 98 | list($commits, $nextStartHash) = filterCommits($commits, $startHash, $numCommits); 99 | $commits = filterByInterestingness($commits, $config, $stat, $stddevs, $minInterestingness); 100 | 101 | $benches = $config === 'Overview' 102 | ? [...DEFAULT_CONFIGS, 'stage2-clang'] : BENCHES_GEOMEAN_LAST; 103 | $titles = ['', '', 'Commit', ...$benches]; 104 | $rows = []; 105 | $lastMetrics = null; 106 | $lastHash = null; 107 | $lastConfigNum = null; 108 | foreach ($commits as $commit) { 109 | if ($commit === null) { 110 | $rows[] = ['', '', '...']; 111 | continue; 112 | } 113 | $hash = $commit['hash']; 114 | $summary = getSummaryForHash($hash); 115 | $metrics = null; 116 | if ($summary !== null) { 117 | if ($config === 'Overview') { 118 | $metrics = $summary->getGeomeanStats($stat); 119 | $metrics['stage2-clang'] = $summary->stage2Stats[$stat] ?? null; 120 | } else { 121 | $metrics = $summary->getConfigStat($config, $stat); 122 | } 123 | } 124 | $row = []; 125 | if ($metrics && $lastHash) { 126 | $row[] = "C"; 127 | } else { 128 | $row[] = ''; 129 | } 130 | if ($metrics) { 131 | $row[] = ""; 132 | } else { 133 | $row[] = ''; 134 | } 135 | $row[] = formatCommit($commit); 136 | 137 | if ($metrics) { 138 | foreach ($benches as $bench) { 139 | $value = $metrics[$bench] ?? null; 140 | $stddev = null; 141 | if ($lastConfigNum === $summary->configNum) { 142 | if ($config === 'Overview') { 143 | if ($bench === 'stage2-clang') { 144 | $stddev = $stddevs->getBenchStdDev( 145 | $summary->configNum, 'build', $bench, $stat); 146 | } else { 147 | $stddev = $stddevs->getBenchStdDev( 148 | $summary->configNum, $bench, 'geomean', $stat); 149 | } 150 | } else { 151 | $stddev = $stddevs->getBenchStdDev( 152 | $summary->configNum, $config, $bench, $stat); 153 | } 154 | } 155 | $prevValue = $lastMetrics[$bench] ?? null; 156 | $row[] = formatMetricDiff($value, $prevValue, $stat, $stddev); 157 | } 158 | $lastMetrics = $metrics; 159 | $lastHash = $hash; 160 | $lastConfigNum = $summary->configNum; 161 | } else if (hasBuildError($hash)) { 162 | $url = makeUrl("show_error.php", ["commit" => $hash]); 163 | $row[] = "Failed to build llvm-project or llvm-test-suite" 164 | . " (Log)"; 165 | } 166 | $rows[] = $row; 167 | } 168 | 169 | echo "

", h($branch), ":

\n"; 170 | echo "\n"; 171 | echo "\n"; 172 | foreach ($titles as $title) { 173 | echo "\n"; 174 | } 175 | echo "\n"; 176 | foreach (array_reverse($rows) as $row) { 177 | echo "\n"; 178 | $colSpan = 1; 179 | if (count($row) < count($titles)) { 180 | $colSpan = count($titles) - count($row) + 1; 181 | } 182 | foreach ($row as $i => $value) { 183 | if ($colSpan > 1 && $i == count($row) - 1) { 184 | echo "\n"; 185 | } else { 186 | echo "\n"; 187 | } 188 | } 189 | echo "\n"; 190 | } 191 | echo "
$title
$value$value
\n"; 192 | 193 | if ($nextStartHash) { 194 | $params = [ 195 | "config" => $config, 196 | "stat" => $stat, 197 | "branch" => $branch, 198 | "startHash" => $nextStartHash, 199 | ]; 200 | if ($numCommits != $defaultNumCommits) { 201 | $params['numCommits'] = $numCommits; 202 | } 203 | if ($minInterestingness > 0.0) { 204 | $params['minInterestingness'] = $minInterestingness; 205 | } 206 | $url = makeUrl("", $params + ["startHash" => $nextStartHash]); 207 | echo "
Show next " . h($numCommits) ." commits"; 208 | } 209 | } 210 | } 211 | 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 | 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"; 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 | --------------------------------------------------------------------------------