Laboratorio Nacional de Computacao Cientifica

Cluster Sunhpc

1. Características do cluster

O Cluster é formado por 72 máquinas (nós de execução), cada uma com a seguinte especificação:

Sun Blade X6250

voltar

2. Informações sobre acesso e submissão

  1. A submissão dos jobs deve ser feita através do gerenciador de filas Sun Grid Engine (SGE)
  2. O número máximo de processadores por usuário é 64
  3. O filesystem dos usuários não tem backup

voltar

3. Módulos de Ambiente

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

Comandos

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.

voltar

4. Selecionar o MPI

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

voltar

5. Gerenciador de filas

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

voltar

6. Ambientes paralelos MPI/OpenMP/Threads

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áquinaMétodo de Paralelismo
mpiDinâmicoMPI
mpi11MPI
mpi22MPI
mpi33MPI
mpi44MPI
mpi55MPI
mpi66MPI
mpi77MPI
mpi88MPI
mpit22MPI-multithreaded
mpit33MPI-multithreaded
mpit44MPI-multithreaded
mpit55MPI-multithreaded
mpit66MPI-multithreaded
mpit77MPI-multithreaded
mpit88MPI-multithreaded
threadsaté 8 em 1 máquinaOpenMP 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

voltar

7. Submeter Jobs

  1. Criar um script de sumissão
  2. Submeter o script com o comando qsub
  3. Verificar os arquivos de saída

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.

voltar

7.1. Jobs seriais

Script Geral

#$ -S  /bin/bash
#$ -q  nome_da_fila

./programa  parametros_do_programa
Exemplo:

Script rodar.sh
#$ -S  /bin/bash
#$ -q  linux.q

./flops
qsub rodar.sh

voltar

7.2. Jobs seriais (matlab)

Script Geral

#$ -S  /bin/bash
#$ -q  nome_da_fila

matlab  -nodisplay  -singleCompThread  -r  scriptmatlab
ou
matlab  -nodisplay  -singleCompThread  <  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

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

voltar

7.3. Jobs paralelos (MPI)

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

voltar

7.4. Jobs paralelos (MPI-multithreaded)

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

voltar

7.5. Jobs paralelos (threads)

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

voltar

7.6. Jobs paralelos (openmp)

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

voltar

7.7. Jobs paralelos implícitos (matlab)

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

voltar

7.8. Jobs paralelos explícitos (matlab)

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

voltar

7.9. Jobs paralelos distribuídos (matlab)

Indisponível

voltar

8. Verificar status dos jobs

Comando: qstat [parametros]

Comando: qhost [parametros]

  1. qstat
  2. qstat -f (exibe sumário de informações de todas as filas)
  3. qstat -j (exibe informações de erro para job com problema)
  4. qstat -j jobid (exibe informções detalhadas de um determinado job)
  5. qhost -j ( exibe os nós que estão executando os jobs)

voltar

9. Remover jobs da fila ou em execução

Comando: qdel [parametros]

  1. qdel 145 (remove o jobid 145 da fila ou em execução)
  2. qdel 178 179 180 (remove os jobid 178 179 180 da fila ou em execução)
  3. qdel -u joao (remove todos os jobs do usuário joao da fila ou em execução)

voltar

10. Utilizando bibliotecas MPI (sem utilizar os scripts mpicc e mpif90)

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:

voltar

11. Comentários Finais

Para maiores detalhes consulte os manuais dos comandos:

voltar

LNCC © Equipe de Suporte Técnico