From f2d85cc697671cba0b5ab313a8dc2234f42fd605 Mon Sep 17 00:00:00 2001 From: Jason Nochlin Date: Sat, 6 Jan 2024 12:31:26 -0700 Subject: [PATCH 01/12] create new version of evaluate.sh using hyperfine + jq --- evaluate2.sh | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100755 evaluate2.sh diff --git a/evaluate2.sh b/evaluate2.sh new file mode 100755 index 000000000..4e4d0d78e --- /dev/null +++ b/evaluate2.sh @@ -0,0 +1,68 @@ +#!/bin/bash +# +# Copyright 2023 The original authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +if [ -z "$1" ] + then + echo "Usage: evaluate2.sh ( ...)" + exit 1 +fi + +function check_command_installed { + if ! [ -x "$(command -v $1)" ]; then + echo "Error: $1 is not installed." >&2 + exit 1 + fi +} +check_command_installed java +check_command_installed mvn +check_command_installed hyperfine +check_command_installed jq + +set -o xtrace + +java --version + +mvn --quiet clean verify + +rm -f measurements.txt +ln -s measurements_1B.txt measurements.txt + +set +o xtrace + +echo "" +TEMP_FILE=$(mktemp) +HYPERFINE_OPTS="--warmup 1 --runs 5 --export-json $TEMP_FILE" +# For debugging: +# HYPERFINE_OPTS="$HYPERFINE_OPTS --show-output" + +# Prepare commands for running benchmarks for each of the forks +forks=() +for fork in "$@"; do + forks+=("./calculate_average_$fork.sh 2>&1") +done + +# Use hyperfine to run the benchmarks for each fork +hyperfine $HYPERFINE_OPTS "${forks[@]}" + +# The slowest and the fastest runs are discarded +# The mean value of the remaining three runs is the result for that contender +echo "" +echo "command,trimmed_mean" +jq -r '.results[] | [ .command, ((.times | sort) | .[1:-1] | add / length) ] | join(",")' $TEMP_FILE \ + | perl -pe 's/^[.]\/calculate_average_(\w+).*,/$1,/' + +rm $TEMP_FILE From 869178205e537cfec49af6cff21b112259d82d0c Mon Sep 17 00:00:00 2001 From: Jason Nochlin Date: Sat, 6 Jan 2024 12:52:26 -0700 Subject: [PATCH 02/12] output the raw times for each command --- evaluate2.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/evaluate2.sh b/evaluate2.sh index 4e4d0d78e..f36874eb0 100755 --- a/evaluate2.sh +++ b/evaluate2.sh @@ -65,4 +65,10 @@ echo "command,trimmed_mean" jq -r '.results[] | [ .command, ((.times | sort) | .[1:-1] | add / length) ] | join(",")' $TEMP_FILE \ | perl -pe 's/^[.]\/calculate_average_(\w+).*,/$1,/' +# Output the raw times for each command +echo "" +echo "command,raw_times" +jq -r '.results[] | [.command, (.times | join(","))] | join(",")' $TEMP_FILE \ + | perl -pe 's/^[.]\/calculate_average_(\w+).*?,/$1,/' + rm $TEMP_FILE From facf3c1791060ddd5e8e37bb0277fca2e1eb184e Mon Sep 17 00:00:00 2001 From: Jason Nochlin Date: Sat, 6 Jan 2024 12:55:23 -0700 Subject: [PATCH 03/12] nit: s/command/fork/ --- evaluate2.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/evaluate2.sh b/evaluate2.sh index f36874eb0..a5e053e06 100755 --- a/evaluate2.sh +++ b/evaluate2.sh @@ -61,13 +61,13 @@ hyperfine $HYPERFINE_OPTS "${forks[@]}" # The slowest and the fastest runs are discarded # The mean value of the remaining three runs is the result for that contender echo "" -echo "command,trimmed_mean" +echo "fork,trimmed_mean" jq -r '.results[] | [ .command, ((.times | sort) | .[1:-1] | add / length) ] | join(",")' $TEMP_FILE \ | perl -pe 's/^[.]\/calculate_average_(\w+).*,/$1,/' # Output the raw times for each command echo "" -echo "command,raw_times" +echo "fork,raw_times" jq -r '.results[] | [.command, (.times | join(","))] | join(",")' $TEMP_FILE \ | perl -pe 's/^[.]\/calculate_average_(\w+).*?,/$1,/' From 15acae6d149d85202586ff88930ee66589e5e77e Mon Sep 17 00:00:00 2001 From: Jason Nochlin Date: Mon, 8 Jan 2024 16:44:26 -0700 Subject: [PATCH 04/12] update evaluate2.sh for new fork file structure --- evaluate2.sh | 69 +++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 50 insertions(+), 19 deletions(-) diff --git a/evaluate2.sh b/evaluate2.sh index a5e053e06..7bb8d9e62 100755 --- a/evaluate2.sh +++ b/evaluate2.sh @@ -18,6 +18,8 @@ if [ -z "$1" ] then echo "Usage: evaluate2.sh ( ...)" + echo " for each fork, there must be a 'prepare_.sh' script and a 'calculate_average_.sh' script" + echo " there may be an 'additional_build_steps_.sh' script too" exit 1 fi @@ -27,6 +29,7 @@ function check_command_installed { exit 1 fi } + check_command_installed java check_command_installed mvn check_command_installed hyperfine @@ -44,31 +47,59 @@ ln -s measurements_1B.txt measurements.txt set +o xtrace echo "" -TEMP_FILE=$(mktemp) -HYPERFINE_OPTS="--warmup 1 --runs 5 --export-json $TEMP_FILE" -# For debugging: -# HYPERFINE_OPTS="$HYPERFINE_OPTS --show-output" # Prepare commands for running benchmarks for each of the forks +filetimestamp=$(date +"%Y%m%d%H%M%S") # same for all fork.out files from this run forks=() for fork in "$@"; do - forks+=("./calculate_average_$fork.sh 2>&1") + # Use prepare script to invoke SDKMAN + if [ ! -f "./prepare_$fork.sh" ]; then + echo "Error: prepare script for $fork not found, expecting file ./prepare_$fork.sh" + exit 1 + fi + source "./prepare_$fork.sh" + + # Optional additional build steps + if [ -f "./additional_build_steps_$fork.sh" ]; then + ./additional_build_steps_$fork.sh + fi + + # Use hyperfine to run the benchmarks for each fork + HYPERFINE_OPTS="--warmup 1 --runs 5 --export-json $fork-$filetimestamp.out" + # For debugging: + # HYPERFINE_OPTS="$HYPERFINE_OPTS --show-output" + hyperfine $HYPERFINE_OPTS "./calculate_average_$fork.sh 2>&1" done -# Use hyperfine to run the benchmarks for each fork -hyperfine $HYPERFINE_OPTS "${forks[@]}" +# Print the 'Summary' in bold and white +BOLD_WHITE='\033[1;37m' +CYAN='\033[0;36m' +GREEN='\033[0;32m' +PURPLE='\033[0;35m' +RESET='\033[0m' # No Color -# The slowest and the fastest runs are discarded -# The mean value of the remaining three runs is the result for that contender -echo "" -echo "fork,trimmed_mean" -jq -r '.results[] | [ .command, ((.times | sort) | .[1:-1] | add / length) ] | join(",")' $TEMP_FILE \ - | perl -pe 's/^[.]\/calculate_average_(\w+).*,/$1,/' +echo -e "${BOLD_WHITE}Summary${RESET}" -# Output the raw times for each command -echo "" -echo "fork,raw_times" -jq -r '.results[] | [.command, (.times | join(","))] | join(",")' $TEMP_FILE \ - | perl -pe 's/^[.]\/calculate_average_(\w+).*?,/$1,/' +forks=() +for fork in "$@"; do + # Trimmed mean = The slowest and the fastest runs are discarded, the + # mean value of the remaining three runs is the result for that contender + trimmed_mean=$(jq -r '.results[0].times | .[1:-1] | add / length' $fork-$filetimestamp.out) + raw_times=$(jq -r '.results[0].times | join(",")' $fork-$filetimestamp.out) + + if [ "$fork" == "$1" ]; then + color=$CYAN + elif [ "$fork" == "$2" ]; then + color=$GREEN + else + color=$PURPLE + fi + + echo -e " ${color}$fork${RESET}: trimmed mean ${BOLD_WHITE}$trimmed_mean${RESET}, raw times ${BOLD_WHITE}$raw_times${RESET}" +done -rm $TEMP_FILE +echo "" +echo "Raw results saved to file(s):" +for fork in "$@"; do + echo " $fork-$filetimestamp.out" +done From 5d6d3472bf02501b08c98dd2014e5e4db9b20d74 Mon Sep 17 00:00:00 2001 From: Jason Nochlin Date: Tue, 9 Jan 2024 09:12:06 -0700 Subject: [PATCH 05/12] review changes --- evaluate2.sh | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/evaluate2.sh b/evaluate2.sh index 7bb8d9e62..43935bcef 100755 --- a/evaluate2.sh +++ b/evaluate2.sh @@ -15,6 +15,8 @@ # limitations under the License. # +set -eo pipefail + if [ -z "$1" ] then echo "Usage: evaluate2.sh ( ...)" @@ -31,7 +33,6 @@ function check_command_installed { } check_command_installed java -check_command_installed mvn check_command_installed hyperfine check_command_installed jq @@ -39,7 +40,7 @@ set -o xtrace java --version -mvn --quiet clean verify +./mvnw --quiet clean verify rm -f measurements.txt ln -s measurements_1B.txt measurements.txt @@ -53,19 +54,19 @@ filetimestamp=$(date +"%Y%m%d%H%M%S") # same for all fork.out files from this r forks=() for fork in "$@"; do # Use prepare script to invoke SDKMAN - if [ ! -f "./prepare_$fork.sh" ]; then - echo "Error: prepare script for $fork not found, expecting file ./prepare_$fork.sh" - exit 1 + if [ -f "./prepare_$fork.sh" ]; then + echo "+ source ./prepare_$fork.sh" + source "./prepare_$fork.sh" fi - source "./prepare_$fork.sh" # Optional additional build steps if [ -f "./additional_build_steps_$fork.sh" ]; then + echo "+ ./additional_build_steps_$fork.sh" ./additional_build_steps_$fork.sh fi # Use hyperfine to run the benchmarks for each fork - HYPERFINE_OPTS="--warmup 1 --runs 5 --export-json $fork-$filetimestamp.out" + HYPERFINE_OPTS="--warmup 0 --runs 5 --export-json $fork-$filetimestamp.out" # For debugging: # HYPERFINE_OPTS="$HYPERFINE_OPTS --show-output" hyperfine $HYPERFINE_OPTS "./calculate_average_$fork.sh 2>&1" From 1582b3e79ae1f98b71d919fd20488d83dca4107e Mon Sep 17 00:00:00 2001 From: Jason Nochlin Date: Tue, 9 Jan 2024 09:24:34 -0700 Subject: [PATCH 06/12] use numactl on linux --- evaluate2.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/evaluate2.sh b/evaluate2.sh index 43935bcef..72aaab91c 100755 --- a/evaluate2.sh +++ b/evaluate2.sh @@ -69,7 +69,17 @@ for fork in "$@"; do HYPERFINE_OPTS="--warmup 0 --runs 5 --export-json $fork-$filetimestamp.out" # For debugging: # HYPERFINE_OPTS="$HYPERFINE_OPTS --show-output" - hyperfine $HYPERFINE_OPTS "./calculate_average_$fork.sh 2>&1" + + # check if this script is running on a Linux box + if [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then + check_command_installed numactl + + # Linux platform + # prepend this with numactl --physcpubind=0-7 for running it only with 8 cores + numactl --physcpubind=0-7 hyperfine $HYPERFINE_OPTS "./calculate_average_$fork.sh 2>&1" + else + hyperfine $HYPERFINE_OPTS "./calculate_average_$fork.sh 2>&1" + fi done # Print the 'Summary' in bold and white From 8543b7a814a79d78d8705eecf66870f3e0e53f24 Mon Sep 17 00:00:00 2001 From: Jason Nochlin Date: Tue, 9 Jan 2024 09:24:44 -0700 Subject: [PATCH 07/12] 1 warmup --- evaluate2.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evaluate2.sh b/evaluate2.sh index 72aaab91c..b4e1a4c97 100755 --- a/evaluate2.sh +++ b/evaluate2.sh @@ -66,7 +66,7 @@ for fork in "$@"; do fi # Use hyperfine to run the benchmarks for each fork - HYPERFINE_OPTS="--warmup 0 --runs 5 --export-json $fork-$filetimestamp.out" + HYPERFINE_OPTS="--warmup 1 --runs 5 --export-json $fork-$filetimestamp.out" # For debugging: # HYPERFINE_OPTS="$HYPERFINE_OPTS --show-output" From d647b4163c7686210d0d54250f23339416e0f6ce Mon Sep 17 00:00:00 2001 From: Jason Nochlin Date: Tue, 9 Jan 2024 10:24:14 -0700 Subject: [PATCH 08/12] verify output --- evaluate2.sh | 62 ++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 46 insertions(+), 16 deletions(-) diff --git a/evaluate2.sh b/evaluate2.sh index b4e1a4c97..1397c6fd4 100755 --- a/evaluate2.sh +++ b/evaluate2.sh @@ -49,9 +49,25 @@ set +o xtrace echo "" +BOLD_WHITE='\033[1;37m' +CYAN='\033[0;36m' +GREEN='\033[0;32m' +PURPLE='\033[0;35m' +BOLD_RED='\033[1;31m' +RED='\033[0;31m' +RESET='\033[0m' # No Color + +# check if out_expected.txt exists +if [ ! -f "out_expected.txt" ]; then + echo "Error: out_expected.txt does not exist." >&2 + echo "Please create it with:" + echo " ./calculate_average_baseline.sh > out_expected.txt" + exit 1 +fi + # Prepare commands for running benchmarks for each of the forks filetimestamp=$(date +"%Y%m%d%H%M%S") # same for all fork.out files from this run -forks=() +failed=() for fork in "$@"; do # Use prepare script to invoke SDKMAN if [ -f "./prepare_$fork.sh" ]; then @@ -66,12 +82,10 @@ for fork in "$@"; do fi # Use hyperfine to run the benchmarks for each fork - HYPERFINE_OPTS="--warmup 1 --runs 5 --export-json $fork-$filetimestamp.out" - # For debugging: - # HYPERFINE_OPTS="$HYPERFINE_OPTS --show-output" + HYPERFINE_OPTS="--warmup 1 --runs 5 --export-json $fork-$filetimestamp-timing.json --output ./$fork-$filetimestamp.out" # check if this script is running on a Linux box - if [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then + if [ "$(uname -s)" == "Linux" ]; then check_command_installed numactl # Linux platform @@ -80,23 +94,34 @@ for fork in "$@"; do else hyperfine $HYPERFINE_OPTS "./calculate_average_$fork.sh 2>&1" fi -done -# Print the 'Summary' in bold and white -BOLD_WHITE='\033[1;37m' -CYAN='\033[0;36m' -GREEN='\033[0;32m' -PURPLE='\033[0;35m' -RESET='\033[0m' # No Color + # Verify output + set +e + diff <(grep Hamburg $fork-$filetimestamp.out) <(grep Hamburg out_expected.txt) > /dev/null + if [ $? -ne 0 ]; then + echo "" + echo -e "${BOLD_RED}FAILURE${RESET}: output of ${BOLD_WHITE}$fork-$filetimestamp.out${RESET} does not match ${BOLD_WHITE}out_expected.txt${RESET}" + echo "" -echo -e "${BOLD_WHITE}Summary${RESET}" + # add $fork to $failed array + failed+=("$fork") + fi + set -e +done -forks=() +# Summary +echo -e "${BOLD_WHITE}Summary${RESET}" for fork in "$@"; do + # skip reporting results for failed forks + if [[ " ${failed[@]} " =~ " ${fork} " ]]; then + echo -e " ${RED}$fork${RESET}: output did not match" + continue + fi + # Trimmed mean = The slowest and the fastest runs are discarded, the # mean value of the remaining three runs is the result for that contender - trimmed_mean=$(jq -r '.results[0].times | .[1:-1] | add / length' $fork-$filetimestamp.out) - raw_times=$(jq -r '.results[0].times | join(",")' $fork-$filetimestamp.out) + trimmed_mean=$(jq -r '.results[0].times | .[1:-1] | add / length' $fork-$filetimestamp-timing.json) + raw_times=$(jq -r '.results[0].times | join(",")' $fork-$filetimestamp-timing.json) if [ "$fork" == "$1" ]; then color=$CYAN @@ -110,6 +135,11 @@ for fork in "$@"; do done echo "" + +# Apped $fork-$filetimestamp-timing.json to $fork-$filetimestamp.out +cat $fork-$filetimestamp-timing.json >> $fork-$filetimestamp.out +rm $fork-$filetimestamp-timing.json + echo "Raw results saved to file(s):" for fork in "$@"; do echo " $fork-$filetimestamp.out" From 1170ae2f0a7537d0b3ebe6af357af1d338097203 Mon Sep 17 00:00:00 2001 From: Jason Nochlin Date: Tue, 9 Jan 2024 10:51:35 -0700 Subject: [PATCH 09/12] leaderboard --- evaluate2.sh | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/evaluate2.sh b/evaluate2.sh index 1397c6fd4..8fcb58efb 100755 --- a/evaluate2.sh +++ b/evaluate2.sh @@ -133,7 +133,38 @@ for fork in "$@"; do echo -e " ${color}$fork${RESET}: trimmed mean ${BOLD_WHITE}$trimmed_mean${RESET}, raw times ${BOLD_WHITE}$raw_times${RESET}" done +echo "" + +# Leaderboard +echo -e "${BOLD_WHITE}Leaderboard${RESET}" +for fork in "$@"; do + # skip reporting results for failed forks + if [[ " ${failed[@]} " =~ " ${fork} " ]]; then + continue + fi + trimmed_mean=$(jq -r '.results[0].times | .[1:-1] | add / length' $fork-$filetimestamp-timing.json) + + # Read java version from prepare_$fork.sh if it exists + java_version="unknown" + if [ -f "./prepare_$fork.sh" ]; then + java_version=$(grep "sdk use java" ./prepare_$fork.sh | cut -d' ' -f4) + fi + + # trimmed_mean is in seconds + # Format trimmed_mean as MM::SS.mmm + # using bc + trimmed_mean_minutes=$(echo "$trimmed_mean / 60" | bc) + trimmed_mean_seconds=$(echo "$trimmed_mean % 60 / 1" | bc) + trimmed_mean_ms=$(echo "($trimmed_mean - $trimmed_mean_minutes * 60 - $trimmed_mean_seconds) * 1000 / 1" | bc) + trimmed_mean_formatted=$(printf "%02d:%02d.%03d" $trimmed_mean_minutes $trimmed_mean_seconds $trimmed_mean_ms) + + # var result = String.format("%02d:%02d.%.0f", mean.toMinutesPart(), mean.toSecondsPart(), (double) mean.toNanosPart() / 1_000_000); + # var author = actualFile.replace(".out", "") + # System.out.println(String.format("\n| | %s| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_%s.java)| 21.0.1-open | [%s](https://github.com/%s)|", result, author, author, author)); + + echo "| | $trimmed_mean_formatted| [link](https://github.com/gunnarmorling/1brc/blob/main/src/main/java/dev/morling/onebrc/CalculateAverage_$fork.java)| $java_version | [$fork](https://github.com/$fork)|" +done echo "" # Apped $fork-$filetimestamp-timing.json to $fork-$filetimestamp.out From e06b5a37b5cd941dee1c0fa7eb367395e5640ab2 Mon Sep 17 00:00:00 2001 From: Jason Nochlin Date: Tue, 9 Jan 2024 11:09:46 -0700 Subject: [PATCH 10/12] do not early exit on hyperfine error --- evaluate2.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/evaluate2.sh b/evaluate2.sh index 8fcb58efb..8c157a08b 100755 --- a/evaluate2.sh +++ b/evaluate2.sh @@ -84,6 +84,8 @@ for fork in "$@"; do # Use hyperfine to run the benchmarks for each fork HYPERFINE_OPTS="--warmup 1 --runs 5 --export-json $fork-$filetimestamp-timing.json --output ./$fork-$filetimestamp.out" + set +e # we don't want hyperfine or diff failing on 1 fork to exit the script early + # check if this script is running on a Linux box if [ "$(uname -s)" == "Linux" ]; then check_command_installed numactl @@ -96,7 +98,6 @@ for fork in "$@"; do fi # Verify output - set +e diff <(grep Hamburg $fork-$filetimestamp.out) <(grep Hamburg out_expected.txt) > /dev/null if [ $? -ne 0 ]; then echo "" From ad43a5da75fbf8159c6e1a8a32417af516677357 Mon Sep 17 00:00:00 2001 From: Jason Nochlin Date: Tue, 9 Jan 2024 11:16:13 -0700 Subject: [PATCH 11/12] check if SMT and turbo boost are disabled --- evaluate2.sh | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/evaluate2.sh b/evaluate2.sh index 8c157a08b..63139f902 100755 --- a/evaluate2.sh +++ b/evaluate2.sh @@ -25,6 +25,15 @@ if [ -z "$1" ] exit 1 fi +BOLD_WHITE='\033[1;37m' +CYAN='\033[0;36m' +GREEN='\033[0;32m' +PURPLE='\033[0;35m' +BOLD_RED='\033[1;31m' +RED='\033[0;31m' +BOLD_YELLOW='\033[1;33m' +RESET='\033[0m' # No Color + function check_command_installed { if ! [ -x "$(command -v $1)" ]; then echo "Error: $1 is not installed." >&2 @@ -36,6 +45,20 @@ check_command_installed java check_command_installed hyperfine check_command_installed jq +# Check if SMT is enabled (we want it disabled) +if [ -f "/sys/devices/system/cpu/smt/active" ]; then + if [ "$(cat /sys/devices/system/cpu/smt/active)" != "0" ]; then + echo -e "${BOLD_YELLOW}WARNING${RESET} SMT is enabled" + fi +fi + +# Check if Turbo Boost is enabled (we want it disabled) +if [ -f "/sys/devices/system/cpu/cpufreq/boost" ]; then + if [ "$(cat /sys/devices/system/cpu/cpufreq/boost)" != "0" ]; then + echo -e "${BOLD_YELLOW}WARNING${RESET} Turbo Boost is enabled" + fi +fi + set -o xtrace java --version @@ -49,14 +72,6 @@ set +o xtrace echo "" -BOLD_WHITE='\033[1;37m' -CYAN='\033[0;36m' -GREEN='\033[0;32m' -PURPLE='\033[0;35m' -BOLD_RED='\033[1;31m' -RED='\033[0;31m' -RESET='\033[0m' # No Color - # check if out_expected.txt exists if [ ! -f "out_expected.txt" ]; then echo "Error: out_expected.txt does not exist." >&2 From 131b4fee12cca6b7cf14f07600cf1bad42422cce Mon Sep 17 00:00:00 2001 From: Jason Nochlin Date: Tue, 9 Jan 2024 11:21:55 -0700 Subject: [PATCH 12/12] fix bug --- evaluate2.sh | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/evaluate2.sh b/evaluate2.sh index 63139f902..ac5ab8f51 100755 --- a/evaluate2.sh +++ b/evaluate2.sh @@ -183,11 +183,12 @@ for fork in "$@"; do done echo "" -# Apped $fork-$filetimestamp-timing.json to $fork-$filetimestamp.out -cat $fork-$filetimestamp-timing.json >> $fork-$filetimestamp.out -rm $fork-$filetimestamp-timing.json - +# Finalize .out files echo "Raw results saved to file(s):" for fork in "$@"; do + # Append $fork-$filetimestamp-timing.json to $fork-$filetimestamp.out and rm $fork-$filetimestamp-timing.json + cat $fork-$filetimestamp-timing.json >> $fork-$filetimestamp.out + rm $fork-$filetimestamp-timing.json + echo " $fork-$filetimestamp.out" done