--nodes nodes to use
--array array mode (one of 'chdir' or 'xargs' or '')
--array-from file to read arrays from (default STDIN)
+ --array-slot-limit
--ppn processors per node to use
--mem memory to request
--dir Directory to run the script in (default current directory)
'nodes=i',
'array=s',
'array_from|array-from=s',
+ 'array_slot_limit|array-slot-limit=i',
'ppn|processors-per-node=i',
'mem|memory=s',
'dir=s',
@array = read_array_options(\%options) if $options{array};
# the -t option gives the range of elements for an array job
push @qsub_options,'-t','1-'. scalar @array;
+ if ($options{array_slot_limit}) {
+ $qsub_options[$#qsub_options] .= '%'.$options{array_slot_limit};
+ }
}
call_qsub(\@qsub_options,write_qsub_script(\%options,\@ARGV,\@array));
}
$l[$#l] .= ':ppn='.$options->{ppn};
}
if ($options->{mem}) {
- push @l,'mem=',$options->{mem};
+ push @l,'mem='.$options->{mem};
}
push @qo,'-l',join(',',@l) if @l;
if ($options->{interactive}) {
# this script was written by dqsub
EOF
if (defined $opt->{array}) {
- die "--array is currently not implemented";
+ my $array_opt = join("\n",@{$array});
+ $script .= <<EOF;
+OPT=\$(sed -n -e "\$PBS_ARRAYID p"<<'_HERE_DOC_END_'
+$array_opt
+_HERE_DOC_END_
+)
+EOF
+ if ($opt->{array} eq 'chdir') {
+ $script .= <<EOF;
+cd "\$OPT";
+exec $command;
+EOF
+ } else {
+ $script .= <<EOF;
+exec $command "\$OPT";
+EOF
+ }
} else {
$script .= <<EOF;
# there's no array, so just executing the command with arguments