Autor Tópico: Computadores multicore exigem programação paralela  (Lida 1761 vezes)

0 Membros e 1 Visitante estão vendo este tópico.

Offline Unknown

  • Conselheiros
  • Nível Máximo
  • *
  • Mensagens: 11.331
  • Sexo: Masculino
  • Sem humor para piada ruim, repetida ou previsível
Computadores multicore exigem programação paralela
« Online: 31 de Julho de 2007, 14:39:00 »
"Não tão rápido, supercomputadores," afirmam programadores

Os supercomputadores aumentam de velocidade de forma estonteante e já possuem até ranking mundial. O mesmo parece estar acontecendo com os computadores menores, até mesmo com os domésticos, graças à utilização dos processadores de múltiplos núcleos e da ligação de PCs em clusters.

Programação paralela

Agora, um pesquisador da Universidade Purdue, Estados Unidos, afirma que de nada adianta esse poder computacional gigantesco, inimaginável há poucos anos, simplesmente porque o hardware se colocou muito à frente da capacidade dos programadores em fazer programas que os possam utilizar de forma eficiente.

Faisal Saied afirma que a programação paralela tem sido uma habilidade quase esotérica, limitada a pesquisadores que lidam diretamente com supercomputadores. "Especialistas em computação de alto desempenho aprenderam a lidar com isso, mas eles são uma fração dos programadores. No futuro você não vai conseguir comprar um computador que não seja 'multicore' e, à medida em que os chips 'multicore' se disseminarem, todos os programadores terão que aprender novas técnicas," diz ele.

O Dr. Saied parece até ser um pouco otimista. O fato é que há muitos supercomputadores na iniciativa privada e nenhuma empresa costuma jogar fora seus antigos programas. Apenas uma parte do código usado nessas empresas é paralelo, já que todos os programas antigos são seqüenciais.

O resultado é que os chips "multicore", embora sejam o sonho do poder ilimitado de processamento, estão se tornando o pesadelo da programação.

Computadores "multicore"

Computadores "multicore" - ou multinúcleo - têm mais do que uma CPU em cada chip. São verdadeiros PCs individuais, mas trabalhando juntos. O problema é explorar essa capacidade de trabalhar em conjunto, criando programas que dividam as tarefas entre os diversos núcleos.

"Imagine você ter quatro bolas de golfe e precisar atingir quatro buracos. Se você tem quatro pessoas atirando as bolas ao mesmo tempo, você poderá fazer isto mais rapidamente do que se contar com uma pessoa só. Esta é a vantagem da computação de múltiplos núcleos. Múltiplos PCs, todos no interior do mesmo chip, estão trabalhando em múltiplas tarefas. A dificuldade é quebrar a tarefa em múltiplos componentes," diz Saied.

Hiato da Lei de Moore

A criação de microprocessadores com múltiplos núcleos virou uma tendência quando a indústria percebeu que o aumento da freqüência de processamento - o "clock" - estava criando mais problemas do que resolvendo - principalmente problemas de superaquecimento dos chips.

O superaquecimento dos chips até criou o chamado "Hiato da Lei de Moore": embora a quantidade de transistores no interior dos chips continue crescendo como a Lei de Moore prevê - dobrando a cada 18 meses - o fato é que a velocidade de processamento não tem crescido nessa velocidade. Na verdade, em termos de chips individuais, de um núcleo apenas, ela tem se mantido estacionária há bastante tempo.

E, se não forem criados programas que utilizem os recursos da computação paralela, o desperdício de energia continuará. Isso acontece porque os transistores consomem energia mesmo quando não estão fazendo nada. Programas seqüenciais, rodando em processadores de múltiplos núcleos, nada mais estarão fazendo do que deixando transistores ociosos - desperdiçando energia e capacidade de processamento. Ou seja, a capacidade de processamento cresceu, mas não é utilizada.

Linguagens de programação paralela

