Parallel-Pvm-Scheduler
view release on metacpan or search on metacpan
Scheduler.pm view on Meta::CPAN
=cut
sub new {
my ($class, @args) = @_;
my ($info,@CONF) = Parallel::Pvm::config;
my $FREEHOSTS = scalar(@CONF);
my %HOSTS;
my @TID;
my %TIDcmd;
# Map host id to hostname and set busy flag to zero
foreach my $node (@CONF) {
my $hostid = $node->{'hi_tid'};
$HOSTS{$hostid}{'name'} = $node->{'hi_name'};
$HOSTS{$hostid}{'busy'} = 0;
}
my $self = {CONF => \@CONF, FREEHOSTS => $FREEHOSTS, HOSTS => \%HOSTS, TID => \@TID, TIDCMD => \%TIDcmd};
bless $self;
return $self;
}
sub DESTROY {
Parallel::Pvm::exit;
}
Scheduler.pm view on Meta::CPAN
}
if ($block == 1) {
if ($self->{FREEHOSTS} != scalar(@$CONF_ref)) {
print STDERR "There was a problem reconciling freehosts with pvm configuration!!!\n";
foreach my $node (@$CONF_ref) {
my $hostid = $node->{'hi_tid'};
my $hostname = $node->{'hi_name'};
if ($HOSTS_ref->{$hostid}{'busy'} != 0) {
print STDERR "$hostname is not free\n";
}
}
}
}
}
=head2 _allocateHost
Title : _allocateHost
Scheduler.pm view on Meta::CPAN
=cut
sub _allocateHost {
my ($self) = @_;
my $HOSTS_ref = $self->{HOSTS};
# Locate a free host, allocate it, return it.
# First available algorithm
foreach my $hostid (keys %$HOSTS_ref) {
if ($HOSTS_ref->{$hostid}{'busy'} == 0) {
my $hostname = $HOSTS_ref->{$hostid}{'name'};
print STDERR "Allocating host $hostname\n";
$HOSTS_ref->{$hostid}{'busy'} = 1;
$self->{FREEHOSTS}--;
return $hostname;
}
}
# if we get here, no hosts were free.
die "Unable to locate free host!\n";
}
=head2 _deallocateHost
Title : _deallocateHost
Function: Internal Function: Frees a host making it available for another task
=cut
sub _deallocateHost {
my ($self, $hostid) = @_;
my $HOSTS_ref = $self->{HOSTS};
if ($HOSTS_ref->{$hostid}{'busy'} == 0) {
die "Host not allocated: ". $HOSTS_ref->{$hostid}{'name'} ."!\n";
}
print STDERR "Deallocating host ". $HOSTS_ref->{$hostid}{'name'} ."\n";
$HOSTS_ref->{$hostid}{'busy'} = 0;
$self->{FREEHOSTS}++;
}
1;
__END__
( run in 0.437 second using v1.01-cache-2.11-cpan-3cd7ad12f66 )