Отчет о научно-исследовательской работе
Вид материала | Отчет |
Приложение 2 скрипт запуска распределённых приложений ПРИЛОЖЕНИЕ 3 ДОПОЛНИТЕЛЬНЫЕ НАСТРОЙКИ СИСТЕМЫ МОНИТОРИНГА FLAME 1.HTTP-агент |
- Реферат отчет о научно-исследовательской работе состоит, 61.67kb.
- Отчёт о научно-исследовательской работе за 2011 год, 1208.93kb.
- Отчёт о научно-исследовательской работе за 2009 год, 851.3kb.
- Отчёт онаучно-исследовательской работе гу нии но ур за 2010 год, 997.69kb.
- Отчет о научно-исследовательской работе профессорско-преподавательского состава, 617.56kb.
- Отчет о научно-исследовательской работе; пояснительная записка к опытно-конструкторской, 14.47kb.
- Отчет о научно-исследовательской работе (итоговый), 2484.06kb.
- Отчет о научно-исследовательской работе, 2473.27kb.
- Отчет о научно-исследовательской работе, 392.92kb.
- Задачи секции: широкое привлечение учеников к участию в научно исследовательской работе;, 67.94kb.
ПРИЛОЖЕНИЕ 2
СКРИПТ ЗАПУСКА РАСПРЕДЕЛЁННЫХ ПРИЛОЖЕНИЙ
#!/usr/bin/perl -w
my $currDir = `pwd`;
chomp($currDir);
$needCopy = 0;
if ($ARGV[0] eq "-copy") {
$needCopy = 1;
shift @ARGV;
}
my $appname = $ARGV[0];
die "Application name was not specified" if (! defined $appname);
die "No such application $appname" if (system("test -x $appname") != 0);
###########################################################################
###########################################################################
# Get info about computational nodes #
# format:
#
###########################################################################
# nodesInfo[k] - k-th info entry #
# nodesInfo[k][0] - hostname in k-th info entry #
# nodesInfo[k][1] - number of nodes on hostname in k-th info entry #
# nodesInfo[k][2] - ports of hostname in k-th info entry #
###########################################################################
my @nodesInfo;
my @nodeInfo;
open(F, "getnodesinfo |");
for ($index = 0;
chomp;
@nodeInfo = split(/:/, $_);
for (my $i = 0; $i < 3; $i++) {
$nodesInfo[$index][$i] = $nodeInfo[$i];
}
}
close(F);
my $index;
#sub mympirun {
# my $nodeNum = $_[0];
# return "cd $currDir && ";
#}
sub mysystem {
print "Before system @_\n";
system(@_);
print "After system @_\n";
}
sub runOne {
$k = $_[0];
$pid = fork();
# $pid = 0;
if (! defined $pid) {
die "Can't fork";
}
elsif ($pid == 0) {
# child
print "Created pid $$\n";
my $l = "n0,0,0";
for (my $i = 1; $i < $nodesInfo[$k][1]; $i++) {
$l = $l . "," . $i;
}
my $cmd = "";
my $mympirun = "lamboot \&\& cd $currDir \&\& ./fixup $k \&\& mpirun $l $appname; lamhalt";
if ($k == 0) {
$cmd = $mympirun;
}
else {
$cmd = "ssh -p $nodesInfo[$k][2] $nodesInfo[$k][0] \"$mympirun\"";
}
mysystem($cmd);
exit(0);
}
else {
# parent
return $pid;
}
}
###########################################################################
###########################################################################
# Generate .hostfile #
###########################################################################
sub genHostfile {
# system("rm -f .hostfile");
open(F, "> .hostfile.in");
for (my $index = 0; $index <= $#nodesInfo;) {
print F "$nodesInfo[$index][0] $nodesInfo[$index][1]\n";
$index++
}
close(F);
}
###########################################################################
###########################################################################
# Run PACX-MPI-application #
###########################################################################
genHostfile;
if ($needCopy == 1) {
for ($index = 1; $index <= $#nodesInfo;) {
foreach my $nodePort (split(/\,/, $nodesInfo[$index][2])) {
mysystem("ssh -p $nodePort $nodesInfo[$index][0] mkdir -p $currDir");
mysystem("scp -P $nodePort -r $currDir \@$nodesInfo[$index][0]:$currDir/..");
}
$index++;
}
}
my $pids = ();
for (my $i = 0; $i <= $#nodesInfo; $i++) {
$pids = push(@pids, runOne($i));
# sleep 2;
}
#my $l = "n0,0,0";
#for (my $i = 1; $i < $nodesInfo[0][1]; $i++) {
# $l = $l . "," . $i;
#}
#mysystem("mpirun", $l, $appname);
for (my $i = 0; $i <= $#nodesInfo; $i++) {
print "Waiting for pid $pids[$i]";
waitpid($pids[$i], 0);
}