Memória Distribuída
No modelo de paralelização com memória distribuída, serão criados vários processos para a execução paralela, mas ao contrátio do modelo de memória compartilhada, esses processos estarão em servidores (computadores) distintos. Dessa forma, é possível usar o recurso computacional de mais de um servidor ao mesmo tempo. Como cada processo só enxerga diretamente a memória do computador em que ele está executando, esse modelo é chamado de memória distribuída. As informações entre os processo são feitas através de troca de mensagens.
Para funcionar dessa forma, o programa tem que ser expicitamente desenvolvido com essa capacidade. Geralmente isso é feito usando uma biblioteca MPI. Existem algumas implementações desse padrão, sendo que o cluster do GridUnesp dispõe do Intel MPI (recomendado) e do OpenMPI.
Nota
É possível combinar paralelização por memória compartilhada e memória distribuída simultaneamente.
Compilando
Vamos usar como exemplo o arquivo mpi_hello.c abaixo.
// required MPI include file
#include "mpi.h"
#include <stdio.h>
Int main(int argc, char *argv[])
{
int numtasks, rank, len, rc;
char hostname[MPI_MAX_PROCESSOR_NAME];
// initialize MPI
MPI_Init(&argc,&argv);
// get number of tasks
MPI_Comm_size(MPI_COMM_WORLD,&numtasks);
// get my rank
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
// this one is obvious
MPI_Get_processor_name(hostname, &len);
printf ("Number of tasks= %d My rank= %d Running on %s\n", numtasks,rank,hostname);
// done with MPI
MPI_Finalize();
}
Para compilar, basta executar os comandos:
module load intel/compilers
module load intel/mpi
mpiicc mpi_hello.c -o mpi_hello
Script de execução
No Slurm é possível especificar o número de processos (tasks) que se deseja alocar. Isso é feito com a opção -n
. Mais de um processo pode ser alocado no mesmo servidor. Para um controle mais preciso, utilize -N
(não recomendado) para escolher em quantos nós deseja espalhar os processos.
#!/bin/bash
#SBATCH -n 16
module load intel/compilers
module load intel/mpi
srun -n 16 ./mpi_hello
A seção Aplicações instaladas apresenta vários exemplos de scripts de submissão usando aplicações já instaladas no cluster e preparados para processar com memória distribuída.