]> git.donarmstrong.com Git - uiuc_igb_scripts.git/blobdiff - dqsub
fixup array slot limit
[uiuc_igb_scripts.git] / dqsub
diff --git a/dqsub b/dqsub
index 183d351f7b4eab41731601791eb1ca3236036fe2..245f11ece72bca05abcc6736ba2c37badbaa5150 100755 (executable)
--- a/dqsub
+++ b/dqsub
@@ -26,6 +26,7 @@ dqsub [options]
    --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)
@@ -96,6 +97,7 @@ GetOptions(\%options,
            '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',
@@ -136,6 +138,9 @@ if ($options{interactive}) {
         @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));
 }
@@ -158,7 +163,7 @@ sub generate_qsub_options{
         $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}) {
@@ -202,7 +207,23 @@ sub write_qsub_script {
 # 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