Programação Paralela em Arquiteturas Multi-Core/Aplicações Internet: diferenças entre revisões

[edição não verificada][edição não verificada]
==== Definição ====
 
A computação em grade (do Inglês [[Wikipedia:|grid computing]]) é um modelo computacional capaz de alcançar uma alta taxa de processamento dividindo as tarefas entre diversas máquinas, podendo ser em rede local ou rede de longa distância, que formam uma [[Wikipedia:|máquina virtual]]. Esses processos serão executados no momento em que as máquinas não estão sendo utilizadas pelo usuário, evitando assim o desperdício de processamento da máquina utilizada. A metáfora adotada na computação em grade é a da rede eletrica (grid, em Inglês). Isto é, o poder computacional deveria estar disponível na Internet da mesma forma que energia elétrica está disponível na tomada: sob demanda e de maneira transparente.
Uma aplicação paralela consiste de diversas tarefas. Cada tarefa roda em um processador distinto, possibilitando que a aplicação compute em paralelo, desta forma executando mais velozmente do que se estivesse rodando em um único processador. Tarefas comunicam-se entre si para garantir o progresso consistente da aplicação. A intensidade da comunicação entre as tarefas de uma dada aplicação paralela estabelece a granularidade daquela aplicação. Aplicações que demandam intensa comunicação são ditas pesadas ou de fina granulariade. Aplicações cujas tarefas requerem pouca comunicação são ditas leves ou de grossa granularidade.
 