E tudo indica que esse poder de processamento continuará crescendo. Os fabricantes de chips Intel, AMD, IBM e Sun todas anunciaram que vão produzir chips "multicore". Em Fevereiro deste ano a Intel anunciou detalhes de um chip com 80 núcleos - 80 PCs dentro de um único chip - capaz de fazer cálculos que há 10 anos atrás exigiam computadores que ocupavam salas inteiras.

Até mesmo as linguagens de programação estão sendo questionadas. Steve Kirsch, especialista em supercomputadores, afirma que novas linguagens são essenciais. "Hoje nós programamos em linguagens seqüenciais. Iremos precisar de expressar nossos algoritmos em um nível mais alto de abstração? Pesquisas nesta área são críticas para nosso sucesso," diz ele.

http://www.inovacaotecnologica.com.br/noticias/noticia.php?artigo=010150070730

"That's what you like to do
To treat a man like a pig
And when I'm dead and gone
It's an award I've won"
(Russian Roulette - Accept)

Offline Ragnarok

  • Nível 03
  • *
  • Mensagens: 30
  • Sexo: Masculino
  • Sempre aberto para discussões racionais
Re: Computadores multicore exigem programação paralela
« Resposta #1 Online: 10 de Setembro de 2007, 22:48:46 »
Eu sou estudante de Ciência da Computação e essa é uma área da computação que eu gosto bastante. Alguns problemas que ocorrem com programação paralela são:

 - o sistema operacional deve tirar proveito dos múltiplos cores ( os kernels modernos tem suporte á isso, mas não conheço os detalhes)
 - nem todos os programas são paralelizavéis
 - não existe um modelo de programação único para computação paralela -  pelo menos nada tão universalmente aceito como na computação sequencial

" The most exciting phrase to hear in science, the one that heralds new
discoveries, is not 'Eureka!' but 'hmm...that's funny ...' - Isaac Asimov

"C is quirky, flawed, and an enormous success." - Dennis Ritchie

"Computer Science is no more about computers than astronomy is about
telescopes." - Edsger Dijkstra

Offline Unknown

  • Conselheiros
  • Nível Máximo
  • *
  • Mensagens: 11.331
  • Sexo: Masculino
  • Sem humor para piada ruim, repetida ou previsível
Re: Computadores multicore exigem programação paralela
« Resposta #2 Online: 04 de Outubro de 2010, 13:11:41 »
Linux está pronto para processadores de até 48 núcleos


No futuro, se o número de núcleos em um processador for "significativamente maior do que 48", novas arquiteturas e sistemas operacionais poderão tornar-se necessários. Até lá, o sistema operacional Linux dará conta do recado. [Imagem: Christine Daniloff]

Geração multicore

Para continuar melhorando o desempenho dos computadores, os fabricantes se voltaram para a adição de mais "núcleos", ou unidades de processamento, em cada chip, deixando de lado a antiga corrida pela aceleração pura dos processadores.

Em princípio, um processador com dois núcleos será duas vezes mais rápido do que um processador com apenas um núcleo, um processador com quatro núcleos será quatro vezes mais rápido, e assim por diante.

Para isso, contudo, é necessário dividir as tarefas computacionais para que elas sejam executadas de forma eficiente em vários núcleos.

Fazer programas capazes disso é uma tarefa difícil, e essa dificuldade só aumenta conforme aumenta o número de núcleos.

Muitos especialistas defenderam que, para aproveitar a geração multicore seria necessário reinventar a computação, incluindo reescrever as linguagens de programação e os sistemas operacionais para permitir tirar proveito dos múltiplos núcleos em um único processador.

Linux multicore

Mas um grupo de pesquisadores do MIT, nos Estados Unidos, acaba de demonstrar que pode não ser necessário tal revolução, pelo menos a curto prazo.

Especificamente no caso do sistema operacional Linux, os pesquisadores demonstraram que a arquitetura de software atual poderá sobreviver muito bem a um aumento crescente de núcleos dentro de um mesmo processador - pelo menos até 48 núcleos por processador.

Para ter uma noção de como o Linux poderá rodar nos chips do futuro, os pesquisadores do MIT desenvolveram um sistema no qual oito processadores de seis núcleos simulam o funcionamento e o desempenho de um processador de 48 núcleos.

