O Cluster é formado por 72 máquinas (nós de execução), cada uma com a seguinte especificação:
O objetivo dos módulos é carregar as variáveis de ambiente e a inclusão no path dos programas de forma modular. Para uma lista completa dos módulos disponíveis execute:
ls /hpc/modulos/bash ls /hpc/modulos/csh
source /hpc/modulos/bash/modulo_desejado ou . /hpc/modulos/bash/modulo_desejado
Indiponível no momento
Para carregar um módulo automaticamente ao se logar inclua no arquivo de inicialização do shell:
o comando:
source /hpc/modulos/bash/modulo_desejado ou . /hpc/modulos/bash/modulo_desejado
Exemplo
source /hpc/modulos/bash/mvapich1-gcc.sh
OBS.: Caso o modulo não seja executado através do arquivo de inicialização do shell, este deve ser executado antes da submissão de jobs para o SGE.
As opções de mpi no linux são mvapich1, mvapich2 e openmpi. Para colocar os executávies (mpicc, mpif77, etc) no path execute um dos comandos abaixo.
MPI utilizando compiladores gnu
MPI utilizando compiladores intel
O gerenciador de filas utilizado é o Sun Grid Engine (SGE). Todos os jobs devem ser submetidos através do SGE.
As filas de execução do SGE são:
| 1 slot = 1 core |
O ambiente paralelo deverá ser especificado em toda submissão de job paralelo seja ele MPI, OpenMP ou thread. A tabela a seguir descreve a forma de distribuição dos processos nos nós do cluster.
| Parallel Environment (PE) | Processos por máquina | Método de Paralelismo |
| mpi | Dinâmico | MPI |
| mpi1 | 1 | MPI |
| mpi2 | 2 | MPI |
| mpi3 | 3 | MPI |
| mpi4 | 4 | MPI |
| mpi5 | 5 | MPI |
| mpi6 | 6 | MPI |
| mpi7 | 7 | MPI |
| mpi8 | 8 | MPI |
| mpit2 | 2 | MPI-multithreaded |
| mpit3 | 3 | MPI-multithreaded |
| mpit4 | 4 | MPI-multithreaded |
| mpit5 | 5 | MPI-multithreaded |
| mpit6 | 6 | MPI-multithreaded |
| mpit7 | 7 | MPI-multithreaded |
| mpit8 | 8 | MPI-multithreaded |
| threads | até 8 em 1 máquina | OpenMP e Thread |
No parallel environment mpi, começando pelo nó mais adequado (escolhido pelo SGE), todos slots disponíveis serão alocados. Os slots dos nós subsequentes serão alocados, da mesma forma, até se completar a requisição de slots do job.
Este é o parallel environment mais flexível pois independe do número de slots livres nos nós individualmente, contanto que o somatório de slots livres da fila satisfaça o job.
No script do submissão o PE é escolhido através do parâmetro:
| #$ -pe nome_do_pe NP |
Exemplo:
| #$ -pe mpi2 8 |
Os 8 processos MPI serão distribuídos de forma que cada nó execute 2 processos. Nesse caso serão utilizados 4 nós.
ATENÇÃO: Não é possível dividir o job paralelo em partes desiguais (exceto com o PE mpi).
Exemplo:
| #$ -pe mpi2 9 |
Nos scripts (jobs em batch) os parâmetros do sge devem ser precedidos por #$ como será visto mais adiante.
Os scripts não precisam ser executáveis.
Script Geral
#$ -S /bin/bash #$ -q nome_da_fila ./programa parametros_do_programaExemplo:
#$ -S /bin/bash #$ -q linux.q ./flops
qsub rodar.sh
Script Geral
#$ -S /bin/bash #$ -q nome_da_fila matlab -nodisplay -singleCompThread -r scriptmatlab ou matlab -nodisplay -singleCompThread < scriptmatlab.qualquer_extensaoAo utilizar o parâmetro do matlab -r, o arquivo que contém os comandos do matlab scriptmatlab deve ter a extensão .m porém deve ser chamado sem a extensão .m no script de submissão.
Exemplo 1:
Arquivo que contém comandos do matlab → scriptmatlab.m
Script rodar.sh
#$ -S /bin/bash #$ -q linux.q matlab -singleCompThread -nodisplay -r scriptmatlab
qsub rodar.sh
Exemplo 2:
Arquivo que contém comandos do matlab → scriptmatlab.exe
Script rodar.sh
#$ -S /bin/bash #$ -q linux.q matlab -nodisplay -singleCompThread < scriptmatlab.exe
qsub rodar.sh
Consulte a tabela de pe's no ítem 6
Script Geral
#$ -S /bin/bash #$ -q nome_da_fila #$ -pe nome_do_pe numero_de_processadores # MVAPICH1 e MVAPICH2 mpirun_rsh -rsh -np numero_de_processadores -hostfile $TMPDIR/hostfile programa \ parametros_do_programa # OPENMPI mpirun -np numero_de_processadores -hostfile $TMPDIR/hostfile programa \ parametros_do_programa
Exemplo 1:
Script rodarmpi.sh#$ -S /bin/bash #$ -q linux.q #$ -pe mpi 8 # MVAPICH1 e MVAPICH2 mpirun_rsh -rsh -np 8 -hostfile $TMPDIR/hostfile programa
qsub rodarmpi.sh
Exemplo 2:
#$ -S /bin/bash #$ -pe mpi8 8 # OPENMPI mpirun -np 8 -hostfile $TMPDIR/hostfile programa
qsub rodarmpi.sh
Consulte a tabela de pe's no ítem 6
Script Geral
#$ -S /bin/bash #$ -q nome_da_fila #$ -pe nome_do_pe numero_de_processadores export OMP_NUM_THREADS=numero_de_threads # MVAPICH1 export VIADEV_USE_AFFINITY=0 # MVAPICH2 export MV2_ENABLE_AFFINITY=0 # MVAPICH1 e MVAPICH2 mpirun_rsh -rsh -np numero_de_maquinas -hostfile $TMPDIR/hostfile programa \ parametros_do_programa # OPENMPI mpirun -np numero_de_maquinas -hostfile $TMPDIR/hostfile programa \ parametros_do_programa
Exemplo 1:
Número de threads que cada mpi abrirá = 4
Número de máquinas = 8
Número total de processadores = 4 * 8 = 32
Script rodarmpi.sh
#$ -S /bin/bash #$ -q linux.q #$ -pe mpit4 32 export OMP_NUM_THREADS=4 # MVAPICH1 export VIADEV_USE_AFFINITY=0 # MVAPICH2 export MV2_ENABLE_AFFINITY=0 # MVAPICH1 e MVAPICH2 mpirun_rsh -rsh -np 8 -hostfile $TMPDIR/hostfile programa
qsub rodarmpi.sh
Exemplo 2:
Número de threads que cada mpi abrirá = 2
Número de máquinas = 32
Número total de processadores = 2 * 32 = 64
#$ -S /bin/bash #$ -q linux.q #$ -pe mpit2 64 export OMP_NUM_THREADS=2 # OPENMPI mpirun -np 32 -hostfile $TMPDIR/hostfile programa
qsub rodarmpi.sh
O número máximo de threads deve ser 8
Script Geral
#$ -S /bin/bash #$ -q nome_da_fila #$ -pe threads numero_de_processadores ./programa.exe parametros_do_programa
Exemplo
Script rodarthread.sh#$ -S /bin/bash #$ -q linux.q #$ -pe threads 4 ./programa.exe
qsub rodarthread.sh
O número máximo de threads deve ser 8
Script Geral
#$ -S /bin/bash #$ -q nome_da_fila #$ -pe threads numero_de_processadores export OMP_NUM_THREADS=numero_de_processadores ./programa.exe parametros_do_programa
Exemplo:
Script openmp.sh#$ -S /bin/bash #$ -q linux.q #$ -pe threads 8 export OMP_NUM_THREADS=8 ./programa.exe
qsub openmp.sh
Por padrão o Matlab irá abrir 8 threads para a execução de tarefas sem que seja necessária nenhuma alteração no código do usuário. Este tipo de paralelismo é utilizado para acelerar os cálculos em algumas funções como sin e log, e cálculos que utilizam a biblioteca Basic Linear Algebra Subroutines (BLAS), como por exemplo multiplicação de matrizes.
Para utilizar 8 threads nada precisará ser alterado no código. Para utilizar um número menor de threads é obrigatório que o primeiro comando do código seja:
maxNumCompThreads(N)
onde N e o número de threads desejadas (de 2 a 7)
Script Geral
#$ -S /bin/bash #$ -q nome_da_fila #$ -pe threads numero_de_processadores matlab -nodisplay -r scriptmatlab ou matlab -nodisplay < scriptmatlab.qualquer_extensao
Ao utilizar o parâmetro do matlab -r, o arquivo que contém os comandos do matlab scriptmatlab deve ter a extensão .m porém deve ser chamado sem a extensão .m no script de submissão.
Exemplo 1:
Arquivo que contém comandos do matlab → scriptmatlab.m
Script rodar.sh
#$ -S /bin/bash #$ -q linux.q #$ -pe threads 8 matlab -nodisplay -r scriptmatlab
qsub rodar.sh
Exemplo 2:
Arquivo que contém comandos do matlab → scriptmatlab.exe
Primeiro comando do scriptmatlab.exe → maxNumCompThreads(4)
Script rodar.sh
#$ -S /bin/bash #$ -q linux.q #$ -pe threads 4 matlab -nodisplay < scriptmatlab.exe
qsub rodar.sh
Para detalhes de programação verifique o manual do Matlab Parallel Toolkit.
O número máximo de workers permitidos é 8.
Script Geral
#$ -S /bin/bash #$ -q nome_da_fila #$ -pe threads numero_de_processadores matlab -nodisplay -r scriptmatlab ou matlab -nodisplay < scriptmatlab.qualquer_extensao
Ao utilizar o parâmetro do matlab -r, o arquivo que contém os comandos do matlab scriptmatlab deve ter a extensão .m porém deve ser chamado sem a extensão .m no script de submissão.
Exemplo 1:
Arquivo que contém comandos do matlab → scriptmatlab.m
Script rodar.sh
#$ -S /bin/bash #$ -q linux.q #$ -pe threads 4 matlab -nodisplay -r scriptmatlab
qsub rodar.sh
Exemplo 2:
Arquivo que contém comandos do matlab → scriptmatlab.exe
Script rodar.sh
#$ -S /bin/bash #$ -q linux.q #$ -pe threads 8 matlab -nodisplay < scriptmatlab.exe
qsub rodar.sh
Comando: qstat [parametros]
Comando: qhost [parametros]
Comando: qdel [parametros]
Para compilar programas que irão chamar diretamente as bibliotecas do MPI é preciso incluir algumas bibliotecas Infiniband que se encontram no diretório /usr/lib64:
Para maiores detalhes consulte os manuais dos comandos:
LNCC © Equipe de Suporte Técnico