Uma experiência de integração de processamento distribuído é o projeto SETI@home [http://setiathome.ssl.berkeley.edu/], uma continuação do projeto da NASA de busca de inteligência extraterrestre. Usando um software que pode ser baixado pela Internet, um microcomputador pode analisar sinais do rádio telescópio de Arecibo. Atualmente, existem 4 milhões de assinantes em 224 países, criando um computador virtual com uma performance de 20 Tflops.
A granularidade de uma aplicação paralela estabelece requerimentos para a plataforma na qual a aplicação é executada. A plataforma de execução de uma aplicação paralela consiste dos processadores usados pela aplicação e também das redes que conectam estes processadores. Aplicações paralelas pesadas demandam plataformas dedicadas (tais como supercomputadores massivamente paralelos) para que o ''overhead'' de comunicação não anule os ganhos decorrentes do paralelismo. Aplicações paralelas leves, ao contrário, podem efetivamente utilizar processadores compartilhados e interconectados por redes de longa distância.
 
Um outro exemplo são as famosas redes peer-to-peer, como Emule (Edonkey), Kazaa, Gnutella, em que se compartilham arquivos por exemplo, mas sem nenhum controle de acesso e não interoperam entre si. Com a evolução dessas aplicações elas acabaram por inter-operar e haverá uma convergência de interesses entre computação ponto a ponto, Internet e computação em grade.
Aplicações paralelas leves têm sido foco de muita atenção em indústrias e universidades, devido principalmente a dois importantes fatores. Primeiro, as aplicações paralelas leves representam uma fração respeitável das aplicações paralelas, incluindo [[Wikipedia:|data mining]], pesquisas massivas e várias aplicações de manipulação de imagens(como tumografia), por exemplo. Segundo, o projeto SETI@home [http://setiathome.ssl.berkeley.edu/] demonstrou que aplicações paralelas leves podem utilizar efetivamente um número grande de processadores conectados à Internet.
 
A diferença existente entre a computação distribuída e computação em grade se dá pelo fato de que a computação distribuída é um conceito que vem dos anos 80 e 90, e consiste na possibilidade de resolver um determinado problema computacional através da utilização de diferentes recursos distribuídos geograficamente. A computação distribuída passa a ser uma “Computação em Grade” no momento em que existe uma infra-estrutura física e uma infra-estrutura lógica (software) que permita coordenar os trabalhos que vão ser processados e garantir a sua qualidade de serviço.
A computação em grade (do Inglês [[Wikipedia:|grid computing]]) é um modelo computacional capaz de alcançar uma alta taxa de processamento dividindo as tarefas entre diversas máquinas, podendo ser em rede local ou rede de longa distância, que formam uma [[Wikipedia:|máquina virtual]]. Esses processos serão executados no momento em que as máquinas não estão sendo utilizadas pelo usuário, evitando assim o desperdício de processamento da máquina utilizada. A metáfora adotada na computação em grade é a da rede eletrica (grid, em Inglês). Isto é, o poder computacional deveria estar disponível na Internet da mesma forma que energia elétrica está disponível na tomada: sob demanda e de maneira transparente.
 
O surgimento das Grids Computacionais nasceu da comunidade de Processamento de Alto Desempenho (PAD). O conceito foi apresentado pelos pesquisadores Ian Foster e Carl Kesselman, sendo composto por uma infra-estrutura de hardware e software que permite-nos acesso a grandes capacidades computacionais geograficamente distribuídas, de forma confiável, consistente, econômica e persistente. Na verdade o conceito é antigo, mas com uma nova dinâmica, em que se pode utilizar a capacidade de computação (ex. Storage/CPU) sem ter que se preocupar de onde vem, como é mantida, fazendo uma metáfora às redes elétricas.
Uma experiência de integração de processamento distribuído é o projeto SETI@home, uma continuação do projeto da NASA de busca de inteligência extraterrestre. Usando um software que pode ser baixado pela Internet, um microcomputador pode analisar sinais do rádio telescópio de Arecibo. Atualmente, existem 4 milhões de assinantes em 224 países, criando um computador virtual com uma performance de 20 Tflops.
 
Chamamos de Organização Virtual (VO) quando temos participantes que desejam compartilhar recursos para poder concluir uma tarefa. Além disso, o compartilhamento esta além de apenas troca de documentos, isto pode envolver acesso direto a software remoto, computadores, dados, sensores e outros recursos.
Um outro exemplo são as famosas redes peer-to-peer, como Emule (Edonkey), Kazaa, Gnutella, em que se compartilham arquivos por exemplo, mas sem nenhum controle de acesso e não interoperam entre si. Com a evolução dessas aplicações elas acabaram por inter-operar e haverá uma convergência de interesses entre computação ponto a ponto, Internet e computação em grade.
 
[[Image:VirtOrg.png|thumb|right|Virtual Organizations accessing different and overlapping sets of resources]]
A computação em grade é próxima geração da Internet – são protocolos adicionais construídos sobre a tecnologia da Internet. Qualquer recurso que esteja na Grade, também está na Rede.
 
A diferença existente entre a computação distribuída e computação em grade se dá pelo fato de que a computação distribuída é um conceito que vem dos anos 80 e 90, e consiste na possibilidade de resolver um determinado problema computacional através da utilização de diferentes recursos distribuídos geograficamente. A computação distribuída passa a ser uma “Computação em Grade” no momento em que existe uma infra-estrutura física e uma infra-estrutura lógica (software) que permita coordenar os trabalhos que vão ser processados e garantir a sua qualidade de serviço.
 
Grids são construídos como um grupamento de serviços básicos independentes. Um aspecto essencial dos serviços de Grid é que esses estão disponíveis uniformemente através dos ambientes distribuídos na Grid. Os serviços são agrupados em um sistema integrado, também chamado de middleware. Exemplos de ferramentas atuais de Grid incluem Globus, Legion, OpenGrid, AppLeS.
Um ambiente de cluster constitui em um sistema formado por hardware e software conectados em um local apenas, servindo a usuários que estão trabalho somente em um projeto, usado exclusivamente para resolver os problemas computacionais de uma determinada organização. Por outro lado, um Grid presta serviços de uma forma geograficamente distribuída. Em um cluster, os recursos são gerenciados por uma entidade central, e os computadores agem como se fosse um único dispositivo. Nas configurações em Grid, cada “organização virtual” faz o gerenciamento de seus recursos não tendo a visão de uma imagem única do sistema. Ou seja, o usuário tem consciência dos diversos serviços disponíveis e que deverá requisitá-los para sua utilização. Portanto, os Grids são mais heterogêneos, complexos e distribuídos.
 
==== Benefícios e Desafios ====
COLOCAR FIGURA DA WIKIPEDIA
 
==== Benefícios ====
 
Um Grid possui muitos benefícios, entre os quais podemos citar:
 
*Aproveitamento de recursos ociosos – pode-se aproveitar os ciclos de processamento idle disponíveis dos PCs desktops que se encontram em várias localidades pelo planeta. Por exemplo, os computadores que se encontram tipicamente ociosos durante a noite de uma empresa em Tókio pode ser utilizado durante o dia para operações na América do Sul.
 
==== Desafios ====
 
A computação em grade, por ser uma tecnologia ainda muito recente, possui muitos desafios operacionais e de pesquisa a serem combatidos. Apenas para exemplificar, citamos alguns deles:
40

edições