From 6be2df982845c6920e269a53ea9cc92966224215 Mon Sep 17 00:00:00 2001 From: Jan Eitzinger Date: Sat, 16 Jan 2021 07:15:07 +0100 Subject: [PATCH] Add system benchmark script. Add GB unit in extract Results --- util/benchmarkSystem.pl | 1486 +++++++++++++++++++++++++++++++++++++++ util/extractResults.pl | 23 +- 2 files changed, 1506 insertions(+), 3 deletions(-) create mode 100755 util/benchmarkSystem.pl diff --git a/util/benchmarkSystem.pl b/util/benchmarkSystem.pl new file mode 100755 index 0000000..741aed1 --- /dev/null +++ b/util/benchmarkSystem.pl @@ -0,0 +1,1486 @@ +#!/usr/bin/env perl +# ======================================================================================= +# +# Author: Jan Eitzinger (je), jan.eitzinger@fau.de +# Copyright (c) 2021 RRZE, University Erlangen-Nuremberg +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +# ======================================================================================= +use strict; +use warnings; +use utf8; + +use Data::Dumper qw(Dumper); + +my ($DIR, $CMD, $PREFIX) = @ARGV; + +if (not defined $DIR) { + die "Usage: $0 \n"; +} + +my %RES; +my %INFO; +my %RESULT; +my %PLOT; +my %DPLOT; + +my @testcases = ('Init', 'Sum', 'Copy', 'Update', 'Triad', 'Daxpy', 'STriad', 'SDaxpy'); + +my $numDomainsPerSocket; +my $numDomainsPerNode; +my $numCoresPerMemoryDomain; +my $coresPerSocket; +my $SMT; + +# Step 0 : Build benchmark +`rm $DIR/raw/*`; +`rm $DIR/*`; +`mkdir $DIR/raw`; +`make distclean`; +`make > $DIR/buildoutput.txt`; + +# Step 1 : Extract system information +`likwid-topology -g > $DIR/topology.txt`; +my $topo = `likwid-topology -O`; + +#my $topo = do { +# local $/ = undef; +# open my $fh, "<", './topo.txt' +# or die "could not open tile: $!"; +# <$fh>; +#}; + +foreach my $ln (split("\n", $topo)) { + if ( $ln =~ /^CPU name:/ ) { + my @fields = split(",", $ln); + $INFO{processor} = $fields[1]; + } + if ( $ln =~ /^CPU type/ ) { + my @fields = split(",", $ln); + $INFO{family} = $fields[1]; + $INFO{family} =~ s/[\(\)]//g; + } + if ( $ln =~ /^Sockets:/ ) { + my @fields = split(",", $ln); + $INFO{numSockets} = $fields[1]; + } + if ( $ln =~ /^Cores per socket:/ ) { + my @fields = split(",", $ln); + $INFO{numCoresPerSocket} = $fields[1]; + } + if ( $ln =~ /^Threads per core:/ ) { + my @fields = split(",", $ln); + $SMT = $fields[1]; + $INFO{numThreadsPerCore} = $SMT; + } + if ( $ln =~ /^NUMA domains:/ ) { + my @fields = split(",", $ln); + $numDomainsPerNode = $fields[1]; + } +} + +$INFO{family} =~ s/[ ]//g; + +my $cinfo = `make info`; +# my $cinfo = do { +# local $/ = undef; +# open my $fh, "<", './toolchain.txt' +# or die "could not open tile: $!"; +# <$fh>; +# }; + +my @tmp = split("\n", $cinfo); +$INFO{flags} = $tmp[0]; +my @tools = split(" ", $tmp[1]); +$INFO{toolchain} = $tools[0]. ' ' . $tools[1]; +$INFO{version} = $tmp[1]; + +$numDomainsPerSocket = $numDomainsPerNode / $INFO{numSockets}; +$numDomainsPerNode = 2 * $numDomainsPerSocket; +$numCoresPerMemoryDomain = $INFO{numCoresPerSocket} / $numDomainsPerSocket; +my $TAG = $PREFIX."-S$INFO{numSockets}-M$numDomainsPerSocket-C$INFO{numCoresPerSocket}"; +$INFO{numDomainsPerSocket} = $numDomainsPerSocket; + +# Step 2 : Execute benchmark + +foreach my $numdomains ( 1 ... $numDomainsPerNode ) { + foreach my $numcores ( 1 ... $numCoresPerMemoryDomain ) { + my $exp = join('@',map("E:M$_:$numcores:1:$SMT", 0 ... $numdomains-1)); + print "node-M$numdomains-$numcores\n"; + `likwid-pin -q -C $exp $CMD > $DIR/raw/node-M$numdomains-$numcores.txt`; + } +} + +# Step 3 : Generate output + +extractResults(); +$RESULT{core} = findMaxResult(1,1); +$RESULT{domain} = findMaxResult(1, $numCoresPerMemoryDomain); +$RESULT{socket} = findMaxResult($numDomainsPerSocket, $numCoresPerMemoryDomain); +$RESULT{node} = findMaxResult($numDomainsPerNode, $numCoresPerMemoryDomain); + + +$RESULT{scaling} = sprintf "#nt"; +foreach my $test ( @testcases ) { +$RESULT{scaling} .= sprintf "\t%s", $test; +$PLOT{$test} = ''; +} +$RESULT{scaling} .= sprintf "\n"; + +foreach my $key (sort {$a <=> $b} keys %{$RES{1}}) { + $RESULT{scaling} .= sprintf "%d", $key; + + foreach my $test ( @testcases ) { + $RESULT{scaling} .= sprintf "\t%.2f", $RES{1}{$key}{$test}; + $PLOT{$test} .= "$key $RES{1}{$key}{$test}\n"; + } + $RESULT{scaling} .= sprintf "\n"; +} + +foreach my $nm ( 1 ... $numDomainsPerNode ) { + my $tag = "s$nm"; + $DPLOT{meta} .=<<"END"; +\@ $tag hidden false +\@ $tag type xy +\@ $tag symbol 1 +\@ $tag symbol size 1.000000 +\@ $tag symbol color $nm +\@ $tag symbol pattern 1 +\@ $tag symbol fill color $nm +\@ $tag symbol fill pattern 1 +\@ $tag symbol linewidth 1.0 +\@ $tag symbol linestyle 1 +\@ $tag symbol char 65 +\@ $tag symbol char font 0 +\@ $tag symbol skip 0 +\@ $tag line type 1 +\@ $tag line linestyle 1 +\@ $tag line linewidth 4.0 +\@ $tag line color $nm +\@ $tag line pattern 1 +\@ $tag baseline type 0 +\@ $tag baseline off +\@ $tag dropline off +\@ $tag fill type 0 +\@ $tag fill rule 0 +\@ $tag fill color 1 +\@ $tag fill pattern 1 +\@ $tag avalue off +\@ $tag avalue type 2 +\@ $tag avalue char size 1.000000 +\@ $tag avalue font 0 +\@ $tag avalue color 1 +\@ $tag avalue rot 0 +\@ $tag avalue format general +\@ $tag avalue prec 3 +\@ $tag avalue prepend "" +\@ $tag avalue append "" +\@ $tag avalue offset 0.000000 , 0.000000 +\@ $tag errorbar on +\@ $tag errorbar place both +\@ $tag errorbar color $nm +\@ $tag errorbar pattern 1 +\@ $tag errorbar size 1.000000 +\@ $tag errorbar linewidth 1.0 +\@ $tag errorbar linestyle 1 +\@ $tag errorbar riser linewidth 1.0 +\@ $tag errorbar riser linestyle 1 +\@ $tag errorbar riser clip off +\@ $tag errorbar riser clip length 0.100000 +\@ $tag legend "$nm" +END + +} + +$RESULT{node} =~ /([0-9.]+)/; +my $ymax = $1 * 1.2; +$DPLOT{world} = "1, 0, $numCoresPerMemoryDomain, $ymax"; + +foreach my $test ( @testcases ) { + my %dplottmp; + $RESULT{'domain'.$test} = sprintf "#nm"; + foreach my $nm ( 1 ... $numDomainsPerNode ) { + $RESULT{'domain'.$test} .= sprintf "\t%d", $nm; + $dplottmp{$nm} = ''; + } + $RESULT{'domain'.$test} .= sprintf "\n"; + foreach my $nt ( 1 ... $numCoresPerMemoryDomain ) { + $RESULT{'domain'.$test} .= sprintf "%d", $nt; + foreach my $nm ( 1 ... $numDomainsPerNode ) { + $RESULT{'domain'.$test} .= sprintf "\t%.2f", $RES{$nm}{$nt}{$test}; + $dplottmp{$nm} .= "$nt $RES{$nm}{$nt}{$test}\n"; + } + $RESULT{'domain'.$test} .= sprintf "\n"; + } + + $DPLOT{series} = ''; + foreach my $nm ( 1 ... $numDomainsPerNode ) { + $DPLOT{series} .= "\@target G0.S$nm\n\@type xy\n"; + $DPLOT{series} .= $dplottmp{$nm}; + $DPLOT{series} .= "&\n"; + } + generateDomainScalingPlot("$DIR/$TAG-domains$test.agr"); +} + +$RESULT{domain} =~ /([0-9]+\.)/; +$ymax = $1 * 1.2; + +$RESULT{scalingPlot} = "figures/$TAG-scaling.png"; +$RESULT{domainInitPlot} = "figures/$TAG-domainsInit.png"; +$RESULT{domainSumPlot} = "figures/$TAG-domainsSum.png"; +$RESULT{domainCopyPlot} = "figures/$TAG-domainsCopy.png"; +$RESULT{domainTriadPlot} = "figures/$TAG-domainsTriad.png"; +$PLOT{world} = "1, 0, $numCoresPerMemoryDomain, $ymax"; + +generateMarkdown("$DIR/$TAG.md"); +generateScalingPlot("$DIR/$TAG-scaling.agr"); + +open(my $fh, '>', "$DIR/max.dat") or die "Could not open file $!"; +$RESULT{core} =~ /([0-9.]+)/; +print $fh "CORE $1\n"; +$RESULT{socket} =~ /([0-9.]+)/; +print $fh "SOCKET $1\n"; +$RESULT{node} =~ /([0-9.]+)/; +print $fh "NODE $1\n"; +close $fh; + +`tar -czf $TAG.tgz $DIR`; + +# Helper routines +sub findMaxResult { +my $maxDomains = shift; +my $maxCores = shift; +my %param; +my $max = 0; + +foreach my $numDomains ( 1 ... $maxDomains ) { + foreach my $numCoresPerDomain ( 1 ... $maxCores ) { + foreach my $testcase (keys %{$RES{$numDomains}{$numCoresPerDomain}}) { + if ( $RES{$numDomains}{$numCoresPerDomain}{$testcase} > $max ){ + $max = sprintf "\t%.2f",$RES{$numDomains}{$numCoresPerDomain}{$testcase}; + $param{testcase} = $testcase; + $param{cores} = $numCoresPerDomain; + } + } + } +} + +if ($maxCores == 1) { +return "$max ($param{testcase})"; +} else { +return "$max ($param{testcase} with $param{cores} cores)"; +} +} + +sub extractResults { + +while( defined( my $file = glob($DIR . '/raw/*' ) ) ) { + + print "Process $file\n"; + my $nt = 1; + my $nm = 1; + + open(my $fh, "<","$file"); + if ($file =~ /.*-M([0-9]+)-([0-9]+)\.txt/) { + $nm = $1; + $nt = $2; + } + # $RES{$nm}{$nt} = {}; + + while ( <$fh> ) { + my $cnt = split(/[ ]+/, $_); + + if ( $cnt == 6 ) { + my @fields = split(/[ ]+/, $_); + + if ( $fields[1] =~ /[0-9]+/ ) { + $fields[0] =~ s/://; + $RES{$nm}{$nt}{$fields[0]} = $fields[1] * 0.001; + } + } + + } + + close $fh or die "can't close file $!"; +} + +} + +sub generateScalingPlot { +my $filename = shift; +open(my $fh, '>', $filename) or die "Could not open file '$filename' $!"; + +print $fh <<"END"; +# Grace project file +# +\@version 50122 +\@page size 792, 612 +\@page scroll 5% +\@page inout 5% +\@link page off +\@map font 0 to "Times-Roman", "Times-Roman" +\@map font 1 to "Times-Italic", "Times-Italic" +\@map font 2 to "Times-Bold", "Times-Bold" +\@map font 3 to "Times-BoldItalic", "Times-BoldItalic" +\@map font 4 to "Helvetica", "Helvetica" +\@map font 5 to "Helvetica-Oblique", "Helvetica-Oblique" +\@map font 6 to "Helvetica-Bold", "Helvetica-Bold" +\@map font 7 to "Helvetica-BoldOblique", "Helvetica-BoldOblique" +\@map font 8 to "Courier", "Courier" +\@map font 9 to "Courier-Oblique", "Courier-Oblique" +\@map font 10 to "Courier-Bold", "Courier-Bold" +\@map font 11 to "Courier-BoldOblique", "Courier-BoldOblique" +\@map font 12 to "Symbol", "Symbol" +\@map font 13 to "ZapfDingbats", "ZapfDingbats" +\@map color 0 to (255, 255, 255), "white" +\@map color 1 to (0, 0, 0), "black" +\@map color 2 to (255, 0, 0), "red" +\@map color 3 to (0, 255, 0), "green" +\@map color 4 to (0, 0, 255), "blue" +\@map color 5 to (255, 255, 0), "yellow" +\@map color 6 to (188, 143, 143), "brown" +\@map color 7 to (220, 220, 220), "grey" +\@map color 8 to (148, 0, 211), "violet" +\@map color 9 to (0, 255, 255), "cyan" +\@map color 10 to (255, 0, 255), "magenta" +\@map color 11 to (255, 165, 0), "orange" +\@map color 12 to (114, 33, 188), "indigo" +\@map color 13 to (103, 7, 72), "maroon" +\@map color 14 to (64, 224, 208), "turquoise" +\@map color 15 to (0, 139, 0), "green4" +\@reference date 0 +\@date wrap off +\@date wrap year 1950 +\@default linewidth 1.0 +\@default linestyle 1 +\@default color 1 +\@default pattern 1 +\@default font 0 +\@default char size 1.000000 +\@default symbol size 1.000000 +\@default sformat "%.8g" +\@background color 0 +\@page background fill on +\@timestamp off +\@timestamp 0.03, 0.03 +\@timestamp color 1 +\@timestamp rot 0 +\@timestamp font 0 +\@timestamp char size 1.000000 +\@timestamp def "Tue Dec 15 13:24:48 2020" +\@r0 off +\@link r0 to g0 +\@r0 type above +\@r0 linestyle 1 +\@r0 linewidth 1.0 +\@r0 color 1 +\@r0 line 0, 0, 0, 0 +\@r1 off +\@link r1 to g0 +\@r1 type above +\@r1 linestyle 1 +\@r1 linewidth 1.0 +\@r1 color 1 +\@r1 line 0, 0, 0, 0 +\@r2 off +\@link r2 to g0 +\@r2 type above +\@r2 linestyle 1 +\@r2 linewidth 1.0 +\@r2 color 1 +\@r2 line 0, 0, 0, 0 +\@r3 off +\@link r3 to g0 +\@r3 type above +\@r3 linestyle 1 +\@r3 linewidth 1.0 +\@r3 color 1 +\@r3 line 0, 0, 0, 0 +\@r4 off +\@link r4 to g0 +\@r4 type above +\@r4 linestyle 1 +\@r4 linewidth 1.0 +\@r4 color 1 +\@r4 line 0, 0, 0, 0 +\@g0 on +\@g0 hidden false +\@g0 type XY +\@g0 stacked false +\@g0 bar hgap 0.000000 +\@g0 fixedpoint off +\@g0 fixedpoint type 0 +\@g0 fixedpoint xy 0.000000, 0.000000 +\@g0 fixedpoint format general general +\@g0 fixedpoint prec 6, 6 +\@with g0 +\@ world $PLOT{world} +\@ stack world 0, 1, 0, 1 +\@ znorm 1 +\@ view 0.150000, 0.150000, 1.150000, 0.850000 +\@ title "" +\@ title font 0 +\@ title size 1.500000 +\@ title color 1 +\@ subtitle "" +\@ subtitle font 0 +\@ subtitle size 1.000000 +\@ subtitle color 1 +\@ xaxes scale Normal +\@ yaxes scale Normal +\@ xaxes invert off +\@ yaxes invert off +\@ xaxis on +\@ xaxis type zero false +\@ xaxis offset 0.000000 , 0.000000 +\@ xaxis bar on +\@ xaxis bar color 1 +\@ xaxis bar linestyle 1 +\@ xaxis bar linewidth 1.0 +\@ xaxis label "number of cores" +\@ xaxis label layout para +\@ xaxis label place auto +\@ xaxis label char size 1.500000 +\@ xaxis label font 0 +\@ xaxis label color 1 +\@ xaxis label place normal +\@ xaxis tick on +\@ xaxis tick major 1 +\@ xaxis tick minor ticks 0 +\@ xaxis tick default 6 +\@ xaxis tick place rounded true +\@ xaxis tick in +\@ xaxis tick major size 1.000000 +\@ xaxis tick major color 1 +\@ xaxis tick major linewidth 1.0 +\@ xaxis tick major linestyle 1 +\@ xaxis tick major grid off +\@ xaxis tick minor color 1 +\@ xaxis tick minor linewidth 1.0 +\@ xaxis tick minor linestyle 1 +\@ xaxis tick minor grid off +\@ xaxis tick minor size 0.500000 +\@ xaxis ticklabel on +\@ xaxis ticklabel format general +\@ xaxis ticklabel prec 5 +\@ xaxis ticklabel formula "" +\@ xaxis ticklabel append "" +\@ xaxis ticklabel prepend "" +\@ xaxis ticklabel angle 0 +\@ xaxis ticklabel skip 0 +\@ xaxis ticklabel stagger 0 +\@ xaxis ticklabel place normal +\@ xaxis ticklabel offset auto +\@ xaxis ticklabel offset 0.000000 , 0.010000 +\@ xaxis ticklabel start type auto +\@ xaxis ticklabel start 0.000000 +\@ xaxis ticklabel stop type auto +\@ xaxis ticklabel stop 0.000000 +\@ xaxis ticklabel char size 1.250000 +\@ xaxis ticklabel font 0 +\@ xaxis ticklabel color 1 +\@ xaxis tick place normal +\@ xaxis tick spec type none +\@ yaxis on +\@ yaxis type zero false +\@ yaxis offset 0.000000 , 0.000000 +\@ yaxis bar on +\@ yaxis bar color 1 +\@ yaxis bar linestyle 1 +\@ yaxis bar linewidth 1.0 +\@ yaxis label "Memory bandwidth [GB/s]" +\@ yaxis label layout para +\@ yaxis label place auto +\@ yaxis label char size 1.500000 +\@ yaxis label font 0 +\@ yaxis label color 1 +\@ yaxis label place normal +\@ yaxis tick on +\@ yaxis tick major 10 +\@ yaxis tick minor ticks 1 +\@ yaxis tick default 6 +\@ yaxis tick place rounded true +\@ yaxis tick in +\@ yaxis tick major size 1.000000 +\@ yaxis tick major color 1 +\@ yaxis tick major linewidth 1.0 +\@ yaxis tick major linestyle 1 +\@ yaxis tick major grid on +\@ yaxis tick minor color 7 +\@ yaxis tick minor linewidth 1.0 +\@ yaxis tick minor linestyle 1 +\@ yaxis tick minor grid on +\@ yaxis tick minor size 0.500000 +\@ yaxis ticklabel on +\@ yaxis ticklabel format general +\@ yaxis ticklabel prec 5 +\@ yaxis ticklabel formula "" +\@ yaxis ticklabel append "" +\@ yaxis ticklabel prepend "" +\@ yaxis ticklabel angle 0 +\@ yaxis ticklabel skip 0 +\@ yaxis ticklabel stagger 0 +\@ yaxis ticklabel place normal +\@ yaxis ticklabel offset auto +\@ yaxis ticklabel offset 0.000000 , 0.010000 +\@ yaxis ticklabel start type auto +\@ yaxis ticklabel start 0.000000 +\@ yaxis ticklabel stop type auto +\@ yaxis ticklabel stop 0.000000 +\@ yaxis ticklabel char size 1.250000 +\@ yaxis ticklabel font 0 +\@ yaxis ticklabel color 1 +\@ yaxis tick place both +\@ yaxis tick spec type none +\@ altxaxis off +\@ altyaxis off +\@ legend on +\@ legend loctype view +\@ legend 0.93, 0.45 +\@ legend box color 1 +\@ legend box pattern 1 +\@ legend box linewidth 1.0 +\@ legend box linestyle 1 +\@ legend box fill color 0 +\@ legend box fill pattern 1 +\@ legend font 0 +\@ legend char size 1.000000 +\@ legend color 1 +\@ legend length 4 +\@ legend vgap 1 +\@ legend hgap 1 +\@ legend invert false +\@ frame type 0 +\@ frame linestyle 1 +\@ frame linewidth 1.0 +\@ frame color 1 +\@ frame pattern 1 +\@ frame background color 0 +\@ frame background pattern 0 +\@ s0 hidden false +\@ s0 type xy +\@ s0 symbol 1 +\@ s0 symbol size 1.000000 +\@ s0 symbol color 1 +\@ s0 symbol pattern 1 +\@ s0 symbol fill color 1 +\@ s0 symbol fill pattern 1 +\@ s0 symbol linewidth 1.0 +\@ s0 symbol linestyle 1 +\@ s0 symbol char 65 +\@ s0 symbol char font 0 +\@ s0 symbol skip 0 +\@ s0 line type 1 +\@ s0 line linestyle 1 +\@ s0 line linewidth 4.0 +\@ s0 line color 1 +\@ s0 line pattern 1 +\@ s0 baseline type 0 +\@ s0 baseline off +\@ s0 dropline off +\@ s0 fill type 0 +\@ s0 fill rule 0 +\@ s0 fill color 1 +\@ s0 fill pattern 1 +\@ s0 avalue off +\@ s0 avalue type 2 +\@ s0 avalue char size 1.000000 +\@ s0 avalue font 0 +\@ s0 avalue color 1 +\@ s0 avalue rot 0 +\@ s0 avalue format general +\@ s0 avalue prec 3 +\@ s0 avalue prepend "" +\@ s0 avalue append "" +\@ s0 avalue offset 0.000000 , 0.000000 +\@ s0 errorbar on +\@ s0 errorbar place both +\@ s0 errorbar color 1 +\@ s0 errorbar pattern 1 +\@ s0 errorbar size 1.000000 +\@ s0 errorbar linewidth 1.0 +\@ s0 errorbar linestyle 1 +\@ s0 errorbar riser linewidth 1.0 +\@ s0 errorbar riser linestyle 1 +\@ s0 errorbar riser clip off +\@ s0 errorbar riser clip length 0.100000 +\@ s0 legend "Init" +\@ s1 hidden false +\@ s1 type xy +\@ s1 symbol 1 +\@ s1 symbol size 1.000000 +\@ s1 symbol color 2 +\@ s1 symbol pattern 1 +\@ s1 symbol fill color 2 +\@ s1 symbol fill pattern 1 +\@ s1 symbol linewidth 1.0 +\@ s1 symbol linestyle 1 +\@ s1 symbol char 65 +\@ s1 symbol char font 0 +\@ s1 symbol skip 0 +\@ s1 line type 1 +\@ s1 line linestyle 1 +\@ s1 line linewidth 4.0 +\@ s1 line color 2 +\@ s1 line pattern 1 +\@ s1 baseline type 0 +\@ s1 baseline off +\@ s1 dropline off +\@ s1 fill type 0 +\@ s1 fill rule 0 +\@ s1 fill color 1 +\@ s1 fill pattern 1 +\@ s1 avalue off +\@ s1 avalue type 2 +\@ s1 avalue char size 1.000000 +\@ s1 avalue font 0 +\@ s1 avalue color 1 +\@ s1 avalue rot 0 +\@ s1 avalue format general +\@ s1 avalue prec 3 +\@ s1 avalue prepend "" +\@ s1 avalue append "" +\@ s1 avalue offset 0.000000 , 0.000000 +\@ s1 errorbar on +\@ s1 errorbar place both +\@ s1 errorbar color 2 +\@ s1 errorbar pattern 1 +\@ s1 errorbar size 1.000000 +\@ s1 errorbar linewidth 1.0 +\@ s1 errorbar linestyle 1 +\@ s1 errorbar riser linewidth 1.0 +\@ s1 errorbar riser linestyle 1 +\@ s1 errorbar riser clip off +\@ s1 errorbar riser clip length 0.100000 +\@ s1 legend "Sum" +\@ s2 hidden false +\@ s2 type xy +\@ s2 symbol 1 +\@ s2 symbol size 1.000000 +\@ s2 symbol color 3 +\@ s2 symbol pattern 1 +\@ s2 symbol fill color 3 +\@ s2 symbol fill pattern 1 +\@ s2 symbol linewidth 1.0 +\@ s2 symbol linestyle 1 +\@ s2 symbol char 65 +\@ s2 symbol char font 0 +\@ s2 symbol skip 0 +\@ s2 line type 1 +\@ s2 line linestyle 1 +\@ s2 line linewidth 4.0 +\@ s2 line color 3 +\@ s2 line pattern 1 +\@ s2 baseline type 0 +\@ s2 baseline off +\@ s2 dropline off +\@ s2 fill type 0 +\@ s2 fill rule 0 +\@ s2 fill color 1 +\@ s2 fill pattern 1 +\@ s2 avalue off +\@ s2 avalue type 2 +\@ s2 avalue char size 1.000000 +\@ s2 avalue font 0 +\@ s2 avalue color 1 +\@ s2 avalue rot 0 +\@ s2 avalue format general +\@ s2 avalue prec 3 +\@ s2 avalue prepend "" +\@ s2 avalue append "" +\@ s2 avalue offset 0.000000 , 0.000000 +\@ s2 errorbar on +\@ s2 errorbar place both +\@ s2 errorbar color 3 +\@ s2 errorbar pattern 1 +\@ s2 errorbar size 1.000000 +\@ s2 errorbar linewidth 1.0 +\@ s2 errorbar linestyle 1 +\@ s2 errorbar riser linewidth 1.0 +\@ s2 errorbar riser linestyle 1 +\@ s2 errorbar riser clip off +\@ s2 errorbar riser clip length 0.100000 +\@ s2 legend "Copy" +\@ s3 hidden false +\@ s3 type xy +\@ s3 symbol 1 +\@ s3 symbol size 1.000000 +\@ s3 symbol color 4 +\@ s3 symbol pattern 1 +\@ s3 symbol fill color 4 +\@ s3 symbol fill pattern 1 +\@ s3 symbol linewidth 1.0 +\@ s3 symbol linestyle 1 +\@ s3 symbol char 65 +\@ s3 symbol char font 0 +\@ s3 symbol skip 0 +\@ s3 line type 1 +\@ s3 line linestyle 1 +\@ s3 line linewidth 4.0 +\@ s3 line color 4 +\@ s3 line pattern 1 +\@ s3 baseline type 0 +\@ s3 baseline off +\@ s3 dropline off +\@ s3 fill type 0 +\@ s3 fill rule 0 +\@ s3 fill color 1 +\@ s3 fill pattern 1 +\@ s3 avalue off +\@ s3 avalue type 2 +\@ s3 avalue char size 1.000000 +\@ s3 avalue font 0 +\@ s3 avalue color 1 +\@ s3 avalue rot 0 +\@ s3 avalue format general +\@ s3 avalue prec 3 +\@ s3 avalue prepend "" +\@ s3 avalue append "" +\@ s3 avalue offset 0.000000 , 0.000000 +\@ s3 errorbar on +\@ s3 errorbar place both +\@ s3 errorbar color 4 +\@ s3 errorbar pattern 1 +\@ s3 errorbar size 1.000000 +\@ s3 errorbar linewidth 1.0 +\@ s3 errorbar linestyle 1 +\@ s3 errorbar riser linewidth 1.0 +\@ s3 errorbar riser linestyle 1 +\@ s3 errorbar riser clip off +\@ s3 errorbar riser clip length 0.100000 +\@ s3 legend "Update" +\@ s4 hidden false +\@ s4 type xy +\@ s4 symbol 1 +\@ s4 symbol size 1.000000 +\@ s4 symbol color 5 +\@ s4 symbol pattern 1 +\@ s4 symbol fill color 5 +\@ s4 symbol fill pattern 1 +\@ s4 symbol linewidth 1.0 +\@ s4 symbol linestyle 1 +\@ s4 symbol char 65 +\@ s4 symbol char font 0 +\@ s4 symbol skip 0 +\@ s4 line type 1 +\@ s4 line linestyle 1 +\@ s4 line linewidth 4.0 +\@ s4 line color 5 +\@ s4 line pattern 1 +\@ s4 baseline type 0 +\@ s4 baseline off +\@ s4 dropline off +\@ s4 fill type 0 +\@ s4 fill rule 0 +\@ s4 fill color 1 +\@ s4 fill pattern 1 +\@ s4 avalue off +\@ s4 avalue type 2 +\@ s4 avalue char size 1.000000 +\@ s4 avalue font 0 +\@ s4 avalue color 1 +\@ s4 avalue rot 0 +\@ s4 avalue format general +\@ s4 avalue prec 3 +\@ s4 avalue prepend "" +\@ s4 avalue append "" +\@ s4 avalue offset 0.000000 , 0.000000 +\@ s4 errorbar on +\@ s4 errorbar place both +\@ s4 errorbar color 5 +\@ s4 errorbar pattern 1 +\@ s4 errorbar size 1.000000 +\@ s4 errorbar linewidth 1.0 +\@ s4 errorbar linestyle 1 +\@ s4 errorbar riser linewidth 1.0 +\@ s4 errorbar riser linestyle 1 +\@ s4 errorbar riser clip off +\@ s4 errorbar riser clip length 0.100000 +\@ s4 legend "Triad" +\@ s5 hidden false +\@ s5 type xy +\@ s5 symbol 1 +\@ s5 symbol size 1.000000 +\@ s5 symbol color 6 +\@ s5 symbol pattern 1 +\@ s5 symbol fill color 6 +\@ s5 symbol fill pattern 1 +\@ s5 symbol linewidth 1.0 +\@ s5 symbol linestyle 1 +\@ s5 symbol char 65 +\@ s5 symbol char font 0 +\@ s5 symbol skip 0 +\@ s5 line type 1 +\@ s5 line linestyle 1 +\@ s5 line linewidth 4.0 +\@ s5 line color 6 +\@ s5 line pattern 1 +\@ s5 baseline type 0 +\@ s5 baseline off +\@ s5 dropline off +\@ s5 fill type 0 +\@ s5 fill rule 0 +\@ s5 fill color 1 +\@ s5 fill pattern 1 +\@ s5 avalue off +\@ s5 avalue type 2 +\@ s5 avalue char size 1.000000 +\@ s5 avalue font 0 +\@ s5 avalue color 1 +\@ s5 avalue rot 0 +\@ s5 avalue format general +\@ s5 avalue prec 3 +\@ s5 avalue prepend "" +\@ s5 avalue append "" +\@ s5 avalue offset 0.000000 , 0.000000 +\@ s5 errorbar on +\@ s5 errorbar place both +\@ s5 errorbar color 6 +\@ s5 errorbar pattern 1 +\@ s5 errorbar size 1.000000 +\@ s5 errorbar linewidth 1.0 +\@ s5 errorbar linestyle 1 +\@ s5 errorbar riser linewidth 1.0 +\@ s5 errorbar riser linestyle 1 +\@ s5 errorbar riser clip off +\@ s5 errorbar riser clip length 0.100000 +\@ s5 legend "Daxpy" +\@ s6 hidden false +\@ s6 type xy +\@ s6 symbol 1 +\@ s6 symbol size 1.000000 +\@ s6 symbol color 7 +\@ s6 symbol pattern 1 +\@ s6 symbol fill color 7 +\@ s6 symbol fill pattern 1 +\@ s6 symbol linewidth 1.0 +\@ s6 symbol linestyle 1 +\@ s6 symbol char 65 +\@ s6 symbol char font 0 +\@ s6 symbol skip 0 +\@ s6 line type 1 +\@ s6 line linestyle 1 +\@ s6 line linewidth 4.0 +\@ s6 line color 7 +\@ s6 line pattern 1 +\@ s6 baseline type 0 +\@ s6 baseline off +\@ s6 dropline off +\@ s6 fill type 0 +\@ s6 fill rule 0 +\@ s6 fill color 1 +\@ s6 fill pattern 1 +\@ s6 avalue off +\@ s6 avalue type 2 +\@ s6 avalue char size 1.000000 +\@ s6 avalue font 0 +\@ s6 avalue color 1 +\@ s6 avalue rot 0 +\@ s6 avalue format general +\@ s6 avalue prec 3 +\@ s6 avalue prepend "" +\@ s6 avalue append "" +\@ s6 avalue offset 0.000000 , 0.000000 +\@ s6 errorbar on +\@ s6 errorbar place both +\@ s6 errorbar color 7 +\@ s6 errorbar pattern 1 +\@ s6 errorbar size 1.000000 +\@ s6 errorbar linewidth 1.0 +\@ s6 errorbar linestyle 1 +\@ s6 errorbar riser linewidth 1.0 +\@ s6 errorbar riser linestyle 1 +\@ s6 errorbar riser clip off +\@ s6 errorbar riser clip length 0.100000 +\@ s6 legend "STriad" +\@ s7 hidden false +\@ s7 type xy +\@ s7 symbol 1 +\@ s7 symbol size 1.000000 +\@ s7 symbol color 8 +\@ s7 symbol pattern 1 +\@ s7 symbol fill color 8 +\@ s7 symbol fill pattern 1 +\@ s7 symbol linewidth 1.0 +\@ s7 symbol linestyle 1 +\@ s7 symbol char 65 +\@ s7 symbol char font 0 +\@ s7 symbol skip 0 +\@ s7 line type 1 +\@ s7 line linestyle 1 +\@ s7 line linewidth 4.0 +\@ s7 line color 8 +\@ s7 line pattern 1 +\@ s7 baseline type 0 +\@ s7 baseline off +\@ s7 dropline off +\@ s7 fill type 0 +\@ s7 fill rule 0 +\@ s7 fill color 1 +\@ s7 fill pattern 1 +\@ s7 avalue off +\@ s7 avalue type 2 +\@ s7 avalue char size 1.000000 +\@ s7 avalue font 0 +\@ s7 avalue color 1 +\@ s7 avalue rot 0 +\@ s7 avalue format general +\@ s7 avalue prec 3 +\@ s7 avalue prepend "" +\@ s7 avalue append "" +\@ s7 avalue offset 0.000000 , 0.000000 +\@ s7 errorbar on +\@ s7 errorbar place both +\@ s7 errorbar color 8 +\@ s7 errorbar pattern 1 +\@ s7 errorbar size 1.000000 +\@ s7 errorbar linewidth 1.0 +\@ s7 errorbar linestyle 1 +\@ s7 errorbar riser linewidth 1.0 +\@ s7 errorbar riser linestyle 1 +\@ s7 errorbar riser clip off +\@ s7 errorbar riser clip length 0.100000 +\@ s7 legend "SDaxpy" +#QTGRACE_ADDITIONAL_PARAMETER: PLOT_ALPHA 255 255 +#QTGRACE_ADDITIONAL_PARAMETER: GRAPH_ALPHA G 0 {255;255;255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: AXIS_ALPHA G 0 A 0 {255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: AXIS_ALPHA G 0 A 1 {255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: AXIS_ALPHA G 0 A 2 {255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: AXIS_ALPHA G 0 A 3 {255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 0 POLYGONEBASESET -1 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 0 SHOWERRORBARINLEGEND 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 0 CONNECTERRORBARS 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 0 IGNOREINAUTOSCALE 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 0 ALPHA_CHANNELS {255;255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 1 POLYGONEBASESET -1 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 1 SHOWERRORBARINLEGEND 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 1 CONNECTERRORBARS 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 1 IGNOREINAUTOSCALE 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 1 ALPHA_CHANNELS {255;255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 2 POLYGONEBASESET -1 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 2 SHOWERRORBARINLEGEND 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 2 CONNECTERRORBARS 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 2 IGNOREINAUTOSCALE 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 2 ALPHA_CHANNELS {255;255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 3 POLYGONEBASESET -1 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 3 SHOWERRORBARINLEGEND 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 3 CONNECTERRORBARS 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 3 IGNOREINAUTOSCALE 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 3 ALPHA_CHANNELS {255;255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 4 POLYGONEBASESET -1 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 4 SHOWERRORBARINLEGEND 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 4 CONNECTERRORBARS 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 4 IGNOREINAUTOSCALE 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 4 ALPHA_CHANNELS {255;255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 5 POLYGONEBASESET -1 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 5 SHOWERRORBARINLEGEND 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 5 CONNECTERRORBARS 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 5 IGNOREINAUTOSCALE 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 5 ALPHA_CHANNELS {255;255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 6 POLYGONEBASESET -1 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 6 SHOWERRORBARINLEGEND 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 6 CONNECTERRORBARS 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 6 IGNOREINAUTOSCALE 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 6 ALPHA_CHANNELS {255;255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 7 POLYGONEBASESET -1 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 7 SHOWERRORBARINLEGEND 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 7 CONNECTERRORBARS 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 7 IGNOREINAUTOSCALE 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 7 ALPHA_CHANNELS {255;255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: AUTOATTACH G 0 0 0 +#QTGRACE_ADDITIONAL_PARAMETER: TITLE_SHIFT G 0 0 0 +#QTGRACE_ADDITIONAL_PARAMETER: SUBTITLE_SHIFT G 0 0 0 +#QTGRACE_ADDITIONAL_PARAMETER: VIEWPORT_NAME 0 0 "Default" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT_RESET 1 +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Times New Roman,10,-1,5,50,0,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Times New Roman,10,-1,5,50,1,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Times New Roman,10,-1,5,75,0,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Times New Roman,10,-1,5,75,1,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Helvetica,10,-1,5,50,0,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Helvetica,10,-1,5,50,1,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Helvetica,10,-1,5,75,0,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Helvetica,10,-1,5,75,1,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Courier,10,-1,5,50,0,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Courier,10,-1,5,50,1,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Courier,10,-1,5,75,0,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Courier,10,-1,5,75,1,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Symbol,10,-1,5,50,0,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Zapf Dingbats,10,-1,5,50,0,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: ENCODING "UTF-8" +#QTGRACE_ADDITIONAL_PARAMETER: UNIVERSAL_FONT_SIZE_FACTOR 1.0000 +#QTGRACE_ADDITIONAL_PARAMETER: TIMESTAMP_PATH 0 +#QTGRACE_ADDITIONAL_PARAMETER: LINESTYLES 9 {2;2;2;2;2;4;4;6;6} {{0;1},{1;0},{1;3},{5;3},{7;3},{1;3;5;3},{1;3;7;3},{1;3;5;3;1;3},{5;3;1;3;5;3}} +\@target G0.S0 +\@type xy +$PLOT{Init} +& +\@target G0.S1 +\@type xy +$PLOT{Sum} +& +\@target G0.S2 +\@type xy +$PLOT{Copy} +& +\@target G0.S3 +\@type xy +$PLOT{Update} +& +\@target G0.S4 +\@type xy +$PLOT{Triad} +& +\@target G0.S5 +\@type xy +$PLOT{Daxpy} +& +\@target G0.S6 +\@type xy +$PLOT{STriad} +& +\@target G0.S7 +\@type xy +$PLOT{SDaxpy} +& +END +close $fh; +} + +sub generateDomainScalingPlot { +my $filename = shift; +open(my $fh, '>', $filename) or die "Could not open file '$filename' $!"; + +print $fh <<"END"; +# Grace project file +# +\@version 50122 +\@page size 792, 612 +\@page scroll 5% +\@page inout 5% +\@link page off +\@map font 0 to "Times-Roman", "Times-Roman" +\@map font 1 to "Times-Italic", "Times-Italic" +\@map font 2 to "Times-Bold", "Times-Bold" +\@map font 3 to "Times-BoldItalic", "Times-BoldItalic" +\@map font 4 to "Helvetica", "Helvetica" +\@map font 5 to "Helvetica-Oblique", "Helvetica-Oblique" +\@map font 6 to "Helvetica-Bold", "Helvetica-Bold" +\@map font 7 to "Helvetica-BoldOblique", "Helvetica-BoldOblique" +\@map font 8 to "Courier", "Courier" +\@map font 9 to "Courier-Oblique", "Courier-Oblique" +\@map font 10 to "Courier-Bold", "Courier-Bold" +\@map font 11 to "Courier-BoldOblique", "Courier-BoldOblique" +\@map font 12 to "Symbol", "Symbol" +\@map font 13 to "ZapfDingbats", "ZapfDingbats" +\@map color 0 to (255, 255, 255), "white" +\@map color 1 to (0, 0, 0), "black" +\@map color 2 to (255, 0, 0), "red" +\@map color 3 to (0, 255, 0), "green" +\@map color 4 to (0, 0, 255), "blue" +\@map color 5 to (255, 255, 0), "yellow" +\@map color 6 to (188, 143, 143), "brown" +\@map color 7 to (220, 220, 220), "grey" +\@map color 8 to (148, 0, 211), "violet" +\@map color 9 to (0, 255, 255), "cyan" +\@map color 10 to (255, 0, 255), "magenta" +\@map color 11 to (255, 165, 0), "orange" +\@map color 12 to (114, 33, 188), "indigo" +\@map color 13 to (103, 7, 72), "maroon" +\@map color 14 to (64, 224, 208), "turquoise" +\@map color 15 to (0, 139, 0), "green4" +\@reference date 0 +\@date wrap off +\@date wrap year 1950 +\@default linewidth 1.0 +\@default linestyle 1 +\@default color 1 +\@default pattern 1 +\@default font 0 +\@default char size 1.000000 +\@default symbol size 1.000000 +\@default sformat "%.8g" +\@background color 0 +\@page background fill on +\@timestamp off +\@timestamp 0.03, 0.03 +\@timestamp color 1 +\@timestamp rot 0 +\@timestamp font 0 +\@timestamp char size 1.000000 +\@timestamp def "Wed Jan 13 13:31:39 2021" +\@r0 off +\@link r0 to g0 +\@r0 type above +\@r0 linestyle 1 +\@r0 linewidth 1.0 +\@r0 color 1 +\@r0 line 0, 0, 0, 0 +\@r1 off +\@link r1 to g0 +\@r1 type above +\@r1 linestyle 1 +\@r1 linewidth 1.0 +\@r1 color 1 +\@r1 line 0, 0, 0, 0 +\@r2 off +\@link r2 to g0 +\@r2 type above +\@r2 linestyle 1 +\@r2 linewidth 1.0 +\@r2 color 1 +\@r2 line 0, 0, 0, 0 +\@r3 off +\@link r3 to g0 +\@r3 type above +\@r3 linestyle 1 +\@r3 linewidth 1.0 +\@r3 color 1 +\@r3 line 0, 0, 0, 0 +\@r4 off +\@link r4 to g0 +\@r4 type above +\@r4 linestyle 1 +\@r4 linewidth 1.0 +\@r4 color 1 +\@r4 line 0, 0, 0, 0 +\@g0 on +\@g0 hidden false +\@g0 type XY +\@g0 stacked false +\@g0 bar hgap 0.000000 +\@g0 fixedpoint off +\@g0 fixedpoint type 0 +\@g0 fixedpoint xy 0.000000, 0.000000 +\@g0 fixedpoint format general general +\@g0 fixedpoint prec 6, 6 +\@with g0 +\@ world $DPLOT{world} +\@ stack world 0, 1, 0, 1 +\@ znorm 1 +\@ view 0.150000, 0.150000, 1.150000, 0.850000 +\@ title "" +\@ title font 0 +\@ title size 1.500000 +\@ title color 1 +\@ subtitle "" +\@ subtitle font 0 +\@ subtitle size 1.000000 +\@ subtitle color 1 +\@ xaxes scale Normal +\@ yaxes scale Normal +\@ xaxes invert off +\@ yaxes invert off +\@ xaxis on +\@ xaxis type zero false +\@ xaxis offset 0.000000 , 0.000000 +\@ xaxis bar on +\@ xaxis bar color 1 +\@ xaxis bar linestyle 1 +\@ xaxis bar linewidth 1.0 +\@ xaxis label "number of cores per memory domain" +\@ xaxis label layout para +\@ xaxis label place auto +\@ xaxis label char size 1.500000 +\@ xaxis label font 0 +\@ xaxis label color 1 +\@ xaxis label place normal +\@ xaxis tick on +\@ xaxis tick major 1 +\@ xaxis tick minor ticks 0 +\@ xaxis tick default 6 +\@ xaxis tick place rounded true +\@ xaxis tick in +\@ xaxis tick major size 1.000000 +\@ xaxis tick major color 1 +\@ xaxis tick major linewidth 1.0 +\@ xaxis tick major linestyle 1 +\@ xaxis tick major grid off +\@ xaxis tick minor color 1 +\@ xaxis tick minor linewidth 1.0 +\@ xaxis tick minor linestyle 1 +\@ xaxis tick minor grid off +\@ xaxis tick minor size 0.500000 +\@ xaxis ticklabel on +\@ xaxis ticklabel format general +\@ xaxis ticklabel prec 5 +\@ xaxis ticklabel formula "" +\@ xaxis ticklabel append "" +\@ xaxis ticklabel prepend "" +\@ xaxis ticklabel angle 0 +\@ xaxis ticklabel skip 0 +\@ xaxis ticklabel stagger 0 +\@ xaxis ticklabel place normal +\@ xaxis ticklabel offset auto +\@ xaxis ticklabel offset 0.000000 , 0.010000 +\@ xaxis ticklabel start type auto +\@ xaxis ticklabel start 0.000000 +\@ xaxis ticklabel stop type auto +\@ xaxis ticklabel stop 0.000000 +\@ xaxis ticklabel char size 1.250000 +\@ xaxis ticklabel font 0 +\@ xaxis ticklabel color 1 +\@ xaxis tick place normal +\@ xaxis tick spec type none +\@ yaxis on +\@ yaxis type zero false +\@ yaxis offset 0.000000 , 0.000000 +\@ yaxis bar on +\@ yaxis bar color 1 +\@ yaxis bar linestyle 1 +\@ yaxis bar linewidth 1.0 +\@ yaxis label "Memory bandwidth [GB/s]" +\@ yaxis label layout para +\@ yaxis label place auto +\@ yaxis label char size 1.500000 +\@ yaxis label font 0 +\@ yaxis label color 1 +\@ yaxis label place normal +\@ yaxis tick on +\@ yaxis tick major 50 +\@ yaxis tick minor ticks 1 +\@ yaxis tick default 6 +\@ yaxis tick place rounded true +\@ yaxis tick in +\@ yaxis tick major size 1.000000 +\@ yaxis tick major color 1 +\@ yaxis tick major linewidth 1.0 +\@ yaxis tick major linestyle 1 +\@ yaxis tick major grid on +\@ yaxis tick minor color 7 +\@ yaxis tick minor linewidth 1.0 +\@ yaxis tick minor linestyle 1 +\@ yaxis tick minor grid on +\@ yaxis tick minor size 0.500000 +\@ yaxis ticklabel on +\@ yaxis ticklabel format general +\@ yaxis ticklabel prec 5 +\@ yaxis ticklabel formula "" +\@ yaxis ticklabel append "" +\@ yaxis ticklabel prepend "" +\@ yaxis ticklabel angle 0 +\@ yaxis ticklabel skip 0 +\@ yaxis ticklabel stagger 0 +\@ yaxis ticklabel place normal +\@ yaxis ticklabel offset auto +\@ yaxis ticklabel offset 0.000000 , 0.010000 +\@ yaxis ticklabel start type auto +\@ yaxis ticklabel start 0.000000 +\@ yaxis ticklabel stop type auto +\@ yaxis ticklabel stop 0.000000 +\@ yaxis ticklabel char size 1.250000 +\@ yaxis ticklabel font 0 +\@ yaxis ticklabel color 1 +\@ yaxis tick place both +\@ yaxis tick spec type none +\@ altxaxis off +\@ altyaxis off +\@ legend on +\@ legend loctype view +\@ legend 0.9, 0.4 +\@ legend box color 1 +\@ legend box pattern 1 +\@ legend box linewidth 1.0 +\@ legend box linestyle 1 +\@ legend box fill color 0 +\@ legend box fill pattern 1 +\@ legend font 0 +\@ legend char size 1.000000 +\@ legend color 1 +\@ legend length 4 +\@ legend vgap 1 +\@ legend hgap 1 +\@ legend invert false +\@ frame type 0 +\@ frame linestyle 1 +\@ frame linewidth 1.0 +\@ frame color 1 +\@ frame pattern 1 +\@ frame background color 0 +\@ frame background pattern 0 +$DPLOT{meta} +#QTGRACE_ADDITIONAL_PARAMETER: PLOT_ALPHA 255 255 +#QTGRACE_ADDITIONAL_PARAMETER: GRAPH_ALPHA G 0 {255;255;255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: AXIS_ALPHA G 0 A 0 {255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: AXIS_ALPHA G 0 A 1 {255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: AXIS_ALPHA G 0 A 2 {255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: AXIS_ALPHA G 0 A 3 {255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 0 POLYGONEBASESET -1 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 0 SHOWERRORBARINLEGEND 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 0 CONNECTERRORBARS 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 0 IGNOREINAUTOSCALE 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 0 ALPHA_CHANNELS {255;255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 1 POLYGONEBASESET -1 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 1 SHOWERRORBARINLEGEND 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 1 CONNECTERRORBARS 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 1 IGNOREINAUTOSCALE 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 1 ALPHA_CHANNELS {255;255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 2 POLYGONEBASESET -1 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 2 SHOWERRORBARINLEGEND 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 2 CONNECTERRORBARS 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 2 IGNOREINAUTOSCALE 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 2 ALPHA_CHANNELS {255;255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 3 POLYGONEBASESET -1 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 3 SHOWERRORBARINLEGEND 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 3 CONNECTERRORBARS 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 3 IGNOREINAUTOSCALE 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 3 ALPHA_CHANNELS {255;255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 4 POLYGONEBASESET -1 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 4 SHOWERRORBARINLEGEND 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 4 CONNECTERRORBARS 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 4 IGNOREINAUTOSCALE 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 4 ALPHA_CHANNELS {255;255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 5 POLYGONEBASESET -1 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 5 SHOWERRORBARINLEGEND 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 5 CONNECTERRORBARS 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 5 IGNOREINAUTOSCALE 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 5 ALPHA_CHANNELS {255;255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 6 POLYGONEBASESET -1 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 6 SHOWERRORBARINLEGEND 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 6 CONNECTERRORBARS 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 6 IGNOREINAUTOSCALE 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 6 ALPHA_CHANNELS {255;255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 7 POLYGONEBASESET -1 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 7 SHOWERRORBARINLEGEND 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 7 CONNECTERRORBARS 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 7 IGNOREINAUTOSCALE 0 +#QTGRACE_ADDITIONAL_PARAMETER: G 0 S 7 ALPHA_CHANNELS {255;255;255;255;255;255} +#QTGRACE_ADDITIONAL_PARAMETER: AUTOATTACH G 0 0 0 +#QTGRACE_ADDITIONAL_PARAMETER: TITLE_SHIFT G 0 0 0 +#QTGRACE_ADDITIONAL_PARAMETER: SUBTITLE_SHIFT G 0 0 0 +#QTGRACE_ADDITIONAL_PARAMETER: VIEWPORT_NAME 0 0 "Default" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT_RESET 1 +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Times New Roman,10,-1,5,50,0,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Times New Roman,10,-1,5,50,1,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Times New Roman,10,-1,5,75,0,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Times New Roman,10,-1,5,75,1,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Helvetica,10,-1,5,50,0,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Helvetica,10,-1,5,50,1,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Helvetica,10,-1,5,75,0,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Helvetica,10,-1,5,75,1,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Courier,10,-1,5,50,0,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Courier,10,-1,5,50,1,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Courier,10,-1,5,75,0,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Courier,10,-1,5,75,1,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Symbol,10,-1,5,50,0,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: QTFONT "Zapf Dingbats,10,-1,5,50,0,0,0,0,0" +#QTGRACE_ADDITIONAL_PARAMETER: ENCODING "UTF-8" +#QTGRACE_ADDITIONAL_PARAMETER: UNIVERSAL_FONT_SIZE_FACTOR 1.0000 +#QTGRACE_ADDITIONAL_PARAMETER: TIMESTAMP_PATH 0 +#QTGRACE_ADDITIONAL_PARAMETER: LINESTYLES 9 {2;2;2;2;2;4;4;6;6} {{0;1},{1;0},{1;3},{5;3},{7;3},{1;3;5;3},{1;3;7;3},{1;3;5;3;1;3},{5;3;1;3;5;3}} +$DPLOT{series} +END +close $fh; +} + +sub generateMarkdown { +my $filename = shift; +open(my $fh, '>', $filename) or die "Could not open file '$filename' $!"; + +print $fh <<"END"; +# System + +* **Processor:** $INFO{processor} +* **Base frequency:** ?? +* **Number of sockets:** $INFO{numSockets} +* **Number of memory domains per socket:** $INFO{numDomainsPerSocket} +* **Number of cores per socket:** $INFO{numCoresPerSocket} +* **Number of HWThreads per core:** $INFO{numThreadsPerCore} +* **[MachineState](https://github.com/RRZE-HPC/MachineState) output:** NA + +# Tool chain + +``` ++----------+-----------+ +| Compiler | $INFO{toolchain} | +|----------|-----------| +| Version | $INFO{version} | ++----------+-----------+ +``` + +Optimizing flags: ```$INFO{flags}``` + +# Results + +All results are in ```GB/s```. + +Summary results: +``` ++---------------------------------+ +| Single core | $RESULT{core} | +| Memory domain | $RESULT{domain} | +| Socket | $RESULT{socket} | +| Node | $RESULT{node} | ++---------------------------------+ +``` + +Results for scaling within a memory domain: +``` +$RESULT{scaling} +``` + +Results for scaling across memory domains. Shown are the results for the number of memory domains used (nm) with columns number of cores used per memory domain. + +Init: +``` +$RESULT{domainInit} +``` + +Sum: +``` +$RESULT{domainSum} +``` + +Copy +``` +$RESULT{domainCopy} +``` + +Update +``` +$RESULT{domainUpdate} +``` + +Triad +``` +$RESULT{domainTriad} +``` + +# Scaling + +Memory bandwidth scaling within one memory domain: +![Main memory bandwidth scaling plot]($RESULT{scalingPlot}) + +The following plots illustrate the the performance scaling over multiple memory domains using different number of cores per memory domain. + +Memory bandwidth scaling across memory domains for init: +![Memory domain scaling plot]($RESULT{domainInitPlot}) + +Memory bandwidth scaling across memory domains for sum +![Memory domain scaling plot]($RESULT{domainSumPlot}) + +Memory bandwidth scaling across memory domains for copy +![Memory domain scaling plot]($RESULT{domainCopyPlot}) + +Memory bandwidth scaling across memory domains for Triad +![Memory domain scaling plot]($RESULT{domainTriadPlot}) +END + +close $fh; +} diff --git a/util/extractResults.pl b/util/extractResults.pl index 5ac2978..af113fb 100755 --- a/util/extractResults.pl +++ b/util/extractResults.pl @@ -27,7 +27,20 @@ use strict; use warnings; use utf8; -my $DIR = $ARGV[0]; +my ($DIR, $UNIT) = @ARGV; + +if (not defined $DIR) { + die "Need directory: $0 \n"; +} + +if (not defined $UNIT) { + $UNIT = 1.0; +} else { + if ( $UNIT eq 'GB' ) { + $UNIT = 0.001; + } +} + my %RES; my @testcases = ('Init', 'Sum', 'Copy', 'Update', 'Triad', 'Daxpy', 'STriad', 'SDaxpy'); @@ -49,7 +62,7 @@ while( defined( my $file = glob($DIR . '/*' ) ) ) { if ( $fields[1] =~ /[0-9]+/ ) { $fields[0] =~ s/://; - $RES{$nt}->{$fields[0]} = $fields[1]; + $RES{$nt}->{$fields[0]} = $fields[1] * $UNIT; } } @@ -68,7 +81,11 @@ foreach my $key (sort {$a <=> $b} keys %RES) { printf "%d", $key; foreach my $test ( @testcases ) { - printf "\t%.0f", $RES{$key}->{$test}; + if ( $UNIT > 0.1 ) { + printf "\t%.0f", $RES{$key}->{$test}; + } else { + printf "\t%.2f", $RES{$key}->{$test}; + } } printf "\n"; }