Dec 12, 2005

Mesmo Hardware, Mais de 15Gflops!

Após instalar o Rocks 4.1 no ultimo sábado consegui rodar o HPL graças aos binários para Athlon que um dos desenvolvedores do Rocks me enviou.

Houve um incidente muito curioso. Após completar a primeira etapa do HPL a régua de energia elétrica desarmou desligando todo o cluster. Quando os oitos nós estão com carga máxima o cluster consome 1056W. Os danos não foram grandes, apenas uma placa de vídeo.


A regua não aguentou os mais de 1000W e desarmou


Rodar o hpl é simples.

1 - Copie para o home do seu usuário os arquivos HPL e machines.

2 - $ export P4_GLOBMEMSIZE=100000000

3 - $ /opt/mpich/gnu/bin/mpirun -np 8 -machinefile machines /opt/hpl/gnu/bin/xhpl





A melhor marca foi 1.527e+01 Gflops!


A melhora de desempenho em relação ao teste feito em fevereiro deve-se principalmete ao overclock da memória. Agora ela esta operando a 333MHz contra 266MHz do teste de fevereiro.

Feb 15, 2005

Velocidade do Cluster: Sustained vs. Peak

Descobri como calcular a velocidade teorica de pico de um cluster. É muito fácil:

Peak GFLOPS = [CPUs] * [CPU clock rate (GHz)] * [CPU floating point issue rate]

O issue rate da sua CPUs descreve quantas operações de ponto flutuante ela pode computar por ciclo.
Um guia simplificado é: (Tipo de CPD: issue rate) Pentium 2: 1, Pentium 4: 2, Athlon XP: 3, Itanium 2: 4.

Por exemplo: 8 Atlhon XP 2800+(2,083 GHz) = 8 * 2,083 * 3 = 49,992 GFLOPS.

No caso do crick são 49,992 GFLOPS PEAK e 14,69 GFLOPS SUSTAINED

Feb 8, 2005

Menos distante do TOP500

Clique aqui para voltar para o Blog do Peter.

Depois de ajustes o cluster obteve resultados melhores com o HPLinpack. Dois dispositivos estão limitando a velocitade. As memórias com barramento DDR266 CL 2.5 e as placas de rede gigabit Realtek. Mas mesmo assim o cluster obteve 14.69Gflops Veja:


Veja a Saida do HPLinpack aqui

Jan 30, 2005

Rumo ao TOP500

Finalmente obtive o resultado da potência do cluster. O melhor número obtido foi 10,27 Gflops. O computador que esta na posição número 500 do TOP500 de 11/2004 marcou 850.6Gflops. O resultado é bom se o preço do cluster for levado em conta. O investimento foi inferior a R$ 20.000,00 ($ 8000,00).

Veja a saida do HPLinpack aqui

Jan 3, 2005

A necessidade de computação paralela

Suponha que desejamos construir um computador capaz de efetuar um trilhão de operações a cada segundo. Talvez a solução mais óbvia seja simplesmente explorar a fundo tecnologias bem conhecidas. Ou seja, nós podemos tentar construir um computador von Neumann mais ou menos convencional com um processador extremamente rápido e com uma grande quantidade de memória. Agora suponha que nós queremos um computador que pode executar o código abaixo em um segundo:

/* x, y e z são arrays de floats, cada uma contendo
/* um trilhão de entradas
for ( i = 0 ; i < UM_TRILHAO ; i++ )
{
z[i] = x[i] + y[i];
}

Em um computador convencional, nós buscaríamos x[i] e y[i] da memória e os guardaríamos em registradores, somaríamos os dois e guardaríamos o resultado em z[i]. Assim para executar este código, nós precisaríamos ser capazes de executar no mínimo 10^12 cópias entre a memória e os registradores a cada segundo. Se a informação viaja na velocidade da luz (3 X 10^8 metros/segundo), e se r é a distância média entre uma palavra de memória e a CPU, então r satisfaz:

3 X 10^12r metros = 3 X 10^8 metros/segundo X 1 segundo,

ou r = 10^-4 metros. Agora, nosso computador convencional ultra rápido deve conter ao menos três trilhões de palavras de memória para poder armazenar x, y e z. Normalmente no nível de hardware, as palavras de memória são organizadas em uma grade retangular regular. Se usármos uma grade quadrada com o lado valendo s e com a CPU no centro, então a distância média entre a CPU e uma palavra de memória é aproximadamente s/2. Então nós queremos que s/2 = 10^-4 metros ou s = 2 X 10^-4 metros. Se as nossas palavras de memória formam uma grade quadrada, um "row" típico de memória conterá

( 3 X 10^12 )^( 1/2 ) = 3^( 1/2 ) X 10^6

palavras. Assim nós precisamos espremer uma palavra de memória em em um quadrado com o lado valendo

( 2 X 10^-4 metros ) / [ 3^( 1/2 ) X 10^6 ] =~ 10^-10 metros.

Este é o tamanho de um átomo relativamente pequeno! Em outras palavras isto quer dizer que a não ser que consigamos representar palavras de 32 bits (ou 64 bits) com apenas um átomo, será impossível construir nosso computador.

Então como construir um computador capaz de realizar um trilhão de operações a cada segundo? Considere a analogia:

Pedro é um contratante romano expecializado em escavação. Paulo é o seu único empregado e ele é capaz de escavar 1000 metros cúbicos por dia. Entretanto surge uma demanda incrível para os serviços de Pedro quando descobre-se que Átila esta para fazer uma visita a Roma na próxima semana. Pedro percebe que para atender a demanda ele precisa escavar 100000 metros cúbicos por dia durante uma semana. Ele não é bobo. Ele resolve o problema contratando mais 99 homens, aumentando sua força de trabalho de 1 para 100 homens. A analogia deve ser clara: Nosso único empregado é nosso processador e memória, e nossos 100000 metros cúbicos diários são o problema que requer grande poder computacional. Nossa solução também é clara: nós devemos obter mais trabalhadores ou mais processadores e módulos de memória para resolver o problema. Um computador paralelo é simplesmente um computador (ou um conjunto de computadores) com vários processadores que podem trabalhar juntos para resolver um problema.

PACHECO, Peter S. Parallel Programming with MPI. San Francisco: Morgan Kaufmann Publishers, 1997.