MPI

Após a criação da conta no CENAPAD-UFC, o usuário encontra em seu diretório, a pasta exemplo/PI. Nela estão os arquivos que usaremos como exemplo para descrever o processo de submissão de jobs MPI.

Compilação

Dentro da pasta exemplo/PI, está o arquivo pi.c. Esse arquivo é um programa simples escrito em C com chamadas MPI para calcular o valor do número Pi através de métodos de Monte Carlo. Para compilar o arquivo, o comando é o seguinte:

[NomeDeUsuário@padufc0 PI]$ mpicc pi.c -o pi 

Temos agora o binário do arquivo pi.c pronto para execução.

Script de Submissão

Para execução de jobs no cluster, eles devem ser submetidos ao gerenciador de filas SLURM. Existem dois comandos para isso: srun e sbatch. O srun é o mais simples funciona de maneira semelhante ao mpirun. Já o sbatch permite o uso scripts com a descrição dos jobs. Optamos em utilizar o sbatch porque ele facilita a gerência de jobs em execução por parte do usuário. Para submeter um job utilizando o sbatch, precisamos escrever antes um script. O arquivo pi.srm é um exemplo de script para submissão da aplicação “pi”. Abaixo vemos o arquivo pi.srm.

#!/bin/bash
#SBATCH -J MPI-PI          # Nome do job
#SBATCH -p medium          # Fila (medium/long/gpu)
#SBATCH -n 20              # Numero de processos MPI

cd $SLURM_SUBMIT_DIR       # Diretório do qual o sbatch foi chamado

echo "-----------------------------------------"
ulimit -s unlimited
ulimit -a
echo "-----------------------------------------"
srun --resv-ports ./pi
echo "-----------------------------------------"
date
  • #SBATCH -J MPI-PI – Determina o nome do job, neste caso é MPI-PI;
  • #SBATCH -p medium – Determina em qual fila (partição) o job será executado, neste caso a medium;
  • #SBATCH –n 20 – Determina o número de processos, neste caso 20.

Submissão

Para submeter um job a fila do SLURM execute o comando abaixo. A saída Submitted batch job indica o número de identificação do job (JOBID), neste exemplo 700.

[NomeDeUsuário@padufc0 PI]$ sbatch pi.srm
Submitted batch job 700

Para visualizar o andamento do job podemos executar o comando squeue que retorna todos os job da(s) sua(s) fila(s) de execução.

[NomeDeUsuário@padufc0 PI]$ squeue
JOBID PARTITION   NAME          USER ST TIME NODES NODELIST(REASON)
  700    medium MPI-PI NomeDeUsuário  R 0:18     4    padufc[26-29]
  • Se tivermos uma linha com JOBID igual ao identificador recebido no momento da execução (700 no nosso exemplo), então o job já está na fila do SLURM.
  • Se a coluna ST tiver o valor R, então o job já está em execução. Caso o valor de ST for PD, então o job está esperando a liberação de recursos para executar.

Para cancelar o job, temos o comando scancel que recebe com parâmetro o identificador do job (JOBID).

[NomeDeUsuário@padufc0 PI]$ scancel 700

Resultado/Saída

A saída padrão do job é escrita no arquivo slurm-ID.out, no qual ID representa o identificador do job. No exemplo, a saída do programa “pi” está no arquivo slurm-700.out.