Tags:
tag this topic
create new tag
view all tags
<verbatim> % 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 isunix [junk, matlab] = system ('which matlab'); % sets the full path of matlab end; % only proceed if all other queues have already been processed if isunix [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 isunix 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); </verbatim>
E
dit
|
A
ttach
|
Watch
|
P
rint version
|
H
istory
: r2
<
r1
|
B
acklinks
|
V
iew topic
|
Ra
w
edit
|
M
ore topic actions
Topic revision: r2 - 2006-05-11
-
bleuant
Home
Site map
BETA web
Communications web
Faculty web
Imager web
LCI web
Main web
SPL web
Sandbox web
TWiki web
TestCases web
LCI Web
Create New Topic
Index
Search
Changes
Notifications
RSS Feed
Statistics
Preferences
P
View
Raw View
Print version
Find backlinks
History
More topic actions
Edit
Raw edit
Attach file or image
Edit topic preference settings
Set new parent
More topic actions
Account
Log In
Register User
E
dit
A
ttach
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback