X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=dqsub;h=245f11ece72bca05abcc6736ba2c37badbaa5150;hb=6ff8280b017eb99c4ce759895d460bcb76646f4c;hp=1d3dd1b801bc8d39efa013dea43ebdceea544278;hpb=056bec558a499c31f31f7f3e346d2bdac2f77f90;p=uiuc_igb_scripts.git diff --git a/dqsub b/dqsub old mode 100644 new mode 100755 index 1d3dd1b..245f11e --- a/dqsub +++ b/dqsub @@ -10,7 +10,7 @@ use warnings; use strict; use Getopt::Long; -use Pod::Usage; +# use Pod::Usage; =head1 NAME @@ -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,13 +97,14 @@ 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', 'debug|d+','help|h|?','man|m'); -pod2usage() if $options{help}; -pod2usage({verbose=>2}) if $options{man}; +# pod2usage() if $options{help}; +# pod2usage({verbose=>2}) if $options{man}; $DEBUG = $options{debug}; @@ -121,13 +123,14 @@ if ($options{interactive} and @ARGV) { push @USAGE_ERRORS,"Don't provide commands when you're asking for an interactive shell"; } -pod2usage(join("\n",@USAGE_ERRORS)) if @USAGE_ERRORS; +# pod2usage(join("\n",@USAGE_ERRORS)) if @USAGE_ERRORS; +print STDERR join("\n",@USAGE_ERRORS) and exit 1 if @USAGE_ERRORS; # OK. Generate the options to qsub which we'll be using my @qsub_options = generate_qsub_options(\%options); if ($options{interactive}) { - print STDERR 'running: qsub '.join(' ',@qsub_options) if $DEBUG: + print STDERR 'running: qsub '.join(' ',@qsub_options) if $DEBUG; exec('qsub',@qsub_options); } else { my @array = (); @@ -135,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)); } @@ -157,9 +163,13 @@ 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}) { + push @qo,'-I'; + } + return @qo; } sub read_array_options{ @@ -169,7 +179,7 @@ sub read_array_options{ $fh = IO::File->new(defined $options->{array_from}) or die "Unable to open $options->{array_from} for reading: $!"; } - my @arrah; + my @array; for (<$fh>) { chomp; push @array,$_; @@ -197,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 .= <{array} eq 'chdir') { + $script .= <