SGI Altix ICE 8400 LX
O sistema SGI Altix ICE 8400 LX instalado no CENAPAD-SP tem 40 CPU´s (240 cores) Intel Xeon Six Core 5680 de 3.33GHz, 720 GB de memória RAM e interconexão Infiniband. A capacidade de processamento teórica deste sistema é de aproximadamente 3,1 TFLOPS.
Para utilizar este recurso, observe as seguintes informações:
SGI Altix ICE 8400 LX
O sistema Altix ICE 8400 LX instalado no CENAPAD-SP tem 20 nós, interconectados através de uma rede Infiniband de alto desempenho, dispostos em 2 individual Rack Unit (iRU), cada um deles com desempenho teórico de 160 GFLOPs e com a seguinte configuração:
- 2 processadores Intel Xeon Six Core 5680 de 3.33GHz
- 36GB de memória RAM
- Nó de acesso
O nó de acesso ao sistema SGI Altix ICE é ice.cenapad.unicamp.br.
Sistema Operacional
Linux.
Compiladores e Bibliotecas
Usuários
A administração deste sistema está integrada ao ambiente do CENAPAD-SP: são mantidos os mesmos projetos e usuários do ambiente do CENAPAD-SP, com a mesma senha.
Acesso
O acesso ao sistema SGI Altix ICE deve ser feito através de um nó definido como front-end, usando o comando ssh. Para isto, uma vez conectado ao ambiente do CENAPAD-SP, o usuário deverá executar: ssh ice (utilizando o mesmo usuário e a mesma senha do CENAPAD-SP)
Diretórios HOME
Os diretórios home dos usuários do CENAPAD-SP não são compartilhados entre todos os ambientes existentes (IBM P750 e SGI Ice) devido à diferença de arquiteturas entre estes ambientes instalados no CENAPAD-SP, composto por máquinas IBM com processadores da família Power e sistema operacional AIX e máquinas SGI com processadores Intel Xeon e sistema operacional Linux.
No ambiente SGI/Ice, o espaço para diretório home dos usuários é de 32 TB. O padrão para a identificação do diretório home de um determinado usuário nas máquinas deste sistema é:
- /home/ice/proj/projeto/login
- /home/ice/teste/login
(onde login é a identificação da conta do usuário e projeto é a identificação do projeto a que a conta está vinculada);
Observação: Atualmente, ainda não é feito backup de qualquer arquivo deste ambiente, portanto os usuários serão temporariamente responsáveis pela manutenção de seus arquivos.
Área de Scratch
Existe nesse ambiente uma área scratch para gravação dos arquivos temporários gerados durante o processamento dos jobs. Essa área tem 23 TB, e deve ser referenciada como :
/workice
Espaço em disco
Além do filesystem para o diretório home dos usuários, o filesystem /usr/local também é compartilhado por todo o ambiente SGI/Ice.
Os softwares são instalados no filesystem: /usr/local.
As políticas de uso podem ser consultadas aqui
Contabilização de uso
A contabilização de uso deste sistema é feita de forma integrada à contabilização de uso de recursos do ambiente CENAPAD-SP descritas aqui
Execução de jobs
Apenas o frontend (ice) permite acesso interativo, enquanto os outros nodes são reservados para o processamento batch. O sistema gerenciador de filas, responsável pela execução de jobs, é o PBSPro
Alguns dos principais comandos do PBSPro são:
Comando | Descrição |
---|---|
qsub | para submissão de jobs |
qalter | para modificar jobs pendente |
qmove | para mover jobs |
qdel | para remoção de jobs das filas |
qhold | para alterar o estado de jobs para hold |
qorder | para reordenar jobs |
qrls | para liberar jobs em estado hold |
qselect | para selecionar jobs |
qstat | exibe o estado de filas e jobs |
tracejob | para obter o histórico de |
xpbs | interface gráfica do PBSPro |
(As informações sobre estes comandos também estão disponíveis em suas manpages)
Comando | Descrição |
---|---|
qsub jobscript | submit jobscript to PBS |
qsub -I | submit an interactive-batch job |
qsub -q queue | submit job directly to specified queue |
qstat | list information about queues and jobs |
qstat -q | list all queues on system |
qstat -Q | list queue limits for all queues |
qstat -a | list all jobs on system |
qstat -au userid | list all jobs owned by user userid (returns jobid) |
qstat -s | list all jobs with status comments |
qstat -r | list all running jobs |
qstat -f jobid | list all information known about specified job |
qstat -Qf queue | list all information known about specified queue |
qstat -B | list summary information about the PBS server |
qdel jobid | delete job jobid |
qalter jobid | modify the attributes of the job or jobs specified by jobid |
pbsnodes -a | indicates which nodes are currently up and some node characteristics. |
pbsnodes -l | indicates which nodes are currently offline |
qstat -n | to view the list nodes allocated to jobs |
qstat -ans -u {username} | this will show the nodes, jobid's of a given {username} |
Para submeter um job:
- criar um script, utilizando qualquer shell, incluindo os comandos que criam um "roteiro" a ser executado
- executar o comando qsub
Diretivas mais comuns:
#PBS -S /bin/sh
#PBS -m abe
#PBS -q par48
#PBS -N testjob
#PBS -V
#PBS -o jobout
#PBS -e joberr
#!/bin/sh
cd $PBS_O_WORKDIR
Onde:
- -S /bin/sh - indica qual shell utilizar
- -m abe - indica para enviar mail quando job a(bort) b(egin) e(nd)
- -q par48 - indica fila
- -N testjob - nome a ser associado ao job (testjob)
- -V - utilizar variáveis de ambiente (environment) setadas
- -o jobout - standard output
- -e joberr - standard error
- cd $PBS_O_WORKDIR - indica para que seja considerado o diretório a partir de onde o job está sendo submetido
Jobs paralelos
A execução de jobs paralelos, pode ser feita através da submissão de um script ou de um arquivo binário. Por exemplo, o arquivo jobpar.sh pode conter:
#PBS -q parice
#PBS -N testjob
#PBS -o jobout
#PBS -e joberr
#PBS -V
#PBS -l nodes=1:ppn=12
#!/bin/sh
cd $PBS_O_WORKDIR
echo "-----------------------------------------"
echo "Inicio do job:" `date`
echo "Hostname: " `hostname`
echo "PWD: " $PWD
#
# Define PATH e LD_LIBRARY_PATH para uso do mpi
#
source arquivo-de-configuracao-de-ambiente
#
# Chamada do executavel
# A execucao deve ser feita atraves do script mpi
#
mpirun -np 12 (executável)
#
echo "Final do job:" `date`
echo "-----------------------------------------"
Ou então:
#PBS -q par48
#PBS -N testjob
#PBS -o jobout
#PBS -e joberr
#PBS -V
#PBS -l nodes=4:ppn=12
#!/bin/sh
cd $PBS_O_WORKDIR
echo "-----------------------------------------"
echo "Inicio do job:" `date`
echo "Hostname: " `hostname`
#
# Para algumas aplicacoes MPI que efetuam muita comunicacao entre
# processos entre nos, e necessario reduzir o tamanho do buffer
# Infiniband: Minimo=8192; Maximo=131072 (default)
export MPI_IB_BUFFER_SIZE=8192
#
# Em aplicacoes que utilizam apenas um no (nodes=1), e aconselhavel
# definir um valor para o buffer de memoria compartilhada.
# Recomendavel valor em torno de 2048 bytes
export MPI_BUFFER_MAX=2048
#
echo "PWD: " $PWD
#
#
source arquivo-de-configuracao-de-ambiente
# Definir variavel para desligar o mapeamento de memoria feito pelo
MPI
export MPI_MEMMAP_OFF=1
#
# Chamada do executável
# A execucao deve ser feita atraves do script mpi
#
mpirun -np 48 (executável)
#
echo "Final do job:" `date`
echo "-----------------------------------------"
Neste caso, acrescenta-se a diretiva PBS -l que especifica os recursos necessários para a execução do job.
Para uma execução em paralelo, o principal recurso é o número de processadores que serão utilizados. No ambiente ICE, há algumas particularidades em relação ao uso dessa diretiva.
-
Fila parice, usando-se 12 processadores : deve ser especificado o número N de Nós com o valor fixo 1 (um), e o número n de processadores a serem usados nesse Nó.
-
Fila par48, usando-se número fixo de 48 processadores :
-
Fila exp96, usando-se número fixo de 96 processadores :
#PBS -l nodes=1:ppn=(n)
#PBS -l nodes=4:ppn=12
#PBS -l nodes=8:ppn=12
Em todos os casos, ppn=(n) tem o valor máximo de 12 (ppn=12), pois esse é o número de processadores (CPUs) de cada um dos Nós ICE. Detalhes sobre as características das filas parice, par48 e exp96 encontram-se abaixo.
Jobs multiprocessados
Programas multiprocessados são programas que utilizam recursos de mais de um processador, mas compartilhando uma única memória (Ambiente SMP). Normalmente, são programas que utilizam recursos de diretivas OpenMP ou são programas paralelizados autom´ticamente por alguns compiladores, com a opção -parallel, como é o caso do Compilador Fortran e C da Intel, do nosso ambiente. A execução de jobs pode ser feita através da submissão de um script ou de um arquivo binário. Por exemplo, o arquivo jobsmp.sh pode conter:
#PBS -q parice
#PBS -N testjob
#PBS -o jobout
#PBS -e joberr
#PBS -V
#PBS -l nodes=1:ppn=12
#!/bin/sh
cd $PBS_O_WORKDIR
echo "-----------------------------------------"
echo "Inicio do job:" `date`
echo "Hostname: " `hostname`
echo "PWD: " $PWD
echo "Arquivos:"
export OMP_NUM_PROCS=24
/diretorio/programa_executavel
echo "Final do job:" `date`
echo "-----------------------------------------"
A diretiva PBS -l deve especificar nodes e ppn, e será necessário definir uma variável de ambiente, OMP_NUM_PROCS, que especifica o número de processadores que serão utilizados pelo programa, no ambiente SMP.
OBS: Atenção! A opção de auto-paralelização, -parallel, não garante uma melhora de performance na execução do programa. A paralelização normalmente ocorre em "loops" que o programa possuir.
Intel MPI
Para uso do Intel MPI é necessário compilar os programas com os scripts de compilação da Intel (wrappers mpi).
A seguir são descritos os passos para uso do Intel MPI:
-
Configuração das variáveis de ambiente do MPI
da Intel:
-
source
/usr/local/intel2013/impi/4.1.0.024/intel64/bin/mpivars.sh
-
Compilação
- C e C++ da Intel: mpiicc, mpiicpc
- C e C++ da gnu: mpigcc ou mpicc, mpigxx
- Fortran 77 ou 90 da Intel: mpiifort
- Fortran 77 (g77) ou 90 (gfortran) da gnu: mpif77, mpif90
-
Execução interativa:
- Em um único nó (utilizando memória compartilhada): mpirun -np
-
Em vários nós (utilizando Infiniband e
memória compartilhada). Neste caso é
necessário ativar o daemon mpd.
-
Criar um arquivo com o nome dos nós:
-
cat > mpd.hosts
no1
no2
... - Ativar o daemon: export I_MPI_DAT_LIBRARY=libdat.so.1 (para utilizar Infiniband) mpdboot -n
- Execução: mpirun -np
- Cancelar o daemon mpd:mpdallexit
-
Criar um arquivo com o nome dos nós:
- Execução não interativa (PBS). Utilizar um script como o do exemplo abaixo:
#PBS -q
#PBS -N
#PBS -o jobout
#PBS -e joberr
#PBS -V
#PBS -l nodes=:ppn=
#!/bin/sh
cd $PBS_O_WORKDIR
echo "-----------------------------------------"
echo "Inicio do job:" `date`
echo "Hostname: " `hostname`
cat $PBS_NODEFILE
source /usr/local/intel2013/impi/4.1.0.024/intel64/bin/mpivars.sh
export I_MPI_DAT_LIBRARY=libdat.so.1
mpirun -np
echo "PWD: " $PWD
echo "Final do job:" `date`
echo "-----------------------------------------"
Filas
As filas, e restrições, definidas no PBSPro são:
- O número máximo de processadores sendo utilizados simultaneamente por um mesmo usuário é 96.
- O número máximo de jobs na fila parice por usuário é 5.
- O número máximo de jobs na fila par48 por usuário é 2.
- O número máximo de jobs na fila exp96 por usuário é 2.