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.
Post a Comment