Usando esta plataforma, eles testaram uma bateria de aplicativos e testes de benchmarking que demandam fortemente o sistema operacional.

Em seguida, eles foram ativando os 48 núcleos, um por um, e observaram as consequências sobre o funcionamento do sistema operacional e sobre o seu desempenho.

Gargalo no contador

Num determinado ponto, a adição de mais núcleos começou a tornar o sistema operacional mais lento.

Mas, segundo os pesquisadores, o problema teve uma explicação surpreendentemente simples e pôde ser resolvido igualmente sem complicações.

Em um sistema multicore, os múltiplos núcleos muitas vezes executam cálculos que envolvem os mesmos dados. Enquanto os dados são necessários para algum núcleo, eles não podem ser apagados da memória. Assim, quando um núcleo começa a trabalhar com os dados, ele incrementa um contador central; quando ele termina a sua tarefa, ele decrementa o contador.

O contador, portanto, mantém uma contagem do número total de núcleos usando os dados. Quando a contagem chega a zero, o sistema operacional fica sabendo que pode apagar os dados, liberando memória para outros processos.

Conforme aumenta o número de núcleos, contudo, tarefas que dependem dos mesmos dados são divididas em pedaços cada vez menores. Os pesquisadores do MIT descobriram que, a partir daí, os núcleos começam a gastar tempo demais incrementando e decrementando o contador e acabam tendo menos tempo para realizar seu trabalho.

Depois de fazer uma alteração simples no código do Linux, para que cada núcleo mantivesse um contador local, que apenas ocasionalmente era sincronizado com o contador dos outros núcleos, o desempenho geral do sistema melhorou muito, e o acréscimo de núcleos voltou a melhorar o rendimento total do sistema.

Evolução em lugar de revolução

No futuro, se o número de núcleos em um processador for "significativamente maior do que 48", novas arquiteturas e sistemas operacionais poderão tornar-se necessários.

Para os próximos anos, argumentam os pesquisadores, o experimento mostra que um dos principais sistemas operacionais do mercado está pronto para continuar usufruindo dos progressos do hardware sem exigir uma revolução na área do software. A evolução será suficiente.

Contudo, apesar do problema com o contador de referência ter sido fácil de consertar, ele não foi nada fácil de identificar.

"Há um bocado de pesquisa interessante a ser feita na construção de ferramentas melhores para ajudar os programadores a identificar onde está o problema", afirmou Frans Kaashoek, um dos autores do estudo. "Nós escrevemos um monte de pequenas ferramentas para nos ajudar a descobrir o que estava acontecendo, mas nós gostaríamos de tornar o processo muito mais automatizado."

Bibliografia:
An Analysis of Linux Scalability to Many Cores
Silas Boyd-Wickizer, Austin T. Clements, Yandong Mao, Aleksey Pesterev, M. Frans Kaashoek, Robert Morris, Nickolai Zeldovich
September 2010
http://pdos.csail.mit.edu/papers/linux:osdi10.pdf

http://www.inovacaotecnologica.com.br/noticias/noticia.php?artigo=linux-multicore-48-nucleos&id=010150101004

"That's what you like to do
To treat a man like a pig
And when I'm dead and gone
It's an award I've won"
(Russian Roulette - Accept)

Offline West

  • Nível 31
  • *
  • Mensagens: 1.888
  • Sexo: Masculino
  • "Como um grão de poeira suspenso num raio de sol"
Re: Computadores multicore exigem programação paralela
« Resposta #3 Online: 04 de Outubro de 2010, 16:34:07 »
O java há muito tempo que possui suporte a programação paralela/concorrente através do chamado "multi threading", mas me parece ser um recurso muito pouco utilizado. O resultado disso foi destacado no primeiro artigo - subutilização do poder computacional.
"Houve um tempo em que os anjos perambulavam na terra.
Agora não se acham nem no céu."
__________
Provérbio Iídiche.

