Utilizando o Benchmark High-Performance Linpack (HPL)

De Wiki do Veiga

Tabela de conteúdo

Introdução

HPL (High-Performance Linpack) é uma aplicação que resolve sistemas lineares densos em dupla precisão e é comumente utilizado para avaliação de desempenho de computadores paralelos como cluster. HPL também é usado para definir o ranking do site que avalia as 500 máquinas mais poderosas do mundo: http://www.top500.org.

Este texto contém informações de como instalar e executar o HPL em um cluster.

Instalação

A última versão de HPL pode ser obtida em http://www.netlib.org/benchmark/hpl (neste caso, utilizou-se a versão HPL 1.0a). O procedimento de instalação é descrito a seguir.

Descompactar o pacote:

$ tar -xzf hpl.tgz
$ cd hpl

Copiar um dos Makefiles do diretório ./setup e modificar de acordo com ambiente:

$ cp setup/Make.Linux_PII_CBLAS .

HPL utiliza as bibliotecas MPI e BLASS. No exemplo disponível em ./setup a biblioteca utilizada é mpich. Desta forma, foi necessário modificar o caminho para a biblioteca lam-mpi e incluir todas as suas dependências.

MPdir        = /usr/local/
MPinc        = -I$(MPdir)/include
MPlib        = $(MPdir)/lib/libmpi.a \
$(MPdir)/lib/liblam.a \
$(MPdir)/lib/libcr.so \
/usr/lib/libpthread.so

O próximo passo é a instalação da BLASS, que pode ser feita instalando o pacote ATLAS. A ultima versão de ATLAS está disponível em http://math-atlas.sourceforge.net/ (neste exemplo, utilizou-se a versão 3.4.2).

Descompactar o pacote:

$ tar xzf atlas3_4_2.tgz
$ cd ATLAS

Gerar o Makefile:

$ make config

Após executar esse comando, será gerado um arquivo Makefile específico para a arquitetura utilizada (neste caso, o arquivo Make.Linux_P4SSE2 foi gerado e a única variável que precisou ser modificada foi TOPdir). O comando a seguir compila e instala as bibliotecas.

$ make install arch=Linux_P4SSE2

Voltando ao diretório da HPL, foi necessário modificar o arquivo ./Make.Linux_PII_CBLAS para especificar o caminho da BLAS compilada:

LAdir        = $(HOME)/ATLAS/lib/Linux_P4SSE2
LAinc        =
LAlib        = $(LAdir)/libcblas.a $(LAdir)/libatlas.a

Finalmente, a compilação de HPL foi realizada com o comando que segue:

$ make arch=Linux_PII_CBLAS
$ ls bin/Linux_PII_CBLAS/xhpl

Utilização

O processo de instalação cria um arquivo HPL.dat que contém as parâmetros de entrado de HPL. No entanto, esses parâmetros podem ser modificados para aumentar o desempenho (uma descrição desses parâmetros pode ser obtida no arquivo ./TUNING).

Exemplo de Execução

$ cd bin/Linux_PII_CBLAS
$ lamboot
$ mpirun -np 4 xhpl

Exemplo de Checkpoint/Restart na HPL

A seguir estão os procedimentos para realizar C/R na HPL utilizando LAM/MPI.

Executar xpl utilizando o HPL.dat padrão:

mpirun -np 4 -ssi rpi crtcp -ssi cr blcr xhpl

Realizar o checkpoint com o PID do mpirun:

$ ps -A | grep mpirun
  815 pts/2    00:00:00 mpirun
  821 pts/2    00:00:00 mpirun
  826 pts/2    00:00:00 mpirun

$ lamcheckpoint -ssi cr blcr -ssi cr_blcr_base_dir ./ -pid 758

Para reiniciar a aplicação a partir do arquivo de contexto:

lamrestart -ssi cr blcr -ssi cr_blcr_context_file context.mpirun.758

Cálculo do Tamanho do Problema N

Uma explicação de como calcular o tamanho do problema do HPL é disponibilizada em sua FAQ. Esse cálculo leva em consideração o número de nós do cluster, o tamanho da memória e a porcentagem de memória que é utilizada/reservada ao sistema operacional.

O script a seguir ajuda a calcular esse valor:

#!/bin/sh
# Script para calcular o N para a matriz de entrada do HPL
# Marcelo Veiga Neves <marcelo.veiga@gmail.com>
# Dom  8 Mar 2009 16:35:33 BRT

# HPL FAQ
# http://www.netlib.org/benchmark/hpl/faqs.html

echo -n "number of nodes: "
read np

echo -n "memory per node (in MB): "
read m

echo -n "percente reserved to OS (default: 20 %): "
read os
[ -z "$os" ] && os=20 

total=`echo "sqrt($np * $m*1024*1024 / 8)" | bc -l`
N=`echo "$total * (1-$os/100)"  | bc -l`

echo N=$N

Referências


Marcelo Veiga Neves < marcelo.veiga at gmail.com >

Ferramentas pessoais