Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
Deleted: | ||||||||
< < | -- Main.bleuant - 10 May 2006 | |||||||
% File: "westgrid.m" % Author: Albert Law [bleuant@cim.mcgill.ca] (McGill University, Montreal, Quebec, Canada) | ||||||||
Line: 51 to 47 | ||||||||
if ~isdir(script_dir) mkdir(script_dir); % make the script directory in sace it doesn't exist end; | ||||||||
Changed: | ||||||||
< < | if strcmp(filesep, '/') % this part only works in NIX-like environments) | |||||||
> > | if isunix | |||||||
[junk, matlab] = system ('which matlab'); % sets the full path of matlab end; % only proceed if all other queues have already been processed | ||||||||
Changed: | ||||||||
< < | if strcmp(filesep, '/') % this part only works in NIX-like environments) | |||||||
> > | if isunix | |||||||
[s, out] = system (['qstat | grep ', username]); while (sum(size(out)) > 0) disp(fix(clock)); | ||||||||
Line: 120 to 116 | ||||||||
fclose(temp_fid); % submit the PBS file to the PBS queue | ||||||||
Changed: | ||||||||
< < | if strcmp(filesep, '/') % this part only works in NIX-like environments) | |||||||
> > | if isunix | |||||||
system(['qsub -e ', pwd, filesep, script_dir, filesep, ' -o ', pwd, filesep, script_dir, filesep, ' ', script_dir, filesep, filename, '-', num2str(iterFOEF), '.pbs']); end; |
Line: 1 to 1 | ||||||||
---|---|---|---|---|---|---|---|---|
Added: | ||||||||
> > |
% File: "westgrid.m" % Author: Albert Law [bleuant@cim.mcgill.ca] (McGill University, Montreal, Quebec, Canada) % Description: This is written for any linux cluster using PBS queueing % execution. It reads in an M-file, writes a bunch of M-files that % replicate that initial M-file (such that the first 30 lines are exact % replicates but every line afterwards is only one line of test case % execution), writes a PBS file for each new replicant M-file, and will % automatically suhbmit each PBS file for the queue. % Note #1: Must only be executed on the head node. % Note #2: The entire point is to present ALL the test cases in a serial % manner for the cluster to process. So each test case must be % self-contained. % Note #3: Not well documented as this was done as a fastish hack. % Note #4: Beware the directory coding. It gets a little confusing. % Note #5: This script will pause until the system has none of your % processs in the queue. % Note #6: Has been successfully used for CLUMEQ [www.clumeq.mcgill.ca] and % WESTGRID GLACIER [www.westgrid.ca] % Note #7: The first 30 lines of the replicated M-file must not be longer % than 256 cloumns (can be changed). Change these settings on the line % "headerM = repmat(' ', LINES, CHARACTER_WIDTH);" % Note #8: The STDOUT and STDERR have been redirected to the directory % "westgrid" or "clumeq" or "other" depending on which system you are % using. It is the same directory where all the fabricated scripts will % be. % the following are a bunch of parameters one must set for proper % functionality of the M-file systemchoice = 'westgrid'; % westgrid or clumeq filename = 'batch'; % base filename (ie: no file extension) of the file you wish to replicate username = 'albert'; % the user name on the system currently being used testfunction = 'demoEMS'; % the matlab function one used to execute a test case (the script will look for this test function) % no need to set the following (done automatically) if strcmp(systemchoice, 'westgrid') script_dir = 'westgrid'; % name of directory where all your M-files will be created note: "cd .." will be inserted to the replicant scripts to "realign" the directory structure expected elseif strcmp(systemchoice, 'clumeq') script_dir = 'clumeq'; % name of directory where all your M-files will be created note: "cd .." will be inserted to the replicant scripts to "realign" the directory structure expected else % some other system (not important as it is just a directory name that may remain oblivious to the user) script_dir = 'other'; % name of directory where all your M-files will be created note: "cd .." will be inserted to the replicant scripts to "realign" the directory structure expected end; if ~isdir(script_dir) mkdir(script_dir); % make the script directory in sace it doesn't exist end; if strcmp(filesep, '/') % this part only works in NIX-like environments) [junk, matlab] = system ('which matlab'); % sets the full path of matlab end; % only proceed if all other queues have already been processed if strcmp(filesep, '/') % this part only works in NIX-like environments) [s, out] = system (['qstat | grep ', username]); while (sum(size(out)) > 0) disp(fix(clock)); system('sleep 600'); [s, out] = system (['qstat | grep ', username]); end; end; fid = fopen([filename, '.m']); % open "filename.m" for replication % set the header information for the PBS file headerPBS1 = '#PBS -l ncpus=1'; % not strictly needed headerPBS2 = '#PBS -V'; % not strictly needed headerPBS3 = ['cd ', pwd, filesep, script_dir]; headerPBS4 = strcat (matlab, ' < '); % all headerPBS1234 must have the same length maxsize = max([size(headerPBS1,2), size(headerPBS2,2), size(headerPBS3,2), size(headerPBS4,2)]); headerPBS1 = [headerPBS1, repmat(' ', 1, (maxsize - size(headerPBS1,2)))]; headerPBS2 = [headerPBS2, repmat(' ', 1, (maxsize - size(headerPBS2,2)))]; headerPBS3 = [headerPBS3, repmat(' ', 1, (maxsize - size(headerPBS3,2)))]; headerPBS4 = [headerPBS4, repmat(' ', 1, (maxsize - size(headerPBS4,2)))]; %headerPBS = [headerPBS1; headerPBS2; headerPBS3; headerPBS4]; % this is the PBS header... headerPBS = [headerPBS3; headerPBS4]; % this is the PBS header... % read the first 30-lines of "filename.m" for M-file header information headerM = repmat(' ', 30, 256); iter = 1; while ((feof(fid) ~= 1) && (iter <= 30)) temp = fgets(fid); headerM(iter,1:size(temp,2)) = temp; iter = iter + 1; end; iterFOEF = 1; while (feof(fid) ~= 1) temp = fgetl(fid); sizetestfunction = size(testfunction,2); if ((max(size(temp)) >= sizetestfunction) & (strcmpi (temp(1:sizetestfunction), testfunction))) % find the lines that contain a test function command % write the M-file temp_fid = fopen ([script_dir, filesep, filename, '_', num2str(iterFOEF), '.m'], 'w'); fprintf(temp_fid, '%s\n', 'cd ..'); % to fix the directory call for the other functions iterH = 1; while (iterH <= size(headerM,1)) fprintf(temp_fid, '%s\n', headerM(iterH,:)); iterH = iterH + 1; end; fprintf(temp_fid, '\n%s\n', temp); fclose(temp_fid); % write the PBS file temp_fid = fopen ([script_dir, filesep, filename, '-', num2str(iterFOEF), '.pbs'], 'w'); iterH = 1; while (iterH < size(headerPBS,1)) fprintf(temp_fid, '%s\n', headerPBS(iterH,:)); iterH = iterH + 1; end; fprintf(temp_fid, '%s\n', strcat(headerPBS(iterH,:), [' ', filename, '_', num2str(iterFOEF), '.m'])); fclose(temp_fid); % submit the PBS file to the PBS queue if strcmp(filesep, '/') % this part only works in NIX-like environments) system(['qsub -e ', pwd, filesep, script_dir, filesep, ' -o ', pwd, filesep, script_dir, filesep, ' ', script_dir, filesep, filename, '-', num2str(iterFOEF), '.pbs']); end; iterFOEF = iterFOEF + 1; end; end; fclose(fid); |