Tags:
create new tag
view all tags
% 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);
Edit | Attach | Watch | Print version | History: r2 < r1 | Backlinks | Raw View |  Raw edit | More topic actions
Topic revision: r2 - 2006-05-11 - bleuant
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback