Diferencia entre revisiones de «MATLAB Compilación»

De NLHPC
Sin resumen de edición
 
(No se muestran 2 ediciones intermedias de 2 usuarios)
Línea 21: Línea 21:
#!/bin/bash
#!/bin/bash
#SBATCH -J ejemplo
#SBATCH -J ejemplo
#SBATCH -p slims
#SBATCH -p general
#SBATCH -n 1
#SBATCH -n 1
#SBATCH --ntasks-per-node=1
#SBATCH --ntasks-per-node=1
#SBATCH --mem-per-cpu=2300
#SBATCH --mem-per-cpu=4363
#SBATCH --mail-user=usuario@correo.cl
#SBATCH --mail-user=usuario@correo.cl   #RECUERDA INDICAR TU CORREO!
#SBATCH --mail-type=ALL
#SBATCH --mail-type=ALL
#SBATCH -o %j_%x.out
#SBATCH -o %j_%x.out
Línea 40: Línea 40:
#!/bin/bash
#!/bin/bash
#SBATCH -J ejemplo
#SBATCH -J ejemplo
#SBATCH -p slims
#SBATCH -p general
#SBATCH -n 4
#SBATCH -n 4
#SBATCH --ntasks-per-node=4
#SBATCH --ntasks-per-node=4
#SBATCH --mem-per-cpu=2300
#SBATCH --mem-per-cpu=4363
#SBATCH --mail-user=usuario@correo.cl
#SBATCH --mail-user=usuario@correo.cl   #RECUERDA INDICAR TU CORREO!
#SBATCH --mail-type=ALL
#SBATCH --mail-type=ALL
#SBATCH -o %j_%x.out
#SBATCH -o %j_%x.out
Línea 59: Línea 59:
== Referencias ==
== Referencias ==


* MATLAB Compiler™
* [https://mathworks.com/products/compiler.html MATLAB Compiler™]
* Compile MATLAB functions for deployment
* [https://mathworks.com/help/compiler/mcc.html Compile MATLAB functions for deployment]

Revisión actual - 13:45 17 jul 2025

Beneficios

Al usar el Toolbox Compiler, es posible crear una aplicación standalone que no hace uso de licencias de MATLAB, ni de sus toolbox. Además esta puede ejecutarse en otro ambiente que no tenga instalado MATLAB, solo se necesita instalar el MATLAB Runtime, que se puede obtener de forma gratuita.

¿Como compilar?

Usaremos el siguiente código de ejemplo que utiliza la función parfor del Toolbox Distrib Computing de MATLAB

pc = parcluster();
pc.JobStorageLocation = strcat('/tmp/', getenv('SLURM_JOB_ID'), '/lcj/');
parpool(pc, str2num(getenv('SLURM_CPUS_ON_NODE')))

clear A
parfor i = 1:30
    A(i) = i;
end

A

Script SBATCH indicando que toolbox vamos a ocupar, ya que al compilar se hace uso de una licencia por cada toolbox, si ejecutamos directamente en la consola el comando mcc, este podría fallar si otro usuario esta ocupando la licencia.

#!/bin/bash
#SBATCH -J ejemplo
#SBATCH -p general
#SBATCH -n 1
#SBATCH --ntasks-per-node=1
#SBATCH --mem-per-cpu=4363
#SBATCH --mail-user=usuario@correo.cl   #RECUERDA INDICAR TU CORREO!
#SBATCH --mail-type=ALL
#SBATCH -o %j_%x.out
#SBATCH -e %j_%x.err
#SBATCH --license=matlab,matlab-compiler,matlab-distrib_computing # indico licencias a usar

module load MATLAB/2017a

mcc -m ejemplo.m

Ahora para enviar el trabajo al cluster, usamos el siguiente script, solo necesitamos cargar el RUNTIME de MATLAB

#!/bin/bash
#SBATCH -J ejemplo
#SBATCH -p general
#SBATCH -n 4
#SBATCH --ntasks-per-node=4
#SBATCH --mem-per-cpu=4363
#SBATCH --mail-user=usuario@correo.cl   #RECUERDA INDICAR TU CORREO!
#SBATCH --mail-type=ALL
#SBATCH -o %j_%x.out
#SBATCH -e %j_%x.err

module load MCR/2017a

mkdir -p /tmp/${SLURM_JOB_ID}/{lcj,mcr} # creo directorio temporal para archivos cache 
export MCR_CACHE_ROOT=/tmp/${SLURM_JOB_ID}/mcr # cambio a un directorio local el cache

./ejemplo

Referencias