### Alternative to **dfeval**

This page demonstrates an effective alternative to the MATLAB Parallel Computing Toolbox’s `dfeval`

method for distributed parallel computing. Distributed parallel computing, or task-parallel computing, is a special type of parallel computing in which the tasks are independent of each other and hence can be processed individually. The alternative method is described in the multiple_matlab_tasks webpage. Its advantages are: 1) no learning of MATLAB PCT is required; 2) No PCT or worker licenses are required. Included below are the specifics of applying that to the example of solving multiple linear algebraic systems.

There are three scripts required to accomplish the goal:

- The first is a matlab function
`myfunc`

that solves a linear system`function myfunc(M, C, i) % Solves a linear system of Ax = b % Multiple systems are solved in parallel; each on a separate worker. % Companion scripts used: submitmjobs and run_matlab_job % This demonstrates the use of SCV's parallel method in place of % MATLAB Parallel Computing Toolbox's dfeval [A, x, b] = linearSystem(M, C, i) % compute coefficient matrices y = Ab % solves Ay = b; y should equal x`

- Next, a
`run_matlab_job`

shell script is needed to run the`myfunc`

m-file defined above`#!/bin/csh # this script is a companion script for submitmjobs for MATLAB apps unsetenv DISPLAY @ rank = $MATLAB_RANK @ size = $MATLAB_N # IMPORTANT: DONOT indent any of the below statements matlab -nojvm >! myoutput_$rank << MATLAB_ENV % The below works like a script m-file between MATLAB_ENVs i = $rank + 1 % define index i n = $size; % matrix size M = rand(n); % n x n random number matrix C = ones(n, 1); % define array c myfunc(M, C, i) % how to handle a function m-file exit % don't forget to exit MATLAB_ENV`

- Finally, a
`submitmjobs`

shell script is responsible for submitting jobs to the batch queue`#!/bin/csh # #Usage: submitmjobs ntasks batch_script "OGS options such as wallclock limit" # ntasks -- the number of tasks # batch_script -- batch script, see run_matlab_job for MATLAB app # The OPTIONAL input (in red) must be valid OGS batch parameters. # Example: To submit 4 tasks with run_matlab_job and 9-hour wallclock limit # scc1% submitmjobs 4 run_matlab_job "-l h_rt=09:00:00" # # The Open Grid Scheduler batch preserves the current dir in batch. # A different dir may also be used # cd my_dir @ ntasks = $1 set batch_script = $2 set options = "$3" @ size = 3 @ rank = 0 while ($rank < $ntasks) setenv MATLAB_RANK $rank setenv MATLAB_N $size qsub $options -V $batch_script @ rank++ end`

- Example.
`scc1% submitmjobs 4 run_matlab_job Your job 62446 ("run_matlab_job") has been submitted Your job 62447 ("run_matlab_job") has been submitted Your job 62448 ("run_matlab_job") has been submitted Your job 62449 ("run_matlab_job") has been submitted`

The four independent tasks are submitted as four single processor jobs. The output, as specified in

`run_matlab_job`

, go to`myoutput_1, myoutput_2, myoutput_3, myoutput_4`

, respectively. - The m-file
`linearSystem`

, defined in the Katana PCT page, is included below for your convenience`function [A, x, b] = linearSystem(M, C, i) %function [A, x, b] = linearSystem(M, C, i) % Returns matrices of a linear algebraic system Ax=b % M -- matrix % C -- a vector used to generate the solution % i -- number used to generate solution x; % in this example, pass in the for-loop index A = M + M'; % A is real and symmetric x = i*C; % define solution b = A * x; % Ax = b is the RHS of linear system`