"Acerca dos deuses não tenho como saber nem se eles existem nem se eles não
existem, nem qual sua aparência. Muitas coisas impedem meu conhecimento.
Entres elas, o fato de que eles nunca aparecem."
__________
Protágoras.Ensaio sobre os deuses. Séc. V a.C.

Offline Cumpadi

  • Nível 32
  • *
  • Mensagens: 2.247
  • Sexo: Masculino
Re: Computadores multicore exigem programação paralela
« Resposta #4 Online: 04 de Outubro de 2010, 22:37:39 »
- nem todos os programas são paralelizavéis
 - não existe um modelo de programação único para computação paralela -  pelo menos nada tão universalmente aceito como na computação sequencial



Apesar de não ser estudante de ciências da computação, acho que é um tanto pessimista sua visão sobre isso. Sei lá... me parece que uma solução para o segundo problema depende da solução do primeiro. Isso me lembra o DX10, os caras fizeram mó propaganda da sua capacidade, na prática ninguem "tava afim" de programar em DX 10 e ficou uma merda. Mas acho difícil isso acontecer com os multicores. :)
http://tomwoods.com . Venezuela, pode ir que estamos logo atrás.

Offline Kernel Code

  • Nível 07
  • *
  • Mensagens: 74
  • Sexo: Masculino
  • Kernel Panic
    • Programando na Madrugada
Re: Computadores multicore exigem programação paralela
« Resposta #5 Online: 07 de Novembro de 2010, 01:17:14 »
Eu sou estudante de Ciência da Computação e essa é uma área da computação que eu gosto bastante. Alguns problemas que ocorrem com programação paralela são:

 - o sistema operacional deve tirar proveito dos múltiplos cores ( os kernels modernos tem suporte á isso, mas não conheço os detalhes)
 - nem todos os programas são paralelizavéis
 - não existe um modelo de programação único para computação paralela -  pelo menos nada tão universalmente aceito como na computação sequencial



O recurso de multi-threading já existe há muito tempo nas linguagens de programação. O problema maior criar os algoritmos que trabalhem dessa forma.
"Quando se abre a mente para o impossível, as vezes se encontra a verdade" Dr. Walter Bishop (Fringe)
Programando na Madrugada

Offline Pedro Reis

  • Nível 39
  • *
  • Mensagens: 4.085
Re: Computadores multicore exigem programação paralela
« Resposta #6 Online: 11 de Novembro de 2010, 21:43:03 »
Eu sou estudante de Ciência da Computação e essa é uma área da computação que eu gosto bastante. Alguns problemas que ocorrem com programação paralela são:

 - o sistema operacional deve tirar proveito dos múltiplos cores ( os kernels modernos tem suporte á isso, mas não conheço os detalhes)
 - nem todos os programas são paralelizavéis
 - não existe um modelo de programação único para computação paralela -  pelo menos nada tão universalmente aceito como na computação sequencial



Eu achei que o primeiro artigo não foi muito esclarecedor. Deu-se a impressão que o potencial dos processadores multi-core só será aproveitado com uma mudança de paradigma na engenharia de software.

Como você mencionou talvez a maioria dos problemas que encontramos na prática não sejam significativamente paralelizáveis. É algo intrínseco à natureza do problema, e não tem relação com o uso da tecnologia. No entanto os sistemas operacionais multitarefa, que todos utilizamos hoje em dia, executam "simultaneamente" vários processos. Com múltiplos núcleos esta simultaneadade passa a ser real,
melhorando o desempenho do sistema. Mesmo quando os processos não estão "cientes" da existência de múltiplos processadores.

Para aqueles problemas que podem ser atacados com uma abordagem paralela, a  maioria das linguagens de programação já oferece suporte ao multi-threading. Então eu acho que o que o pesquisador citado no artigo - Faisal Saed - estava realmente se referindo era ao desafio de desenvolver novos programas e algoritmos para resolver problemas específicos que são altamente paralelizáveis.

Independentemente disso o benefício de se ter a tecnologia multicore é automático a nível de sistema operacional. E isso é algo que os usuários já constatam na prática.

 

Do NOT follow this link or you will be banned from the site!