Buscar

Artigo - Arquitetura de Comp

Prévia do material em texto

The Trouble With Multicore 
Os fabricantes de chips estão ocupados projetar microprocessadores que a maioria dos programadores não podem lidar com 
Por David Patterson 
Postado junho 30, 2010 | 17:46 GMT 
Em 1975, o futuro Hall of Famer Roger Staubach teve o futebol, mas pouco mais em um jogo de playoff contra o Minnesota Vikings. Atrás de quatro pontos no meio-campo, com 24 segundos para ir, o Dallas Cowboys quarterback fechou os olhos, jogou a bola tão duro quanto podia, e disse uma Ave-Maria. (Para os fãs de futebol, isso seria como David Beckham tomando um chute a gol do meio-campo no final de tempo de lesão). 
Sua oração foi respondida. Receptor de Staubach colidiu com um defensor Viking, assim como a bola chegou, mas, no entanto, conseguiu prender o futebol contra sua perna, marcando o touchdown que levou o Cowboys para o Super Bowl. (Imagine bola de Beckham batendo o goleiro.) Desde aquele jogo, um passe desesperado com pouca chance de sucesso tem sido rotulado como uma Ave-Maria. 
Trinta anos depois, a indústria de semicondutores jogou o equivalente a um Hail Mary passe quando ele trocou de fazer microprocessadores correr mais rápido para colocar mais deles em um chip fazê-lo sem qualquer noção clara de como esses dispositivos que, em geral, ser programado. A esperança é que alguém será capaz de descobrir como fazer isso, mas, no momento, a bola ainda está no ar. 
Por que tomar tal uma aposta? Em suma, porque não havia muito de uma alternativa. 
Durante décadas, os designers de microprocessadores usou o crescente número de transistores que poderiam ser espremida em cada chip para aumentar a potência computacional. Eles fizeram isso através da criação de microprocessadores que podem realizar várias operações ao mesmo tempo, por exemplo, buscar a próxima instrução da memória, enquanto o atual estava sendo executado. E os fabricantes de chips aumentou continuamente as taxas de clock do microprocessador, algo do tamanho cada vez menor de transistores prontamente permitidos. 
Mas por volta de 2003, os fabricantes de chips descobriu que não poderia mais reduzir a tensão de operação tão nitidamente como eles tinham no passado, uma vez que se esforçou para fazer transistores menores e mais rápidos. Que por sua vez causou a quantidade de calor que tinha de ser dissipada em cada milímetro quadrado de silício para subir. Eventualmente, os designers acertar o que eles chamam de a parede de energia, o limite para a quantidade de energia de um chip microprocessador poderia razoavelmente se dissipar. Afinal, um computador portátil que queimou seu colo seria uma tarefa difícil. 
Designers agora aceitar que, apesar de transistores ainda vai ficar menor e mais numerosos em cada chip, eles não vão funcionar mais rápido do que o fazem hoje. (Na verdade, a velocidade de clock de pico são mais baixos agora do que eram há cinco anos.) E se você tentou incorporar todos esses transistores em um microprocessador gigante, você pode muito bem acabar com um dispositivo que não poderia computar mais rápido do que o chip que foi a substituição, o que explica a mudança para montá-los em vários núcleos de microprocessadores em seu lugar. Embora cada núcleo pode ter habilidades computacionais modestos, você terá muitos deles à sua disposição. 
Esses novos chips são chamados microprocessadores multicore-ou, por vezes, muitos microprocessadores de núcleo quando um grande número de núcleos que estão envolvidos, para distingui-los a partir de desenhos tradicionais single-core. Em certo sentido, o núcleo tornou-se o novo transistor, para emprestar uma frase de Chris Rowen, presidente e diretor de tecnologia da Tensilica, em Santa Clara, Califórnia Isto é, daqui em diante, projetistas de chips vai se concentrar em como gangue juntos muitos núcleos, assim como a geração anterior de engenheiros microprocessador pensou sobre o circuito que eles estavam criando no nível de transistores individuais. 
O truque será o de inventar maneiras para os programadores a escrever aplicativos que exploram o aumento do número de processadores encontrados em cada chip sem esticar o tempo necessário para desenvolver software ou diminuindo a sua qualidade. Diga a sua Ave Maria agora, porque isso não vai ser fácil. 
Quando o presidente e CEO da Intel, Paul S. Otellini, anunciou em 2004 que sua empresa iria dedicar "todos os nossos projetos futuros de produtos para ambientes multicore", por que ele rotular este "um ponto de inflexão fundamental para a indústria?" A resposta é clara para qualquer pessoa familiarizada com as muitas empresas extintas que apostam seu futuro na transição de computadores single-core para sistemas com múltiplos processadores trabalhando em paralelo. Ardent, Convex, Encore, de ponto flutuante Systems, Inmos, Kendall Square Research, MasPar, Ncube, Sequent, em tandem, e máquinas pensantes são apenas os nomes mais proeminentes de uma longa lista de candidatos paralelas longo ido. Otellini estava anunciando que, apesar de este registro preocupante, aplicações de software no futuro irá correr mais rápido se os programadores podem escrever programas paralelos para os tipos de processadores de vários núcleos que a Intel e outras empresas de semicondutores começaram transporte. 
Mas porque é que o processamento paralelo tão desafiador? Uma analogia ajuda aqui. A programação é, em muitos aspectos, como escrever uma notícia. Potencialmente, 10 jornalistas poderiam completar uma história de 10 vezes mais rápido que um único repórter poderia controlá-lo. Mas eles precisam dividir uma tarefa em 10 pedaços de tamanhos iguais, caso contrário eles não poderiam alcançar um total de dez vezes aceleração. 
Complicações que surgem, no entanto, se uma parte da história não poderia ser escrita até que o resto do que foi feito. Os 10 jornalistas também precisam garantir que cada pedaço de texto foi coerente com o que veio antes e que a próxima seção fluiu logicamente a partir dele, sem repetir qualquer material. Além disso, eles teriam tempo para seus esforços a fim de que eles terminaram simultaneamente. Afinal de contas, você não pode publicar uma história enquanto você ainda está esperando por uma peça no meio para ser concluída. Estes mesmos problemas de equilíbrio carga, as dependências seqüenciais e sincronização-desafio programadores paralelas. 
Pesquisadores vêm tentando resolver estes problemas desde 1960. Muitas idéias foram julgados, e apenas sobre como muitos falharam. Uma visão inicial era de que a linguagem de computador para a direita faria programação paralela simples. Houve centenas, se não milhares, de tentativas de desenvolvimento de tais idiomas, incluindo exemplos de longo ido tão APL, Id, Linda, Occam, e sisal. Alguns feita paralelamente a programação mais fácil, mas nenhuma fez isso tão rápido, eficiente e flexível como a programação seqüencial tradicional. Nem qualquer tornou-se tão popular quanto as línguas inventadas, principalmente para a programação sequencial. 
Outra esperança era de que, se você só projetou o hardware corretamente, programação paralela seria fácil. Muitos investidores privados têm sido seduzido por essa idéia. E muitas pessoas tentaram construir o El Dorado de arquitetura de computadores, mas ninguém ainda conseguiu. 
A terceira idéia, também, que remonta à década de 1960, está a escrever o software que irá paralelizar automaticamente programas seqüenciais existentes. História ensina que o sucesso aqui é inversamente proporcional ao número de núcleos. Dependendo do programa, provavelmente haverá algum benefício de tentar paralelizar automaticamente para duas, quatro ou até oito núcleos. Mas a maioria dos especialistas permanecem céticos de que a paralelização automática de código seqüencial arbitrário vai ser benéfico para 32, 64 ou 128 núcleos, apesar de alguns avanços recentemente publicados nesta área. 
Em suma, as coisas parecem bastante sombria. No entanto, tem havido progresso em algumas comunidades. Em geral, o paralelismo pode trabalhar quando se pode dar ao luxo de montar um time de programadoresem nível de doutorado para resolver um problema com muitas tarefas diferentes que dependem muito pouco um do outro. Um exemplo é o sistema de banco de dados que os bancos usam para gerenciar transações em caixas eletrônicos e companhias aéreas utilizam para rastreamento reservas. Outro exemplo é a pesquisa na Internet. É muito mais fácil para fazer a paralelização de programas que lidam com muitos usuários fazendo praticamente a mesma coisa, em vez de um único usuário fazer algo muito complicado. Isso porque você pode facilmente tirar vantagem do nível de tarefa inerente paralelismo do problema na mão. 
Outra história de sucesso é computação gráfica. Filmes de animação ou aqueles com muita gerada por computador de efeitos especiais exposição paralelismo em nível de tarefa em que as cenas individuais podem ser computados em paralelo. Programadores inteligentes encontraram mesmo paralelismo na computação cada imagem. De fato, os high-end unidades de processamento gráfico (GPUs) usados ​​para acelerar os jogos em um PC pode conter centenas de processadores, cada um abordando apenas um pequeno pedaço do trabalho de renderizar uma imagem. Os cientistas da computação se aplica o termo "paralelismo em nível de dados" para tais aplicações. Eles são difíceis o suficiente para o programa, mas em geral eles são mais fáceis do que os aplicativos que não oferecem esse paralelismo inerente. 
Computação científica fornece uma previsão história de intempéries sucesso terceiro e simulações de acidente de viação, sendo dois exemplos bem conhecidos. Estes são os programas de longa duração que têm lotes de nível de paralelismo de dados. As equipes de elite que criam esses programas são frequentemente combinações de Ph.D. cientistas da computação e pessoas com doutorado em ciências relevantes para a aplicação. Os aplicativos de desktop raramente tem muito potência intelectual por trás deles. 
Dada esta paisagem austero, você não pode esperar desta última incursão de computação paralela para ser saudado pelo sucesso. Mas há razões para otimismo. Em primeiro lugar, a indústria de computador inteiro está agora a trabalhar sobre o problema. Além disso, a mudança para o paralelismo é começar pequeno e crescer lentamente. Os programadores podem cortou seus dentes em dual e quad-core, agora, em vez de saltar para 128 núcleos em uma só penada. 
Um dos maiores fatores, porém, é o grau de motivação. No passado, os programadores podiam apenas esperar por transistores para obter menores e mais rápidos, permitindo microprocessadores para se tornar mais poderoso. Assim, os programas que correr mais rápido sem qualquer novo esforço de programação, que foi um grande desestímulo para quem tentado a formas pioneiras de escrever código paralelo. O La-Z-Boy era do desempenho do programa é agora oficialmente terminada, para que os programadores que se preocupam com o desempenho deve levantar-se fora de suas poltronas e começar a fazer seus programas paralelos. 
Outra razão potencial para o sucesso é a sinergia entre o processamento multi-core e de software como um serviço, ou computação em nuvem, como é freqüentemente chamado. Google Search, Hotmail, e Salesforce alguns aqui-e-agora exemplos de tais serviços, em que o aplicativo que você precisa é executado em um centro de dados remoto, em vez de seu próprio computador. Estes serviços são populares porque eles reduzem o incômodo para os usuários e prestadores de serviços. O usuário só precisa de um navegador e não precisa enganar com instalação de software, atualizações e patches. Os fornecedores de software estão felizes, também, porque os aplicativos são executados somente dentro de um centro de dados onde eles controlam o meio ambiente. Isto permitiu que os desenvolvedores para melhorar seu software muito mais rápido que puder programadores que criam aplicativos tradicionais "shrink-wrap", que devem ser executados em uma série de computadores diferentes, com muitas combinações de hardware e software instalado. 
Programadores experientes podem tirar proveito do paralelismo em nível de tarefa inerente à computação em nuvem. Para atender a milhões de usuários, esses programadores dividir o trabalho a ser executado em milhares de computadores. Porque seu software já utiliza muitos processadores, é fácil para as pessoas de montagem tais operações para abraçar chips de múltiplos núcleos. Na verdade, esses provedores de computação em nuvem ver many-core como uma boa forma de reduzir os custos e não como uma tecnologia disruptiva. Então, esperamos a proliferação vinda de processadores de múltiplos núcleos para aumentar é hoje crescente zelo pela computação em nuvem. 
Apesar destas razões para a esperança, as chances ainda são contra a indústria do microprocessador diretamente completar sua Hail Mary arriscado passar e encontrar alguma maneira abrangente para converter cada pedaço de software para ser executado em muitos processadores paralelos. Eu e outros pesquisadores nos principais centros de computação paralela pesquisa, incluindo Georgia Tech, da Universidade de Illinois, Rice University, Stanford e da Universidade da Califórnia, Berkeley, certamente não espero que isso aconteça. Então, ao invés de trabalhar em linguagens de programação em geral ou projetos de informática, estamos em vez tentando criar algumas aplicações importantes que podem tirar proveito dos microprocessadores many-core. Apesar de nenhum desses grupos é propensos a desenvolver a killer app final, que não é a intenção. Em vez disso, esperamos que o hardware e software que inventar conterá algumas das principais inovações necessárias para tornar a programação paralela simples. Se formos bem sucedidos, este trabalho deve ajudar a inaugurar em qualquer aplicativo finalmente ganha o "assassino" distinção. 
Por exemplo, meus colegas e eu na de Berkeley computação paralela laboratório Lab-o Par decidiram buscar apenas alguns aplicativos de destino. Um deles é o reconhecimento de voz, ou talvez eu devesse dizer a compreensão da fala. Nossa esperança é a de melhorar o software de reconhecimento de voz de forma dramática para que um computador é capaz de reconhecer palavras pronunciadas em ambientes lotados, barulhento e reverberante. Isso ultrapassaria software de reconhecimento de voz bruto de hoje e permitir que coisas como a transcrição de reuniões em tempo real. Existe tal software agora, mas esses programas geram um frustrantemente grande número de erros. 
Um problema que estamos enfrentando neste esforço é que microprocessadores com grande número de núcleos ainda não estão sendo fabricados. Então, nós não temos nada para executar o nosso software experimental diante. E um protótipo de microprocessador many-core levaria anos para projetar e milhões de dólares para fabricar. Nós poderíamos, em princípio, imitar esses chips em software. Mas o software em execução no nível de detalhe necessário para avaliar um projeto 128-core pode levar dias para simular alguns segundos, o que significa que iterações entre hardware e melhorias de software seria dolorosamente lento. 
Podemos, no entanto, contornar esse obstáculo usando matrizes de portas de campo programáveis ​​(FPGA) para simular computadores do futuro. FPGAs são circuitos integrados que contêm grandes coleções de componentes de circuitos que podem ser ligados entre si em tempo real usando uma linguagem especial para descrever a configuração de hardware desejada. E podem ser religado tantas vezes quantas as necessárias. Então, eles oferecem o melhor de dois mundos, tendo a flexibilidade do software, mas também a capacidade de executar 250 vezes mais rápido que os simuladores de software. Essa perspectiva inspirou Research Accelerator para múltiplos processadores (RAMP) do projeto, uma colaboração de quase uma dúzia de universidades e empresas, para criar e compartilhar uma infra-estrutura comum para acelerar a pesquisa em projetos de muitos núcleos. 
Quantas configurações de rampa e ambientes de programação especializadas serão necessários ainda é uma incógnita. Em 2004,Phillip Colella do Lawrence Berkeley National Laboratory afirmou que sete métodos numéricos iria dominar computação científica para a próxima década. Começando com essa alegação, ele, eu e um pequeno grupo de outros cientistas da computação Berkeley passou dois anos avaliando o quão bem estas técnicas sete iria trabalhar em outros campos de atuação. Acabamos expandir a lista de 12 métodos gerais. Pense destes padrões computacionais fundamentais, como aqueles que são tão diferentes como os vários motivos encontrados em, por exemplo, tapetes persa-árvores, espirais, Paisley, e assim por diante. 
Alguns dos 12 motivos computacionais são embaraçosamente paralelo. Tomemos, por exemplo, o que são chamados de métodos de Monte Carlo, que examinam muitos ensaios aleatórios independentes de algum processo físico para determinar um resultado mais geral. Você pode fazer muita coisa com esta abordagem. Você poderia, por exemplo, determinar o valor de pi. Apenas calcular o que acontece quando você joga dardos em um tabuleiro quadrado. Se os dardos acertar pontos aleatórios na praça, que fração deles cair dentro do círculo maior, você pode desenhar no quadro? Calcule esse número para dardos suficiente e você vai conhecer a área do círculo. Dividindo pelo raio ao quadrado, em seguida, dá-lhe um valor de pi. 
Outros motivos podem ser muito mais difícil de realizar, em paralelo, como o problema comum de seqüenciamento através de uma série de estados bem definidos, onde as regras para a transição de um estado para outro dependem dos valores de vários insumos externos. Um computador seqüencial calcula que Estado assuma próximo baseado em qual estado ele se encontra e as entradas apresentadas naquele momento. Tendo vários núcleos disponíveis não fazer muito para acelerar esse processo, por isso a única oportunidade de percorrer a seqüência de estados mais rápido é descobrir antes do tempo as transições de estado que pode estar chegando. Mas isso requer que o computador adivinhar qual estado ele pode em breve encontrar-se em e como as entradas podem mudar no mesmo período. E, quando você errar, leva muito tempo para se recuperar de que você vai ir ainda mais lento do que você teria sem qualquer adivinhação. A esperança é que você vai acertar na maioria das vezes, de modo que, em média, você sair na frente. Descobrir como programar tais especulações sobre transições de estado é complicado, para dizer o mínimo. 
Em 1995, eu fiz algumas previsões públicas de microprocessadores que seria como no ano de 2020. Eu, ingenuamente, espera-se que a comunidade de tecnologia da informação iria descobrir como fazer programação paralela antes de fabricantes de chips começou a enviar o que eu então chamado "micromultiprocessors". Do ponto de vista de 2010, agora vejo três possibilidades para 2020. 
A primeira é que deixar a bola cair. Isto é, o número prático de núcleos por chip atinge um limiar, e o desempenho de microprocessadores pára aumentar. Tal resultado terá um grande impacto sobre a indústria de tecnologia da informação. Microprocessadores provavelmente ainda ficar mais barato a cada ano, e assim que os produtos que os contêm. Mas eles não vão embalar em mais glamour computacional. Considere netbooks como o primeiro passo neste caminho de redução de custos. Tal evolução só vai acelerar a mudança para a computação em nuvem, pois os servidores que estão fazendo o trabalho real será capaz de tirar proveito do paralelismo de microprocessadores de múltiplos núcleos, mesmo desktops e computadores de mão não pode. 
Outra possibilidade é que um grupo seleto de nós será capaz de capturar arriscado Hail Mary passar de hoje. Talvez apenas aplicações multimídia, como vídeo games pode explorar o paralelismo em nível de dados e aproveitar o aumento do número de núcleos. Nesse caso, os microprocessadores de 2020 pode parecer mais com as GPUs da Nvidia, Advanced Micro Devices, Intel e do que os microprocessadores tradicionais de hoje. Ou seja, a GPU será promovida a partir de um show para o evento principal. Não está claro se tais aplicações por si só será capaz de sustentar o crescimento da indústria de tecnologia da informação como um todo. 
O resultado mais otimista, é claro, é que alguém descobre como tornar o software paralelo confiável que funciona de forma eficiente como o número de núcleos aumenta. Que irá fornecer a base muito necessária para a construção do hardware microprocessador nos próximos 30 anos. Mesmo que a rotina dobrando a cada ano ou dois o número de transistores por chip parasse, o fim temido de embalagens Lei inovador de Moore pode permitir que os sistemas econômicos a serem criados a partir de múltiplos chips, sustentando os ganhos de desempenho que os consumidores têm apreciado por muito tempo. 
Embora eu estou torcendo por este desfecho e muitos colegas e eu estamos trabalhando duro para realizá-lo, eu tenho que admitir que este terceiro cenário não é, provavelmente, o mais provável. Assim como a mudança climática global desvantagem alguns países mais do que outros, o que acontece com a indústria de microprocessadores provavelmente será desigual em seu efeito. Algumas empresas vão sucumbir à incapacidade de microprocessadores para avançar na maneira como eles fizeram no passado. Outros irão beneficiar da alteração no campo de jogo novo da computação. 
Não importa o quanto a bola salta, vai ser divertido de assistir, pelo menos para os fãs. A próxima década vai ser interessante.

Continue navegando