I see blocks of code like this in MTTGDS.pm and some of the new analyzers:
my $mca = $report->{command};
$mca =~ s/^\s*$report->{launcher}//;
$mca =~ s/\s(-n|--n|-np|--np)\s\S+//;
$mca =~ s/\s(-rf|--rankfile)\s\S+//;
$mca =~ s/\s(-hostfile|--hostfile)\s\S+//;
$mca =~ s/\s(-host|--host)\s\S+//;
$mca =~ s/\s*(-x)\s\S+//g;
$mca =~ s/\s[\S\/\\]*$report->{test_name}.*//;
$mca =~ s/\s\s/ /g;
$mca =~ s/^\s+|\s+$//g;
$phase_form->{mpi_mca} = $mca;
The problem I ran into is that at least some of the OMPI test suite executables
have perl special characters in it (e.g., mpi2c++). It looks to me like the
goal of this block is to obtain a list of the MCA parameters on the command
line. Right? If so, I think this is a safer method, and will only get mca
params (not other random mpirun parameters that don't happen to be listed in
the regexps above):
my @params;
my $cmd = $report->{command};
while ($cmd =~ s/\s([\-]*-mca)\s+(\S+)\s+(\S+)\s/ /) {
push(@params, "$1 $2 $3");
}
$phase_form->{mpi_mca} = join(' ', @params);
That being said, this *is* an Open MPI-specific field. MTT was supposed to
remain MPI-agnostic.
Is there a reason you guys didn't use the MPI Details fields "parameters" and
"network" for this purpose? We have an MPI::OMPI module which is perfect for
doing OMPI-specific things. Using the MPI:: modules, you can keep MTT core
clean so that we can run other MPI implementations through MTT as well.
I just committed:
https://svn.open-mpi.org/trac/mtt/changeset/1348
https://svn.open-mpi.org/trac/mtt/changeset/1349
that puts the above logic in
MTT::Values::Functions::MPI::OMPI::find_mca_params() and converted MTTGDS and
all the performance analyzers to call this function.
I also added a check in MTTGDS.pm to ensure that the analyzer pm has PreReport
before trying to call it.
--
Jeff Squyres
[email protected]
For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/