diff --git a/examples/process_plot_taskthreadpools b/examples/process_plot_taskthreadpools new file mode 100755 index 0000000000000000000000000000000000000000..2e8e4194c91303a3117216ab593e1033c489301c --- /dev/null +++ b/examples/process_plot_taskthreadpools @@ -0,0 +1,108 @@ +#!/bin/bash +# +# Usage: +# process_plot_taskthreadpools nprocess time-range-ms +# +# Description: +# Process all the tasks thread and threadpool info in the current directory +# creating graphs for steps and threads. +# +# The input files are created by a run using the "-y interval" and +# "-Y interval" flags, with the same interval. The output files +# from these stages will be named "thread_info-step<n>.dat" +# and "threadpool_info-step<n>.dat" in the current directory. +# All located files will be processed using "nprocess" concurrent +# processes and all plots will have the given time range. An output +# HTML file "threadtaskpools.html" will be created to view all the plots. +# +# This file is part of SWIFT: +# +# Copyright (C) 2017 Peter W. Draper (p.w.draper@durham.ac.uk) +# All Rights Reserved. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Handle command-line +if test "$2" == ""; then + echo "Usage: $0 nprocess time-range-ms" + exit 1 +fi +NPROCS=$1 +TIMERANGE=$2 + +# Locate script. +SCRIPTHOME=$(dirname "$0") + +# Find all thread info files. Use version sort to get into correct order. +taskfiles=$(ls -v thread_info-step*.dat) +if test $? != 0; then + echo "Failed to find any thread info files" + exit 1 +fi + +# Construct the expected names of the threadpool files and merge. +list="" +for f in $taskfiles; do + s=$(echo $f| sed 's,thread_info-step\(.*\).dat,\1,') + p="threadpool_info-step${s}.dat" + if ! test -f "$p"; then + exit "Cannot find threadpool file: $p, that matches $f" + fi + list="$list $f $p $s" +done + +echo "Processing thread info files..." +echo $list | xargs -P $NPROCS -n 3 /bin/bash -c "${SCRIPTHOME}/process_plot_taskthreadpools_helper $TIMERANGE \$0 \$1 \$2 " + +output="taskpool.html" +echo "Writing output $output file" +# Construct document - serial. +cat <<EOF > $output + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> + <head> + <title>SWIFT task and threadpool graphs</title> + </head> + <body> + <h1>SWIFT task and threadpool graphs</h1> +EOF + +echo $list | xargs -n 3 | while read f p s; do + cat <<EOF >> $output +<h2>Step $s</h2> +EOF + cat <<EOF >> $output +<a href="taskpoolstep${s}r${i}.html"><img src="taskstep${s}r${i}.png" width=400px/></a> +<a href="taskpoolstep${s}r${i}.html"><img src="poolstep${s}r${i}.png" width=400px/></a> +EOF + cat <<EOF > taskpoolstep${s}r${i}.html + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> +<html> +<body> +<img src="taskstep${s}r${i}.png"> +<img src="poolstep${s}r${i}.png"> +</body> +</html> +EOF + +done + +cat <<EOF >> $output + </body> +</html> +EOF + +echo "Finished" + +exit diff --git a/examples/process_plot_taskthreadpools_helper b/examples/process_plot_taskthreadpools_helper new file mode 100755 index 0000000000000000000000000000000000000000..1dfd802a4fa23b0f468f8c97bd053278dd33a78a --- /dev/null +++ b/examples/process_plot_taskthreadpools_helper @@ -0,0 +1,20 @@ +#!/bin/bash + +# Helper for process_plot_taskthreadpools +range="$1" +taskfile="$2" +poolfile="$3" +step="$4" + +# Locate script. +SCRIPTHOME=$(dirname "$0") + +# Process threadpool and capture minimum tic. +result=$(${SCRIPTHOME}/plot_threadpool.py --expand 1 --limit $range \ + --width 16 --height 4 $poolfile poolstep${step}r) +echo "$result" +mintic=$(echo "$result" | grep 'Min tic'|awk '{print $5}') + +${SCRIPTHOME}/plot_tasks.py --mintic $mintic --expand 1 --limit $range \ + --width 16 --height 4 $taskfile taskstep${step}r +exit