#!/usr/bin/perl

select STDOUT; $|=1;

open IN, $ARGV[0];
@tasks = <IN>;
@machines = @ARGV[1..$#ARGV];

for $i (0..$#tasks) {
  $task = $tasks[$i];
  chomp $task;
  if($#machines < 0) {
    while(($pid = wait) <= 0) {};
    $end{$pid} = time;
    $next = $machine{$pid};
    print("Child $pid finished on $next, total runtime " . ($end{$pid} - $start{$pid}) . " seconds.\n");
  } else { $next = shift @machines; }
  if(($pid = fork()) == 0) { # child
    system("ssh", "-n", $next, 
      'export PERL5LIB=/fs/home/mtkaaria/lib/perl5/site_perl/5.8.0; ' .
      'export PATH=$PATH:.; ' . 
      'export SEMIBOUND_DIR=/fs/home/mtkaaria/semibound; ' .
      'cd $SEMIBOUND_DIR; ' . $task . " > /dev/null 2>&1");
    exit;
  } else { # parent
    print (($i+1) . "/" . ($#tasks+1) . ": Child $pid starting $task on $next...\n");
    $start{$pid} = time;
    $machine{$pid} = $next;
    $cmd{$pid} = $task;
  }
}
while (keys(%start) - keys(%end) > 0) {
  while(($pid = wait) <= 0) {};
  $end{$pid} = time;
  $m = $machine{$pid};
  print("Child $pid finished on $m, total runtime " . ($end{$pid} - $start{$pid}) . " seconds.\n");
}
print "All done.\n";
