Contents
- Information about the application
- Serial version of the code
- Clear any old variables
- Define simulation settings
- Running an ensemble of stochastic simulations
- Parallel version of the code
- Open matlabpool using default configuration
- Define simulation settings
- Running an ensemble of stochastic simulations
- Collect and plot results from parfor
- Calculating speedup
- Closing the matlabpool
Information about the application
A MATLAB application from the field of systems biology was chosen for experimental runs. The application was created using SimBiology® which extends MATLAB® with functionality for modeling, simulating, and analyzing biochemical pathways.
The application allows a user to model and simulate the dynamics of a simple gene regulation network, and understand the effect of stochasticity on the final state of the system. A ensemble of stochastic runs were performed on a gene-regulation model, and the distribution of state was studied at any given time point. Several hundred thousand simulations might need to be performed to obtain a smooth probability distribution function, requiring several days of computation on one MATLAB.
% The model used in this script was adpated from the following publication : % Kepler TB, Elston TC. Stochasticity in transcriptional regulation: % Origins, consequences and % mathematical representations. Biophys J. % 2001;81:3116–3136.
Serial version of the code
Clear any old variables
clear all
Define simulation settings
% Total number of runs numberOfRuns = 20; % Load SimBiology model sbioloadproject GeneRegulation m1 % Pre-allocate memory data = zeros(numberOfRuns, numel(m1.Species));
Running an ensemble of stochastic simulations
tic for i = 1:numberOfRuns data(i, :) = simulation; end elapsedTimeSerial = toc; display(elapsedTimeSerial)
elapsedTimeSerial = 22.0463
Parallel version of the code
Open matlabpool using default configuration
if matlabpool('size') == 0 matlabpool open 2 else warning('MATLAB:poolOpen', 'matlabpool already open') end
Starting matlabpool using the parallel configuration 'local'. Waiting for parallel job to start... Connected to a matlabpool session with 2 labs.
Define simulation settings
% Pre-allocate memory
dataParfor = zeros(numberOfRuns, numel(m1.Species));
Running an ensemble of stochastic simulations
tic % "for" changed to a "parfor" to run in parallel parfor i = 1:numberOfRuns dataParfor(i, :) = simulation; end elapsedTimeParallel = toc; display(elapsedTimeParallel)
elapsedTimeParallel = 12.5949
Collect and plot results from parfor
hist(dataParfor(:,1)) title('Histogram of protein state at t = 1000 s') xlabel('Protein State') ylabel('Frequency')
Calculating speedup
speedUp = elapsedTimeSerial/elapsedTimeParallel; fprintf('Using: %d-Workers, Speedup: %.2f\n', matlabpool('size'), speedUp);
Using: 2-Workers, Speedup: 1.75
Closing the matlabpool
if matlabpool('size') ~= 0 matlabpool close else warning('MATLAB:poolClose', 'matlabpool already closed') end
Sending a stop signal to all the labs... Waiting for parallel job to finish... Performing parallel job cleanup... Done.
