MATLAB

Descrição

De acordo com a Documentação do MATLAB, MATLAB é um ambiente de computação numérica e linguagem de programação desenvolvido pela MathWorks. Permite análise de dados, desenvolvimento de algoritmos, criação de modelos e aplicações em diversas áreas da engenharia e ciências.

Versões Disponíveis

  • matlab/R2016b-9.1

  • matlab/R2019b (default)

Submissão de Jobs Seriais

submit_matlab_serial.sh
#!/bin/bash
#SBATCH -J matlab_serial
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 02:00:00
#SBATCH --mem=8G

export INPUT="script.m"
export OUTPUT="output.log"

module load matlab/R2019b

job-nanny matlab -batch "script"

Submissão de Jobs com Arquivo .m

submit_matlab_file.sh
#!/bin/bash
#SBATCH -J matlab_file
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 04:00:00
#SBATCH --mem=16G

export INPUT="simulacao.m dados.mat"
export OUTPUT="resultados/"

module load matlab/R2019b

job-nanny matlab -nodisplay -nosplash -r "simulacao; exit" > simulacao.log

Submissão de Jobs com Paralelismo (Parallel Computing Toolbox)

submit_matlab_parallel.sh
#!/bin/bash
#SBATCH -J matlab_parallel
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 12:00:00
#SBATCH --mem=32G

export INPUT="parallel_script.m"
export OUTPUT="parallel_output/"

module load matlab/R2019b

# Criar script com configuração paralela
cat > run_parallel.m << EOF
% Iniciar pool de workers
pool = parpool('local', $SLURM_CPUS_PER_TASK);

% Executar script principal
parallel_script;

% Fechar pool
delete(pool);
EOF

job-nanny matlab -nodisplay -nosplash -r "run_parallel; exit"

Exemplo de Script MATLAB

simulacao.m
% Simulação de Monte Carlo
n_sim = 10000;
n_passos = 1000;

resultados = zeros(n_sim, 1);

tic;
for i = 1:n_sim
    % Gerar trajetória aleatória
    passos = randn(n_passos, 1);
    trajetoria = cumsum(passos);

    % Calcular estatística de interesse
    resultados(i) = max(trajetoria) - min(trajetoria);
end
tempo = toc;

% Estatísticas
media = mean(resultados);
desvio = std(resultados);
histograma = histogram(resultados, 50);

% Salvar resultados
save('resultados.mat', 'resultados', 'media', 'desvio', 'tempo');

% Gerar relatório
fid = fopen('relatorio.txt', 'w');
fprintf(fid, 'Simulação de Monte Carlo\n');
fprintf(fid, 'Número de simulações: %d\n', n_sim);
fprintf(fid, 'Tempo de execução: %.2f segundos\n', tempo);
fprintf(fid, 'Média: %.4f\n', media);
fprintf(fid, 'Desvio padrão: %.4f\n', desvio);
fclose(fid);

% Figura
figure('Visible', 'off');
histogram(resultados, 50);
xlabel('Valor');
ylabel('Frequência');
title('Distribuição dos resultados');
print('histograma', '-dpng');

Processamento de Imagens com Parallel Computing Toolbox

submit_matlab_image.sh
#!/bin/bash
#SBATCH -J matlab_image
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 24:00:00
#SBATCH --mem=32G

export INPUT="imagens/*.png"
export OUTPUT="resultados_imagens/"

module load matlab/R2019b

cat > process_imagens.m << EOF
% Listar arquivos
arquivos = dir('imagens/*.png');
n_arquivos = length(arquivos);

% Iniciar pool
pool = parpool('local', $SLURM_CPUS_PER_TASK);

