MATLAB Distrib Computing

De usuarios.nlhpc.cl
Saltar a: navegación, buscar

Beneficios

Al usar este Toolbox permite ejecutar una tarea en múltiples CPU en un mismo nodo, con un máximo de 20, la ventaja es que se mejora el rendimiento de una aplicación cuando se lanza en modo paralelo.

Comparación de parfor v/s for

Usaremos el siguiente código de ejemplo que utiliza la función for v/s parfor, lanzaremos distintas tareas con diferentes parámetros para luego hacer una tabla comparativa de los resultados de los tiempos.

for

Código MATLAB para for:

N = str2num(getenv('MATLAB_N'));
M = 1000;
 
a = zeros(N,1);
tic;
for i = 1:N
    a(i) = max(abs(eig(rand(M)))); 
end
 
fprintf('\n\n for (N=%d): %f secs\n\n', N, toc);

Script para lanzar la tarea:

#!/bin/bash
#SBATCH --job-name=for_test
#SBATCH --mail-user=usuario@correo.cl
#SBATCH --mail-type=ALL
#SBATCH --output=%j_%x.out
#SBATCH --error=%j_%x.err
#SBATCH --partition=slims
#SBATCH -N 1 
#SBATCH -n 20
#SBATCH -L matlab # indico licencias a usar#SBATCH --mem=48000
 
module load MATLAB/2017a
 
export MATLAB_N=$1
 
matlab -nodisplay -nosplash -nodesktop < for.m

parfor

Código MATLAB para parfor:

pc = parcluster();
pc.JobStorageLocation = strcat('/tmp/', getenv('SLURM_JOB_ID'), '/lcj/');
parpool(pc, str2num(getenv('SLURM_CPUS_ON_NODE')));
 
N = str2num(getenv('MATLAB_N'));
M = 1000;
 
a = zeros(N,1);
tic;
parfor i = 1:N
    a(i) = max(abs(eig(rand(M)))); 
end
 
fprintf('\n\n parfor (N=%d): %f secs\n\n', N, toc);

Script para lanzar la tarea:

#!/bin/bash
#SBATCH --job-name=parfor_test
#SBATCH --mail-user=usuario@correo.cl
#SBATCH --mail-type=ALL
#SBATCH --output=%j_%x.out
#SBATCH --error=%j_%x.err
#SBATCH --partition=slims
#SBATCH -N 1 
#SBATCH -n 20
#SBATCH -L matlab,matlab-distrib_computing # indico licencias a usar#SBATCH --mem=48000
 
module load MATLAB/2017a
 
mkdir -p /tmp/${SLURM_JOB_ID}/{lcj,mcr}
export MCR_CACHE_ROOT=/tmp/${SLURM_JOB_ID}/mcr
 
export MATLAB_N=$1
 
matlab -nodisplay -nosplash -nodesktop < parfor.m


para encolar las diferentes tareas

for i in 400 600 800 1000 1200
     do sbatch script.sh $i
done

Tabla Comparativa

N parfor for
400 37 374
600 42 557
800 54 711
1000 66 900
1200 88 1479

Los valores del tiempo de ejecución están expresados en segundos, para medir se ocupo la función tic/toc. En el caso de un vector de 400 elementos, con el uso de parfor presenta una mejora del 90% en tiempo respecto al uso de for.

Referencias