1
1
openmpi/contrib/scaling/scaling.pl
2012-06-01 02:35:15 +00:00

119 строки
3.8 KiB
Perl

#!/usr/bin/env perl
#
# Copyright (c) 2012 Los Alamos National Security, Inc.
# All rights reserved.
use strict;
# globals
my $showme_arg = 0;
my $num_nodes = 0;
my $my_arg;
my $reps = 1;
my @tests = qw(/bin/true ./orte_no_op ./mpi_no_op ./mpi_no_op);
my @options = ("", "", "", "-mca mpi_preconnect_mpi 1");
# Cannot use the usual GetOpts library as the user might
# be passing -options to us! So have to
# parse the options ourselves to look for help and showme
my $i = 0;
foreach $my_arg (@ARGV) {
if ($my_arg eq "-h" ||
$my_arg eq "--h" ||
$my_arg eq "-help" ||
$my_arg eq "--help") {
print "Options:
--showme Show the actual commands without executing them
--nodes Number of nodes to run the test across
--reps Number of times to run each test (for statistics)
--help | -h This help list\n";
exit;
} elsif ($my_arg eq "-showme" ||
$my_arg eq "--showme") {
$showme_arg = 1;
} elsif ($my_arg eq "-nodes" ||
$my_arg eq "--nodes") {
$num_nodes = @ARGV[$i+1];
} elsif ($my_arg eq "--reps" ||
$my_arg eq "-reps") {
$reps = @ARGV[$i+1];
}
$i++;
}
my $n = 1;
my $cmd;
my $test;
my $output;
my @lines;
my $line;
my @results;
my $res;
my $toggle;
my $idx;
my $option;
print "\n--------------------------------------------------\n";
foreach $test (@tests) {
$option = shift(@options);
if (-e $test) {
# pre-position the executable
$cmd = "mpirun -npernode 1 $test 2>&1";
system($cmd);
$n = 1;
while ($n <= $num_nodes) {
$cmd = "time mpirun -npernode 1 -max-vm-size $n $option $test 2>&1";
print $cmd . "\n";
if (0 == $showme_arg) {
for (1..$reps) {
$toggle = 1;
$output = `$cmd`;
@lines = split(/\n/, $output);
foreach $line (@lines) {
if (0 <= index($line, "user") ||
0 <= index($line, "sys") ||
0 <= index($line, "real") ||
0 <= index($line, "elapsed")) {
$idx = 0;
@results = split(/\s+/,$line, 4);
foreach $res (@results) {
if ($idx < 3) {
print $res;
if (0 == $toggle) {
print " ";
$toggle = 1;
} else {
print " ";
$toggle = 0;
}
}
$idx = $idx + 1;
}
print "\n";
}
}
}
print "\n";
}
$n = 2 * $n;
}
if ($n != (2 * $num_nodes)) {
$cmd = "time mpirun -npernode 1 $option $test 2>&1";
print $cmd . "\n";
if (0 == $showme_arg) {
for (1..$reps) {
$output = `$cmd`;
$output =~ s/(.+)\n.*/$1/;
@results = split(/\s+/,$output);
print $results[0] . " " . $results[1] . " " . $results[2] . "\n";
}
}
}
print "\n--------------------------------------------------\n";
} else {
print "Test " . $test . " was not found - test skipped\n";
print "\n--------------------------------------------------\n";
}
}