% Processar em paralelo
parfor i = 1:n_arquivos
    nome = arquivos(i).name;
    img = imread(['imagens/' nome]);

    % Processamento
    img_gray = rgb2gray(img);
    img_filtrada = medfilt2(img_gray);
    bordas = edge(img_filtrada, 'canny');

    % Salvar resultados
    imwrite(img_filtrada, ['resultados_imagens/filtrada_' nome]);
    imwrite(bordas, ['resultados_imagens/bordas_' nome]);

    % Estatísticas
    stats(i).nome = nome;
    stats(i).media = mean(img_filtrada(:));
    stats(i).desvio = std(double(img_filtrada(:)));
end

% Salvar estatísticas
save('resultados_imagens/stats.mat', 'stats');

delete(pool);
EOF

job-nanny matlab -nodisplay -nosplash -r "process_imagens; exit"

Job Array para Múltiplos Parâmetros

submit_matlab_array.sh
#!/bin/bash
#SBATCH -J matlab_array
#SBATCH --array=1-10
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 06:00:00
#SBATCH --mem=8G

PARAM=$SLURM_ARRAY_TASK_ID
export INPUT="param_${PARAM}.m"
export OUTPUT="run_${PARAM}/"

module load matlab/R2019b

mkdir -p run_${PARAM}
cd run_${PARAM}

cat > script_${PARAM}.m << EOF
% Parâmetro específico
param = $PARAM;

% Cálculo
x = linspace(0, 10, 1000);
y = sin(param * x) .* exp(-x/10);
resultado = trapz(x, y.^2);

% Salvar
save(['resultado_${PARAM}.mat'], 'param', 'resultado');

% Relatório
fid = fopen('relatorio.txt', 'w');
fprintf(fid, 'Parâmetro: %d\n', param);
fprintf(fid, 'Resultado: %.6f\n', resultado);
fclose(fid);
EOF

job-nanny matlab -nodisplay -nosplash -r "script_${PARAM}; exit"

Utilizando Toolboxes Específicas

submit_matlab_toolbox.sh
#!/bin/bash
#SBATCH -J matlab_toolbox
#SBATCH -N 1
#SBATCH -c 4
#SBATCH -t 12:00:00
#SBATCH --mem=16G

export INPUT="machine_learning.m"
export OUTPUT="ml_results/"

module load matlab/R2019b

cat > machine_learning.m << EOF
% Carregar dados
dados = load('dados_treinamento.mat');
X = dados.X;
Y = dados.Y;

% Dividir treino/teste
cv = cvpartition(size(X,1), 'HoldOut', 0.2);
X_train = X(cv.training,:);
Y_train = Y(cv.training);
X_test = X(cv.test,:);
Y_test = Y(cv.test);

% Treinar modelo (Statistics and Machine Learning Toolbox)
modelo = fitcecoc(X_train, Y_train);

% Avaliar
Y_pred = predict(modelo, X_test);
acuracia = sum(Y_pred == Y_test) / length(Y_test);

% Matriz de confusão
cm = confusionchart(Y_test, Y_pred);
cm.Title = ['Acurácia: ' num2str(acuracia*100, '%.1f') '%%'];
exportgraphics(cm, 'confusion_matrix.png');

% Salvar modelo
save('modelo_treinado.mat', 'modelo', 'acuracia');
EOF

job-nanny matlab -nodisplay -nosplash -r "machine_learning; exit"

Compilação de Aplicações MATLAB

compile_matlab.sh
#!/bin/bash
#SBATCH -J compile_matlab
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 01:00:00
#SBATCH --mem=4G

export INPUT="meu_programa.m"
export OUTPUT="meu_programa"

module load matlab/R2019b

job-nanny matlab -nodisplay -nosplash -r "mcc -m meu_programa.m; exit"

Execução de Aplicação Compilada

run_compiled_matlab.sh
#!/bin/bash
#SBATCH -J run_compiled
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 04:00:00
#SBATCH --mem=8G

export INPUT="dados.dat"
export OUTPUT="resultados.dat"

# Não precisa carregar módulo MATLAB para executar compilado
job-nanny ./meu_programa dados.dat

Referências

Ver também