usage() {
cat >&2 <<EOF
-Usage: $0 [-c] <parameters file>
+Usage: $0 [OPTION] <parameters file>
Options:
-h print this help
-n dry-run mode (for debugging)
-c (continue) do not overwrite previous results
+ -z compress output files with gzip
EOF
exit $1
}
# read args
overwrite=1
debug=0
-while getopts "chn" c; do
+compress=0
+while getopts "chnz" c; do
case "$c" in
'c') overwrite=0 ;;
'h') usage 0 ;;
'n') debug=1 ;;
+ 'z') compress=1 ;;
'?') usage 1 ;;
esac
done
log "Running: $0 $@"
log "Hostname: $(hostname -f)"
-declare -a TOPOLOGIES ALGORITHMS PLATFORMS COMMON_OPTS
+declare -a TOPOLOGIES ALGORITHMS PLATFORMS VARIANTS COMMON_OPTS MORE_ARGS
# read parameters
log "Reading parameters from \"$1\"."
variable_check DEADLINE
# default values
-: ${RESULTS:=$PWD/results}
-: ${LOBA:=$PWD/loba}
+test -n "$VARIANTS" || VARIANTS=( "plain" "bookkeeping" )
+test -n "$RESULTS" || RESULTS="$PWD/results"
+test -n "$LOBA" || LOBA="$PWD/loba"
COMMON_OPTS=(
- --cfg=contexts/factory:raw
+ "${MORE_ARGS[@]}"
)
+test -f "$LOBA" && test -x "$LOBA" || die "command not found: \"$LOBA\""
+for plat in "${PLATFORMS[@]}"; do
+ test -f "$plat" && test -r "$plat" || die "file not found: \"$plat\""
+done
+
log "Results put in: \"$RESULTS\"."
[ $debug = 1 ] && log "Running in dry-run mode"
echo "$*" | sed 's,[^ ]*/,,g;s/\.xml//;y/ /_/'
}
+summary() {
+ gzip -cdf "$@" \
+ | sed -n '\!^\[main/INFO\] ,----\[ Results \]!,${
+ /send\|recv\|wall clock\|Simulation succeeded/d;p;
+ }'
+}
+
+if [ $compress = 1 ]; then
+ outsuffix=".gz"
+else
+ outsuffix=""
+fi
+
for plat in "${PLATFORMS[@]}"; do
tmp=$(basename "$plat" ".xml")
plat_output="$RESULTS/plat_$tmp"
for topo in "${TOPOLOGIES[@]}"; do
topo_output="$plat_output/topo_$topo"
+ [ $debug = 0 ] && mkdir -p "$topo_output"
for algo in "${ALGORITHMS[@]}"; do
algo_output="$topo_output/algo_$algo"
- [ $debug = 0 ] && mkdir -p "$algo_output"
args=(
-T"$topo"
-a"$algo"
-t"$DEADLINE"
"$plat"
)
- for bk in "" "-b"; do
- tmp=$(outfile "loba" $bk "${args[@]}")
- out="$algo_output/$tmp.out"
- cmd=( "$LOBA" "${COMMON_OPTS[@]}" $bk "${args[@]}" )
- log "Run: ${cmd[@]}"$'\n'"... &> $out"
- if [ $overwrite = 0 -a -e "$out" ]; then
+ for variant in "${VARIANTS[@]}"; do
+ cmd=( "$LOBA" "${COMMON_OPTS[@]}" )
+ case "$variant" in
+ "plain") : ;;
+ "bookkeeping") cmd+=( "-b" ) ;;
+ *) die "unknown variant: \"$variant\"" ;;
+ esac
+ out="${algo_output}_${variant}.out"
+ outf="$out$outsuffix"
+ cmd+=( "${args[@]}" )
+ log "Run: ${cmd[@]}"$'\n'"... &> $outf"
+ if [ $overwrite = 0 -a -e "$outf" ]; then
log "already run !"
- tail -n4 "$out"
+ summary "$outf"
continue
fi
if [ $debug = 1 ]; then
log "skipped (dry-run)"
+ continue
+ fi
+ rm -f "$outf";
+ echo "# ${cmd[@]}" > "$out"
+ if "${cmd[@]}" >> "$out" 2>&1; then
+ summary "$out"
else
- echo "# ${cmd[@]}" > "$out"
- out2="/tmp/tmp_loba.o"
- "${cmd[@]}" > "$out2" 2>&1
- tail -17 "$out2" >> "$out"
- tail -n4 "$out"
+ grep -v '/INFO\]' "$out"
+ fi
+ if [ $compress = 1 ]; then
+ log "Compress output file."
+ gzip --best "$out"
fi
done
done