UNIVERSIDADE FEDERAL FLUMINENSE ANTONIO ADÍLSON FERREIRA e EDUARDO ASSIS SILVEIRA UM ESTUDO SOBRE PROCESSADORES CELL E GPU: A ANUCIAÇÃO DA NOVA ERA DA COMPUTAÇÃO PARALELA HETEROGÊNEA Niterói 2007 ANTONIO ADÍLSON FERREIRA e EDUARDO ASSIS SILVEIRA UM ESTUDO SOBRE PROCESSADORES CELL E GPU: A ANUCIAÇÃO DA NOVA ERA DA COMPUTAÇÃO PARALELA HETEROGÊNEA Trabalho de Conclusão de Curso submetido ao Curso de Tecnologia em Sistemas de Computação da Universidade Federal Fluminense como requisito parcial para obtenção do Tecnólogo em Sistemas de Computação. Orientador: Leandro Soares de Sousa NITERÓI 2007 ANTONIO ADÍLSON FERREIRA e EDUARDO ASSIS SILVEIRA UM ESTUDO SOBRE PROCESSADORES CELL E GPU: A ANUCIAÇÃO DA NOVA ERA DA COMPUTAÇÃO PARALELA HETEROGÊNEA Trabalho de Conclusão de Curso submetido ao Curso de Tecnologia em Sistemas de Computação da Universidade Federal Fluminense como requisito parcial para obtenção do Tecnólogo em Sistemas de Computação. Niterói,18 de Dezembro de 2007. Banca Examinadora: • Prof . Anna Dolejsi Santos, Dr.Sc. - Universidade Federal Fluminense • Prof. Leandro Soares de Sousa, Msc. - Universidade Federal Fluminense • Prof . Talita de Oliveira Ferreira, Msc. – Universidade Federal do Rio de Janei- ro a a Dedicamos aos nossos pais, responsáveis primeiros pelas dádivas das concepções de nossas vidas. Às empresas AMD, IBM, INTEL e NVIDIA assim como o LANL Los Alamos Lab pela generosidade em tornar público, em seus sítios na Internet, informações vitais para todos sobre o assunto em questão. Aos institutos MIT, GeogeTech e à universidade de Stanford pelos materiais de cursos online. AGRADECIMENTOS A Deus, que ilumina todos os caminhos. A nosso Orientador Leandro Soares de Sousa pelo estímulo e atenção que nos concedeu durante o curso. Às coordenadoras Marta e Rosana do Pólo de Angra dos Reis do CEDERJ por seus enormes e solidários préstimos. Aos colegas de trabalho pelo apoio e suporte: Anis, Jorge e Waldirio (Windows); Leandro (Linux); e Paulo (CELL e GPU). Ao Paulo Fernando pelo enorme espírito democrático, liderança nata e profissional, incentivador da educação e cultura. Às nossas esposas e aos nossos filhos. “Quem não soube a sombra, não sabe a luz.” Taiguara Chalar da Silva “O estilo é uma dificuldade de expressão.” Mário Quintana “Agente vai contra a corrente, até não poder resistir. Na volta do barco é que sente, o quanto deixou de cumprir”. Chico Buarque de Holanda, em Roda Viva, 1967. “Muitos escritores novos dizem que seu maior problema é saber por onde começar. Não é. O maior problema de quem escreve (ou compõe, ou interpreta, ou, principalmente, discursa) é saber onde parar.” Luis F.Veríssimo em “Robinho e o Paradoxo”, O Globo, 1/7/7 “To put it quite bluntly: as long as there were no machines, programming was no problem at all; when we had a few weak computers, programming became a mild problem, and now we have gigantic computers, programming has became an equally gigantic problem.” E. Dijkstra. Turing Award, 1972. RESUMO Este trabalho descreve a origem do multicore e as tendências em computação paralela heterogênea de alto desempenho. Especialmente arquiteturas como GPUs e o processador CELL da IBM, que são o nosso principal alvo de estudo. Fornecemos alguns detalhes de especificações e implementações do hardware e software para estas arquiteturas bem como suas aplicações em diversas áreas de atuação. Nos aprofundamos principalmente na computação de alto desempenho, no processamento gráfico e de multimídia. Detalhamos muitas características, tecnologias envolvidas, programação, mercados de atuação e propostas para novos processadores gráficos, GPUs, e uma nova abordagem para processadores com múltiplos núcleos, heterogêneos, com rede interna e arquitetura SMP, com modelo de programação paralela heterogênea, como tendência tecnológica a ser consolidada. Descrevemos e detalhamos o porquê da tecnologia multicore, e os fundamentos teóricos motivados inicialmente pela Lei de Moore, que ainda vigora mas talvez não vigorará devido aos limites impostos pela Física e estabelecidos pela Mecânica Quântica, que inviabilizam os processos de fabricação atual da eletrônica digital baseado na tecnologia CMOS para processadores de computador e que, possivelmente, serão repensados e redirecionados para uma nova tecnologia. Comentamos sobre os paradigmas da computação atual tanto nos processos de fabricação tecnológicos, com tecnologia CMOS, quanto o de programação seqüencial com a programação serializada e algumas das novas tendências tecnológicas de hardware e software. Mostramos as tendências atuais de fabricação de processadores com múltiplos núcleos, homogêneos e heterogêneos, associados à computação paralela heterogênea de alto desempenho e as novas tecnologias candidatas à substituição da tecnologia CMOS, em especial a Spintrônica como sendo a melhor posicionada. Palavras-chaves: CELL, COMPUTAÇÃO HETEROGÊNEA, GPU, GPGPU, HPC, MULTICORE, PROCESSADOR, PROGRAÇÃO PARALELA, SPINTRÔNICA. LISTA DE ILUSTRAÇÕES Figura 1: Evolução do processos de fabricação de processadores até 2.012...........29 Figura 2: Evolução da potência consumida das CPUs x performance escalar..........30 Figura 3: Limitações físicas inviabilizam o aumento das freqüências........................31 Figura 4: O multicore como solução para as limitações impostas pela Física...........32 Figura 5: Consumo crescente de potência nos últimos 20 anos................................33 Figura 6: A inexorável jornada para o multicore.........................................................34 Figura 7: Evolução da bitola equivalente do fio em ciclos de máquina......................35 Figura 8: Processador single core: em extinção.........................................................36 Figura 9: O singlecore tende a extinção. O multicore floresce...................................37 Figura 10: Problema fundamental: alta dissipação térmica........................................38 Figura 11: Aquecimento das CPUs.............................................................................38 Figura 12: A gênesis do problema está na Física.......................................................39 Figura 13: A inviabilidade de se aumentar a freqüência indefinidamente..................40 Figura 14: A história se repete ou nós já vimos isto ocorrer anteriormente...............41 Figura 15: As diminutas dimensões do processador CELL........................................42 Figura 16: GPUs de mercado: Nvidia Quadro FX 5600 e ATI (AMD) R600.........44 Figura 17: Acelerada evolução do poder computacional das GPUs..........................49 Figura 18 Diagrama de blocos das unidades de processamento das GPUs............56 Figura 19: Características gerais de um CELL...........................................................59 Figura 20: Fotografia da pastilha de um processador CELL.....................................63 Figura 21 Jogos de mercado: Sony PS3, Microsoft Xbox 360 e Nintendo Wii..........70 Figura 22: Cluster Linux de IBM CELL com Sony PS3...............................................88 Figura 23: Lâminas de CELL e IBM CELL Blade Center QS20 ................................89 Figura 24: Instalações típicas de clusteres Linux Beowolf.........................................89 Figura 25: Ambiente Teste: Sun + NV FX 5600 + cluster PS3 + switch Gig E........91 Figura 26: IBM BlueGene/P........................................................................................94 Figura 27: Logo do projeto RoadRunner.....................................................................96 Figura 28: Distintas abordagens e direções na busca do PetaFLOPS......................97 Figura 29 O processador CELL, peça fundamental do projeto RoadRunner............98 Figura 30 Em apenas 18 racks , 7.000 CPUs e 13.000 CELLs : 1 PetaFLOPS......99 Figura 31 Arquiteturas distintas com duas CPUs físicas distintas...........................100 Figura 32 Um exemplo marcante de heterogeneidade............................................103 Figura 33 O futuro imita o passado..........................................................................105 Figura 34 Tributo a Gordon Moore...........................................................124 LISTA DE TABELAS Tabela 1 Exemplos de processadores multicore....................................................... 43 Tabela 2 Características gerais de alguns processadores multicore ......................... 43 Tabela 3 Algumas aplicações para GPGPUs............................................................. 54 Tabela 4 Tipos de operações em GPU e localização de ocorrência ......................75 Tabela 5 Exemplo de limites superiores para GPU..................................................75 Tabela 6 Acesso á memória pelo tipo específico de memória .................................. 78 Tabela 7 Característica de cada memória de uma moderna GPU ............................80 LISTA DE GRÁFICOS Gráfico 1 Evolução do número de transistores nos microchips Intel no tempo.......124 LISTA DE ABREVIATURAS E SIGLAS AMD - Advanced Micro Devices ANSI - America National Standard Interchange API - Application Program Interface ATI - ATI Fabricante de GPUs e Placas de Vídeo (AMD) BW - Broadband With CDC - Control Data Corporation CEDERJ - Centro de Educação Superior à Distância do RJ CELL BE - CELL Broadband Engine CMOS - Complementary Metal-Oxide-Semiconductor CPU - Central Processor Unit CTM - Close to The Metal CUDA - Computer Unified Development Architecture DD - Data Definition DDR2 - Double Data Rate 2 DMA - Direct Memory Access DP - Double Precision DRAM - Dynamic Read Access Memory EIB - Element Interconnected Bus FFT3D - Fast Fourier Transform 3D FLEXIO - Flexible Input Output FORTRAN - Formula Translator FPAP - Floating Point Array Processor FPGA - Field-Programmable Gate Array FPS - Floating Point System GDB - GNU Debugger GEOGIATECH - Georgia Technology Institute GF - Giga Flops GFLOPS - Giga Floating Point Operations Per Second GNU - Gnu is Not Unix GTS - Modelo de GPU da Nvidia GTX - Modelo de GPU da Nvidia HPC - High Performance Computing HT - Hyper Transport HTX - Hyper Transport Extended I/O - Input-Output I486 - Intel Architecture 80486 IBM - International Business Machine IBM BLUE GENE - A PetaFLOPS supercomputer of IBM IBM ES9000 - A mainframe Enterprise System of IBM IBM POWER - Workstation Technology from IBM INTEL - Intel Corporation JCL - Job Control Language LANL - Los Alamos National Laboratory LCM/SCM - Small Fast Core Memory / Large Core Memory LLNL - Lawrence Livermore National Laboratory MASS - Mathematical Application Statistical Subroutines MIPS - Old Manufacturer of Processors MIT - Massachussetts Institute of Technology MPI - Message Passing Interchange NVCC - Nvidia C Compiler NVIDIA - Manufacturer of GPUs OPENMP - Free Library of Message Passing Open PC - Personal Computer PCI EXPRESS - Peripheral Card Interface model Express 16x PDA - Personal Digital Assistants PPE - Power Processor Element PPU - Power Processor Unit PS3 - Sony Game Play Station 3 RAM - Read Access Memory RED HAT WS - Linux Operating System for Workstation ROAD RUNNER - HPC Project of Los Alamos National Lab RPC - Request Procedure for Comments SCEI - Sony Computer Entertainment Inc. SDK - Software Development Kit SGI - Silicon Graphics Inc. SIMD - Single Instruction Multiple Data SM - Single Multiprocessor SMP - Symmetric Multi Processor SOI - Silicon Over Insulator SP - Single Precision SPE - Synergetic Processor Element SSE - Internet Streaming SIMD Extensions STANFORD - Stanford University STI - Joint Venture Sony-Toshiba-IBM TFLOPS - Tera Floating Point Operations Per Second TSUBAME - A supercomputer of Japan WII - A Game of Nintendo Manufacturer X86_64 - Architecture based in Intel 80486 processor XBOX360 - A Game of Microsoft Corporation XDR - Memória Rambus XEON - Processador Intel x86_32, x86_64 bits SUMÁRIO RESUMO......................................................................................................................7 LISTA DE ILUSTRAÇÕES...........................................................................................8 LISTA DE TABELAS.................................................................................................. 10 LISTA DE GRÁFICOS................................................................................................11 LISTA DE ABREVIATURAS E SIGLAS..................................................................... 12 SUMÁRIO...................................................................................................................15 1 INTRODUÇÃO........................................................................................................ 16 2 HISTÓRICO..............................................................................................................18 3 OS PROCESSADORES MULTICORE.................................................................... 20 3.1 CONCEITOS PRELIMINARES......................................................................... 20 3.2 A EVOLUÇÃO DO SINGLECORE................................................................... 22 3.2.1 Os limites da tecnologia singlecore........................................................... 23 3.3 A TECNOLOGIA MULTICORE........................................................................ 24 3.3.1 Arquiteturas Multicore............................................................................... 26 4 O PORQUÊ DA TRANSIÇÃO PARA O MULTICORE.............................................27 4.1 TAXONOMIA DOS MULTICORES...................................................................42 5 GPU..........................................................................................................................44 5.1 FUNÇÕES COMPUTACIONAIS...................................................................... 45 5.2 GPGPU............................................................................................................. 46 5.2.1 Conceitos de Programação em GPGPU.................................................... 47 5.3 PORQUE USAR GPGPU?............................................................................... 48 5.4 TÉCNICAS GPGPU..........................................................................................50 5.4.1 Classificação das operações das GPUs....................................................50 5.5 ESTRUTURA DE DADOS................................................................................53 5.6 APLICAÇÕES EM GPGPU.............................................................................. 53 5.7 DIAGRAMA DE BLOCOS DA GPU..................................................................54 5.8 PRINCIPAIS LINGUAGENS PARA USO EM GPUs........................................56 6 CELL.........................................................................................................................57 6.1 UMA HISTÓRIA ROMÂNTICA ......................................................................... 57 6.2 DA IMAGINAÇÃO À REALIDADE....................................................................57 6.3 DISPOSITIVOS DE VETORIZAÇÃO DO CELL................................................64 6.4 DESENVOLVIMENTO PARA O CELL.............................................................66 6.5 É O PROCESSADOR CELL DE FIM GERAL?................................................67 6.6 A ARQUITETURA RISC ATACA NOVAMENTE..............................................68 7 DIFERENÇAS ENTRE O PROCESSADOR CELL E GPUs....................................69 8 RUDIMENTOS DE SOFTWARE PARA GPUs........................................................ 72 8.1 A ARQUITETURA CUDA COMO PADRÃO PARA GPU..................................73 8.2 CONCLUSÃO SOBRE A ARQUITETURA CUDA EM GPU............................. 76 8.3 UMA IMPLEMENTAÇÃO CUDA NO HARDWARE G80...................................78 8.4 IMPLEMENTAÇÃO DA ARQUITETURA DE MEMÓRIA - G80........................78 8.5 SÍNTESE DO MODELO DE HARDWARE dA G80..........................................79 8.6 APIs PARA GPUs..............................................................................................80 8.7 COMPILAÇÃO EM CUDA................................................................................. 82 8.8 LINK-EDIÇÂO EM CUDA.................................................................................. 82 8.9 DEPURAÇAO EM CUDA.................................................................................. 83 8.10 A NOVA ARQUITETURA DE DESENVOLVIMENTO EM GPUS...................84 9 RUDIMENTOS DE SOFTWARE PARA CELL........................................................85 10 USO DE GPUs E DE CELL NO AMBIENTE HPC................................................86 11 UMA EXPERIÊNCIA PRÁTICA COM GPUS E CELL........................................... 90 12 A COMPUTAÇÃO DE PETAFLOPS...................................................................93 12.1 SISTEMAS DE COMPUTAÇÃO HÍBRIDA ESTÃO CHEGANDO.................101 12.2 “DEJA VU” (PARECE QUE A HISTÓRIA SE REPETE).............................. 104 13 TECNOLOGIAS ALTERNATIVAS A SUBSTITUIÇÃO DO CMOS.....................106 13.1 A EVOLUÇÃO DAS TECNOLOGIAS DOS TRANSISTORES.....................106 13.2 LIMITES de TRANSISTORES na TECNOLOGIA MOSFET........................108 13.3 AS FUTURAS TECNOLOGIAS QUE SE APRESENTAM...........................109 1.1.1Tecnologia de Diodos Ressonantes de Tunelamento ...............................109 1.1.2AUTÔMATOS CELULARES QUÂNTICOS (QCA)....................................110 1.1.3Nanoeletrônica Molecular.......................................................................... 110 1.1.4SPINTRÔNICA...........................................................................................111 14 CONCLUSÕES................................................................................................... 113 REFERÊNCIAS BIBLIOGRÁFICAS........................................................................118 ANEXOS...................................................................................................................122 ANEXO A - LEI DE MOORE.................................................................................... 123 ANEXO B - PRINCÍPIO DA INCERTEZA DE HEISENBERG................................. 128 1 INTRODUÇÃO O objetivo fundamental deste trabalho é de apresentar duas mais importantes tecnologias de processadores da atualidade, CELL e GPU, que despontam e disputam as preferências técnico-científica, comercial e de público para uma enorme gama de aplicações tais como: jogos, computação gráfica e computação de alto desempenho. Ele foi elaborado fundamentalmente através de vários cursos on-line disponibilizados pelos fabricantes IBM, Nvidia, Intel e instituições científicas como MIT, Los Alamos Lab, Geogia Tech, Stanford University, dentre outras, aliado a muitos trabalhos publicados e informações também disponibilizadas na Internet. A motivação básica reside na necessidade de se ter acesso e disponibilidade de computa ção de altíssimo desempenho e a um baixo custo, ou seja, TeraFLOPS por centenas de dólares. Este trabalho não é original nem tem a pretensão de sê-lo, pois procurou extrair aquilo que considerarmos ser de melhor na bibliografia e em todas as referên cias encontradas. A maior dificuldade foi exatamente a escolha e ordenação do conteúdo, imagens, gráficos e figuras, bem como o texto e a ordenação do mesmo numa modesta tentativa de conduzir o leitor de tal forma que este possa ter uma re ferência e um roteiro significativos na língua nacional sobre o tema e, de posse destes, possa guiar-se e enveredar pelo conhecimento nesta área. O despertar do século XXI traz boas novas em termos tecnológicos e, em particular, novíssimas arquiteturas de processadores para enfrentar o desafio imposto pelas necessidades econômicas de baixos custos e ambientais, de melhor e mais racional uso dos recursos energéticos aliados à requisição de processadores muito mais velozes. Em especial, no que tange a computação de alto desempenho, objeti vando apresentar e resolver várias aplicações como processamento de imagens, si mulações, cálculos científicos, pesquisas em biologia, química, física e medicina, processamento sísmico e pesquisas espaciais entre tantas outras. A restrição tecno- 17 lógica fundamental reside nas limitações impostas para consumo de energia e necessidades de refrigeração dos processadores devidos ao enorme consumo e desperdício, provenientes da dissipação de calor, além do grande espaço físico para acomodar os equipamentos e os altíssimos custos de aquisição, manutenção e garantia dos mesmos. Estamos vivendo num momento nitidamente propício para a ruptura do paradigma vigente de computação e programação numa busca de um novo paradigma. No paradigma atual, a computação homogênea, isto é, aquela baseada em processadores com um ou mais núcleos homogêneos idênticos e de mesma natureza como, por exemplo os dos fabricantes Intel ou AMD de um único núcleo (singlecore), dois núcleos (dualcore), quatro núcleos (quadcore), oito núcleos (octocore) [10], etc; e, a programação seqüencial (baseadas em programas compostos por instruções que são executadas passo a passo, seqüencialmente) é seu carro-chefe. Nesta nova era que se vislumbra e que se estabelecerá definitivamente nos próximos dez ou vinte anos, os computadores heterogêneos multicore (baseado em múltiplos núcleos distintos) e a programação paralela (“de pedaços das linhas de códigos a serem executados sequencialmente” ou “um fluxo de controle sequencial isolado dentro de um programa” – threads – sendo executados em paralelo pelos distintos núcleos do processador) [17] reinarão hegemônicos e, motivados pelas de necessidades de computação de alto desempenho e baixos custos, estarão disponíveis para a grande maioria dos usuários em seus próprios desktops, notebooks, laptops, e nos novos dispositivos de tecnologia convergente que se apresentarão, permitindo que a computação de teraflops (trilhões de operações de ponto flutuante por segundo) fique à disposição de todos por custos muito baixos. Duas das tecnologias representantes desta verdadeira revolução, que se configura, podem ser identificadas nos processadores gráficos (GPUs) e nos processadores heterogêneos multicore (IBM CELL, por exemplo), ou, também, nos multicore homogêneos (com microarquitetura x86_64 dual, quad, octocore da Intel ou AMD) [7,10]. Por considerar este tema apaixonante e excitante, modestamente discorreremos em particular sobre estas duas tecnologias e alguns tópicos relacionados ao tema da computação de alto desempenho, computação paralela e os novos desafios delas decorrentes. 18 2 HISTÓRICO No último quarto do século XX, observou-se uma desenfreada e frenética competição na corrida pelo aumento da freqüência do clock, ou seja, da velocidade de operação, dos processadores como o modo mais simples de se obter o aumento de desempenho dos computadores. Desde os 4.77 MHz do IBM PC original lançado em agosto de 1981 [1,2] Xeon ou AMD Opteron até os 3.4 GHz dos monoprocessados e singlecore Intel [7,10] ou, a impressionante freqüência de 4.7 GHz do IBM Power 6 dualcore [3], a corrida parece ter chegado ao seu limiar. Limiar este que esbarrou nos limites decorrentes das propriedades físicas dos materiais envolvidos e de suas dimensões físicas, que definiram uma barreira intransponível para os fabricantes de processadores. Dos fabricantes de processadores apenas a IBM segue em frente, imediatamente, com freqüências de clocks além de 4 GHz [5] como, por exemplo, o seu já citado IBM Power6 que, em sua versão comercial de 2007, pode operar em até 4.7 GHz ou 4.2 GHz ou 3.7 Ghz [3], como possibilidades de atingir algo próximo a 6 Ghz [4] em versões futuras, segundo o próprio fabricante, mas por um custo altamente proibitivo para a maioria dos usuários. Do ponto de vista tecnológico, o custo não é relevante, o que importa é possibilidade de ultrapassar os limites anteriores com inovação tecnológica e pesquisa de novos materiais e propriedades destes para obtenção das metas, mas do ponto de vista econômico-financeiro, é importantíssimo o baixo custo, para uma possível produção em massa e a disseminação dos benefícios da tecnologia para um maior número possível de pessoas e sistemas. As atuais e futuras necessidades computacionais passam diretamente pela obrigatória ruptura com o estabelecido, isto é, dadas as barreiras e restrições de energia finita, espaço exíguo e refrigeração também finita, não se pode ou poderá conceber arquiteturas computacionais gulosas e ineficientes nestes pontos de vista. A mitigação dos recursos energéticos, principalmente, aliada a impossibilidade de se elevar o clock dos processadores a níveis além dos atualmente alcançados (que já atingiu um ponto de temperatura equivalente ou próximo do ponto das reações nucleares e que, se levado avante, alcançaria a temperatura da superfície solar – 19 10.000 graus centígrados), conforme mostram, respectivamente, as Figuras 10 e 11, induzindo obrigatoriamente a uma mudança tecnológica. Esta mudança, pelas razões anteriores e por outras que detalharemos mais à frente, implicou na tecnologia multicore [18] por um lado e por outro, como fruto da natural evolução tecnológica dos conceitos de co-processador matemático dedicado, de uma outra tecnologia: processadores gráficos (GPU) , aplicados inicialmente à computação gráfica e atualmen- [11] te com incursões na área da computação de alto desempenho. As GPUs encontraram um rico e profícuo ambiente de altos e relevantes investimentos no mercado de jogos eletrônicos e na indústria do entretenimento formada pelos desenhos em 3D, sofisticadas texturas, computação física, etc. O mercado de jogos eletrônicos primordialmente é o principal mote da evolução tecnológica das GPUs, representando bilhões de dólares de faturamento, o que permitiu maiores investimentos nesta tecnologia e um alto nível de capitalização dos fabricantes de GPUs, tendo o fabricante Nvidia [9] como o maior e melhor representante como poder comprovado por seus balanços financeiros e valorização de suas ações no mercado de capitais. Por outro lado, grandes fabricantes de computadores e produtos de consumo do mercado de eletro-eletrônico, em defesa de seus interesses, uniram-se numa parceria batizada como IBM STI (Sony, Toshiba e IBM) no despertar deste, que será um luminoso século, para definir aquilo que se espera que não seja apenas uma evolução da tecnologia existente aplicada a um nicho de mercado, como o da computação gráfica ou jogos eletrônicos, mas para a computação de fim geral e também aplicável em problemas mais específicos. Especialistas da IBM denominam esta evolução de “A vingança da arquitetura RISC” [21]. Esta parceria gerou como fruto o IBM CELL Broadband Engine, o CELL BE, a qual detalharemos nos capítulos seguintes bem como a também o faremos com relação a GPU (Graphical Processor Unit). 20 3 OS PROCESSADORES MULTICORE 3.1 CONCEITOS PRELIMINARES As principais partes dos processadores convencionais são 1 – Núcleo (em inglês, Core): [22] : local onde as instru- ções são executadas. Ou seja, é aqui que as coisas realmente acontecem. Que tipo de coisas? Execução de instruções, cálculos, etc. 2 – Cache: é uma memória que se encontra dentro do processador. Ao invés de termos o processador indo buscar dados na memória principal o tempo todo, aplicando-se o Princípio da Localidade [23] , ele possui uma memória interna onde os dados são armazenados temporariamente. O processador procura por um dado primeiramente dentro de sua memória cache antes de ir buscar o dado na memória principal. Por este motivo, o cache também influencia no desempenho do processador. Resumindo, cache é uma pequena quantidade de memória estática de alto desempenho, tendo por finalidade aumentar o desempenho realizando uma busca antecipada na memória RAM. A taxa de acerto típica é de 80% a 90% [11] . Note-se que a palavra Núcleo em inglês é Core. Quando colocamos dentro de um processador mais do que um núcleo, ele se torna um processador Multi-N úcleos ou MultiCore. No caso dos processadores que possuem dois núcleos, eles são chamados de DualCore. Qualquer que seja o processador, quando ele for identificado 21 como sendo Dual Core, terá dois núcleos de execução. Quando os processadores DualCore começaram a aparecer no mercado , dizia-se que tínhamos colocado [24] dois processadores em um. Isso não é verdade mas serve muito bem como analogia. Há também, os processadores que possuem 4 (quatro) núcleos. Esses processadores são chamados de QuadCore e estão presentes hoje em desktops e servidores. Tanto a empresa Intel como a sua concorrente em arquiteturas x86, fabricam processadores dualcore e quadcore disponíveis no mercado como, por exemplo, Intel Xeon Core Duo (para laptops e desktops), Intel Xeon Quad Core (para servidores), AMD Opteron Dual Core, AMD Opteron Quad Core. Os processadores IBM Power5+ e IBM Power 6 são dualcore [8]. Existem também, no mercado, processadores com 8 núcleos como o Sun T1 [25] ou de 9 (nove) núcleos como o IBM CELL [26] , que está incorporado nas consoles de jogos Sony PS3 e outros com muitos núcleos, ditos manycores ainda não comercializáveis ou em testes nos laboratórios dos fabricantes como o Octocore da Intel, o Octocore da AMD, o MIT Raw (16 núcleos), etc. Existem processadores ainda não comerciais como o Intel Larrabee de 80 (oitenta) núcleos ou outros em desenvolvimento, como na universidade de Tókio com 512 núcleos denominado Grape DR e destinado à computação de alto desempenho (HPC) [30]. A existência de vários núcleos dentro dos processadores é uma tendência e deve-se esperar que a quantidade de núcleos cresça para além dos quatro existentes hoje como os vistos no parágrafo anterior. Colocar vários núcleos dentro de um processador foi uma das formas encontradas para se aumentar ainda mais o seu desempenho. Isto gerou uma quebra de paradigma (tabú). O desempenho dos processadores sempre foi definido simplificadamente pelo clock (freqüência de operação do processador), ou o popular GHz (gigahertz, ou seja, tendo hertz como unidade de medida de freqüência). Esta foi uma boa medida durante muito tempo. Quando vamos para processadores com múltiplos núcleos, a coisa muda de figura. Processadores com dois núcleos e com freqüência de clock menor possuem desempenho superior a processadores com um único núcleo trabalhando a uma freqüência 22 maior. Ou seja, ao analisarmos o desempenho de processadores não devemos considerar a freqüência do clock como o único e exclusivo indicador de desempenho. Os processadores têm um ou mais núcleos e uma ou mais memórias cache. Internamente, o núcleo ainda é subdividido em vários componentes. A forma como os elementos internos do núcleo estão dispostos, como eles irão se comunicar, a maneira como o cache será acessado, como as instruções serão executadas – serializadas ou em paralelo - etc, tudo isso define o que chamamos de Microarqui tetura. É a partir de uma concepção de Microarquitetura que os processadores são criados. Os processadores criados a partir de uma mesma Microarquitetura terão as mesmas características básicas, apesar de poderem ter pequenas alterações para funcionamento em desktops, notebooks ou servidores devido às particularidades distintas de cada um destes como dimensão física, alimentação, autonomia, robustez, etc. Porque uma Microarquitetura é importante? A mudança de uma Microarquitetura pode fazer com que uma nova geração de processadores atinja um desempenho (performance) muito melhor e consiga, por exemplo, ter um consumo muito menor de energia, como é a proposta dos multcores: IBM CELL (9 cores e heterogêneo: 1 PPE e 8 SPEs) [28] ; e os homogêneos Intel Larrabee (80 cores), Sun T1 (octocore) [27], AMD Barcelona (quadcore), Intel Xeon (quadcore) [10], etc. 3.2 A EVOLUÇÃO DO SINGLECORE Os processadores multicore representam uma grande revolução da tecnologia computacional. São capazes de prover maior capacidade de processamento com uma relação entre custo e benefício melhor do que os processadores singlecore. São uma resposta científica às crescentes demandas por desempenho e uma forma de contornar as limitações impostas pela Física para os processadores singlecore, preservando o paradigma vigente da tecnologia CMOS. 23 3.2.1 OS LIMITES DA TECNOLOGIA SINGLECORE As demandas de complexas simulações 3D, arquivos de streaming media, níveis adicionais de segurança, interfaces do usuário mais sofisticadas, bancos de dados mais robustos e cada vez mais e mais usuários conectados on-line estão sempre requisitando por maior poder de processamento. A solução aplicada até agora, de maneira simplificada, foi aumentar a freqüência de operação dos processadores, aumentando-se assim a sua capacidade de processamento. Isto exige que o processo de fabricação de transistores seja feito em camadas de silício cada vez menos espessas. Entretanto, este método de fabricação tem seus dias contados [28] o que obriga a busca de uma tecnologia alternativa para a fabricação de circuitos integrados e, com eles, microprocessadores. Conforme Figura 1, podemos verificar que as tecnologias de fabricação de 90 nm com espessura de porta de 50 nm, e as seguintes deverão ter sua exaus tão lá pelos idos de 2012, conforme previsões dos cientistas das empresas fabricantes de processadores. Isto porque, quanto menor for à largura da porta mais próxima as regiões da fonte e do dreno do transistor ficarão. Pelas leis da Física Quântica, quando a largura da porta atingir a 5 nm, a fonte e o dreno ficarão separados por um trecho de silício tão pequeno que não se conseguirá isolá-los completamente, gerando uma probabilidade de 50% de que a corrente flua mesmo quando não houver ten são aplicada à porta (este fenômeno denomina-se na Física Quântica de tunelamento do elétron). Quando isto ocorre, o transistor deixa de ser confiável como dispositivo de processamento de dados pois passamos a não ter mais controle sobre seu comportamento ou propriedades [28,29] . Além disso, temos outro problema ainda mais grave: a dissipação de energia em forma de calor. Devido à miniaturização dos novos processos de fabricação de circuitos integrados, cada vez mais se fabricam processadores com mais e mais transistores equivalentes em menores áreas do chip. Quanto menores são os transistores do circuito integrado, maior sua “densidade superficial” , ou seja, o número de transistores por unidade de área. O acúmulo de um número muito grande de transistores numa área tão pequena concentra tremenda- 24 mente a produção de calor devido à dissipação de energia pela corrente elétrica que circula nos transistores (dada pela Lei de Joule:P = i2 R) [31] . Se essa energia não for rapidamente removida do circuito e transferida para o ambiente, o chip atingirá temperaturas tão elevadas que, literalmente, derreterá [32] . As Figuras 10 e 11, respectivamente, mostram a evolução da energia dissipada por processador. Afirmam os cientistas que, mesmo que se conseguisse contornar o limite da largura de porta, não haveria como remover o calor do processador com a mesma velocidade com que ele seria produzido. O chip se autodestruiria [22]. Além dessas, há diversas outras limitações impostas pela arquitetura de núcleo único. Entre elas, temos que a estreita banda de dados, aliada a grande diferença entre a velocidade do processador e a da memória, faz com que 75% do tem po da CPU, em média, seja gasto esperando por resultados dos acessos à memória [33]. 3.3 A TECNOLOGIA MULTICORE A tecnologia multicore (múltiplos núcleos) consiste em colocar duas ou mais unidades de execução (cores) no interior de um único “pacote de processador” (um único chip). O sistema operacional trata esses núcleos como se cada um fosse um processador diferente, com seus próprios recursos de execução. Na maioria dos casos, cada unidade possui seu próprio cache e pode processar várias instruções simultaneamente. Adicionar novos núcleos de processamento a um processador possibilita que as instruções, das aplicações, sejam executadas em paralelo em vez de serialmente, como ocorre em um único núcleo (considerando um único pipeline de execução - pipeline é uma técnica de hardware que permite que a CPU realize a busca de uma ou mais instruções além da próxima a ser executada [11] ). 25 Os processadores de múltiplos núcleos permitem trabalhar em um ambiente multitarefa. Em ambientes de um só núcleo, as funções de multitarefa podem ultrapassar a capacidade da CPU, o que resulta em queda de desempenho enquanto as operações aguardam serem executadas. Em sistemas de múltiplos núcleos, como cada núcleo tem seu próprio cache, o sistema operacional dispõe de recursos suficientes para lidar com o processamento intensivo de tarefas executadas em pa ralelo. Portanto, melhora-se a eficiência do sistema como um todo e o desempenho dos aplicativos, em computadores que executam vários aplicativos simultaneamente. A presença de vários núcleos é particularmente eficaz quando uma das aplica ções deve ficar sendo executada continuamente (ou quase), como no caso dos dispositivos das consoles gráficas de jogos, nos dispositivos de convergência digital (som, vídeo, etc), entre outros. As principais vantagens da arquitetura multicore são: 1. Maior eficácia (throughput) do sistema e desempenho aprimorado de aplicativos em computadores que executam vários aplicativos simultaneamente. 2. Desempenho aprimorado para aplicativos multi-threaded. 3. Maior capacidade para mais usuários ou tarefas em aplicativos com muitas transações. 4. Desempenho superior em aplicativos que utilizem processamento de forma intensiva. 5. Economia no preço do licenciamento de software proprietário, passando a ter um maior poder de processamento sem necessitar de uma nova máquina (os fabricantes de software podem rever suas políticas de comercialização de licenças de software por processador para core, minimizando esta vantagem). 6. Redução da dissipação térmica quando comparado ao singlecore. 26 3.3.1 ARQUITETURAS MULTICORE Uma arquitetura multicore é, geralmente, um multiprocessamento simétrico (SMP) implementado em um único circuito VLSI (Very Large Scale Integrated). O objetivo é melhorar o paralelismo no nível das threads, ajudando especialmente as aplicações que não conseguem se beneficiar dos processadores superescalares atuais, por não possuírem um bom paralelismo ao nível de instruções. Essa arquite tura propicia o chamado paralelismo em nível de chip. Algumas de suas vantagens são: melhor localidade de dados se comparado com outras arquiteturas de multi-processamento; melhor comunicação entre as unidades; economia de espaço e ener gia. É importante observar que o aumento de throughput não ocorre ao acaso da execução de uma única aplicação que não possa ser paralelizada, mas, nos outros casos, e sempre que se considera o sistema como um todo (rodando várias aplicações simultaneamente), tal aumento é bastante notável. Com todas essas vantagens, os multicores apresentam uma melhor relação custo / benefício do que os singlecore. Uma alternativa ao multiprocessamento simétrico, ou SMP (Symmetric Multi Processing), é uma arquitetura de multiprocessadores na qual dois ou mais processadores idênticos são conectados a uma única memória principal. Isso permi te que qualquer processador trabalhe em qualquer tarefa, não importando onde ela esteja localizada. Assim, é possível ficar movendo as tarefas entre processadores de modo a tornar a carga de trabalho o mais eficiente possível. Porém, há um custo a se pagar: como a memória é muito mais lenta que o processador, se em arquiteturas singlecore é gasta uma grande parcela de tempo esperando pelos dados da memória, na SMP fica pior ainda, pois vários processadores podem ficar esperando por uma mesma memória [22]. 27 Uma alternativa ao SMP é a NUMA (Non-Uniform Memory Access), na qual cada processador tem a sua própria parte de memória. Essa arquitetura permite acessos paralelos à memória, melhorando em muito o throughput, se os dados de um processo forem bem localizados. Por outro lado, o custo de se mover os dados de um processador para o outro fica bem mais caro, ou seja, balancear a carga de trabalho é bem mais custoso do ponto de vista computacional, ou seja, exige mais recursos de processador, rede, ocupação de banda, comunicação e tempo . [11] Há ainda alternativas não tão utilizadas como as acima: o Multiprocessamento Assimétrico (ASMP) designa diferentes processadores especializados para tarefas específicas, enquanto que, no multiprocessamento com clusters de computadores, nem toda a memória está disponível para todos os processa - dores [22]. Como exemplo de implementação multicore podemos citar: Intel Xeon Core Duo, Intel Xeon Quad Core, Intel Larrabee (80 cores), AMD Opteron Dual Core, AMD Barcelona Quad Core, SUN T1 (octocore), IBM Power 6, IBM CELL (ninecore), etc. 4 O PORQUÊ DA TRANSIÇÃO PARA O MULTICORE Como visto anteriormente, a corrida pelo aumento de desempenho dos processadores com o mais conveniente e fácil procedimento, que é o da elevação do clock do processador, atingiu o seu ápice ao esbarrar no superaquecimento e na baixa relação entre o desempenho e o consumo de energia, medido agora não em milhões de instrução de ponto flutuante por segundo apenas, mas também dividido pelo consumo energético em watts (GFLOP/Watt). Além do aumento do clock, a tecnologia de múltiplos processadores numa mesma placa mãe (sistemas multiprocessados – ditos MP) não era, por si só, suficiente devido a vários problemas de gerenciamento do sistema operacional e, mais especificamente, o da memória ou do ca- 28 che ou cachês associados a um ou vários dos processadores. O resultado não era suficiente e deparava-se com a Lei de Amdahl [35] para sistemas multiprocessados, ou seja, tudo indicava não adiantar juntar muitos processadores numa mesma placamãe devido ao custo-benefício e as dificuldades de gerenciamento acrescido do problema das aplicações não aproveitarem esta arquitetura do tipo SMP (Symmetric Multi Processing). O problema crucial é o do consumo energético. Como resolver ou contornar? Não foi e não é simples. Uma idéia, que foi implementada com distintas arquite turas, foi a de aumentar o número de cores ou núcleos numa mesma pastilha ou chip. Assim, para um pequeno aumento no consumo energético poderíamos aumentar, em tese, significativamente o desempenho. A tecnologia de 90 nm dos chips assim o permitia e os primeiros, em verdade, eram como ainda muitos o são, apenas dois cores acoplados numa mesma pastilha, isto é, praticamente se estendeu à tecnologia SMP a um único processador, por analogia, com o diferencial de ser controlado por um único sistema operacional. Outra abordagem é a de uma arquitetura multicore, mas com um barramento interno de comunicação de alta velocidade entre esses núcleos ou cores, ou seja, em rede. Neste ponto, devemos frisar bem que, enquanto a GPU é uma sofisticada evolução de um co-processador, o IBM CELL, um processador heterogêneo formado por vários e distintos processadores em uma mesma pastilha e estes interconectados entre si através de uma rede compartilhada de alta velocidade, é uma revolucionária proposta de uma nova arquitetura de um processador nativamente paralelo e internamente em rede. De fato, não é uma proposta, é uma realidade e o futuro pró ximo irá julgar a ousadia de seus criadores (STI) . [36] Para nosso discurso inicial, acrescentarmos convenientemente alguns gráficos e diagramas, que enriqueçam ou comprovem nossos argumentos. A transição obrigatória para o multicore está na Física. São as propriedades e leis físicas que implicam diretamente no multicore [34]. 29 Figura 1: Evolução do processos de fabricação de processadores até 2.012. Fonte: Webinar da Intel, www.intel.com em 20 de março de 2007 [34]. Como podemos observar na Figura 1, os processos de fabricação de chips estão cada vez mais provocando um adensamento de transistores numa menor área. É esperado que se atinjam processos de fabricação que possibilitem até 22 nm no ano de 2012. Atualmente são comercializados chips com tecnologia de 65nm e os de 45 nm deverão se tornar comercializáveis até 2009. Historicamente, a análise de processadores monoprocessados revela que enquanto o desempenho cresce linearmente, a potência necessária para operação deste cresce exponencialmente como pode ser exemplificado com os processadores da Intel do i486 ao Pentium(Prs) na curva normalizada ao consumo de energia do i486 da Figura 2, demonstrando assim a insustentabilidade de se tentar aumentar o desempenho de processadores apenas com o aumento da freqüência pois, do ponto de vista energético, o consumo é excessivamente ineficiente e implica numa enorme necessidade de refrigeração, o que inviabiliza soluções tecnológicas nesta direção. 30 Figura 2: Evolução da potência consumida das CPUs x performance escalar Fonte: Webinar da Intel, www.intel.com em 20 de março de 2007 [34]. Como conseqüência da Lei de Moore [anexo A] , a quantidade de transistores dobra a cada dezoito meses, o que adensa mais ainda o número de transistores numa menor área do chip, enquanto a espessura do óxido também se encurta, aumentando as freqüências e reduzindo o limiar das voltagens envolvidas. Mas a espessura já atingiu as dimensões atômicas e não pode mais ser encurtada tão rapida mente. Logo, só podemos obter pequenos aumentos de freqüências com menores reduções na voltagem, o que implica num maior consumo energético e maior dissi pação térmica como esboçado na Figura 3. 31 Figura 3: Limitações físicas inviabilizam o aumento das freqüências Fonte: Webinar da Intel, www.intel.com em 20 de março de 2007 [34]. Em longo prazo, a única solução a ser considerada, sem levar em conta novas descobertas na ciência dos materiais e na física, seria a de introduzir vários núcleos num mesmo chip, ou seja, passar-se a fabricar e produzir processadores com múltiplos núcleos em uma mesma pastilha, levando-se em conta a viabilidade de fazê-lo devido ao adensamento de transistores, causado pelas novas tecnologias de fabricação de chips, como conseqüência da Lei de Moore, contornando os problemas determinados pelas limitações da Física e, principalmente, observando que com múltiplos núcleos num mesmo chip, podemos assim obter um melhor desempenho do processador com uma maior eficiência energética. Portanto, a tecnologia de fabricação de processadores com muitos núcleos, dita multicore, vem obrigatoriamente, como uma forma de contornar as limitações impostas leis da Física e assim obter um maior desempenho, com maior eficiência energética e melhor gerenciabilidade técnica, isto é, menor necessidade de refrigeração do calor gerado pela dissipação térmica do processador. 32 Figura 4: O multicore como solução para as limitações impostas pela Física Fonte: Webinar da Intel, www.intel.com em 20 de março de 2007 [34]. Por exemplo: suponhamos um chip com um dado número de transistores e a este associado uma potência unitária e um desempenho unitário. Para aumentarmos o desempenho de maneira ingênua e direta, quadruplicamos o número de transistores num chip maior, significando apenas a duplicação do desempenho a um custo também quadruplicado da potência consumida. Por outro lado, se formos capazes de colocar quatro pequenos núcleos com o mesmo número de transistores da hipótese inicial, num mesmo chip poderíamos obter ao invés de um único chip com um único núcleo, um novo chip com quatro núcleos mais eficiente em performance e consumo energético, além de menor dissipação térmica (Figura 4). 33 Figura 5: Consumo crescente de potência nos últimos 20 anos. Fonte: MIT Course 6.189 IAP, 2007 [37] O aumento do número de transistores no chip devido à Lei de Moore e o associado aumento da potência consumida pelo chip, medida em Watts (Figura 5), provocaram, quase que obrigatoriamente, a marcha para o multicore, como pode ser visto na Figura 6. 34 Figura 6: A inexorável jornada para o multicore Fonte: MIT Course 6.189 IAP, 2007 [37] Estima-se que até o ano de 2012 já se possam construir chips com processo de fabricação de 0,02 microns em pastilhas de 400 mm2 com freqüências de clock de 13.5 GHz, conforme pode ser visto na Figura 7. Atualmente, o que está disponível no mercado são os chips com tecnologia de fabricação CMOS de 45 nm e wafer de 300 mm2 com processadores multicore de até oito núcleos de vários fabricantes como Intel, AMD, Sun (com oito núcleos), IBM com dois núcleos para processadores Power5+ e Power6 e nove núcleos com processadores CELL. Cabe lembrar que, na microeletrônica, um wafer é uma fina fatia de material semicondutor, assim como o cristal de silício, na qual microcircuitos são construídos pela dopagem (por exemplo, difusão ou implantação de íons), separação química com ácidos, e deposição de vários materiais. Wafers são importante chave para a construção de dispositivos de semicondutores, assim como circuitos integrados. Eles são feitos de tamanhos variados, de cerca de 1 polegada (25,4 mm) até 11,8 polegadas (300mm) e espessura da ordem de 0,5 mm. Geralmente, eles são provenientes do corte de uma barra pura de um material cristalizado, usando-se para o corte uma serra de diamante ou um fio desse mesmo material, e então polidos em uma ou nas duas faces. Os wafers fazem parte do resultado final do processo de fabricação de processadores 35 para computador: hoje em dia, aproximadamente cada wafer gera 400 microprocessadores [61]. Figura 7: Evolução da bitola equivalente do fio em ciclos de máquina Fonte: MIT Course 6.189 IAP, 2007 [37] Como uma conseqüência imediata da chegada dos processadores multicore no mercado, motivada pelas necessidades de maior desempenho a custos de consumo e gerenciamento energéticos mais baixos e contornando problemas da Fí sica, parece inexorável a extinção dos processadores com um único núcleo, ou singlecore. Este movimento e tendência podem ser avaliados conforma apresentado na Figura 8. 36 Figura 8: Processador single core: em extinção Fonte: MIT Course 6.189 IAP, 2007 [37] Na verdade, já podem ser vistas e comprovadas as movimentações do mercado nesta direção desde os primeiros anos deste século, com concentrações e forte tendência após 2004, conforme exposto na Figura 9, com destaque para MIT Raw (2004) não comercial, o IBM CELL (2005) e o IBM Power 6 (2006) neste perío do. 37 Figura 9: O singlecore tende a extinção. O multicore floresce. Fonte: MIT Course 6.189 IAP, 2007 [37] O problema fundamental que levou à tecnologia de processadores multicore, como visto anteriormente, foi o da necessidade de se reduzir a potência consumida pelos processadores das gerações anteriores (Figura 10), cujas energias dissi padas já beiravam a temperaturas de reações nucleares e, se levadas avante, temperaturas equivalentes à da superfície solar (Figura 11), que seriam inimagináveis ou de difícil implementação, inviabilizando novos projetos de fabricação de processadores. O multicore floresce na tentativa de contornar três barreiras intransponíveis devido às limitações da tecnologia CMOS: a de energia, a de potência e de tamanho de escala ou dimensões dos transistores na pastilha ou wafer definidas pela Mecânica Quântica [29]. 38 Figura 10: Problema fundamental: alta dissipação térmica Fonte: MIT Course 6.189 IAP, 2007 [34] Figura 11: Aquecimento das CPUs Fonte: MIT Course 6.189 IAP, 2007 [34] A causa fundamental do problema, apresentado nas figuras 10 e 11, está na sua natureza física, pois a potência consumida é proporcional ao quadrado da voltagem e a freqüência de operação. Isto significa que para os processos de fabri- 39 cação de 65 nm os problemas de alimentação do processador e refrigeração seriam intransponíveis (Figura 12). Figura 12: A gênesis do problema está na Física. Fonte: MIT Course 6.189 IAP, 2007 [34] Re-avaliando e analisando historicamente o problema, verificamos que o mesmo já havia ocorrido desde o instante inicial da produção do primeiro processador nos idos de 1945 até data de 1990, com a inserção do mainframe IBM ES9000 (Figura 13). 40 Figura 13: A inviabilidade de se aumentar a freqüência indefinidamente Fonte: MIT Course 6.189 IAP, 2007 [34] Naquela oportunidade, ainda foi possível uma quebra de paradigma baseada na introdução de uma nova tecnologia, findando assim a era dos processadores com tecnologia Bipolar e surgindo uma nova era da tecnologia de processadores CMOS. Mas, esta nova era com seu novo paradigma tecnológico resistiu uns poucos quinze anos, até 2005, e já demonstra as suas vulnerabilidades teoricamente previstas, ou seja, necessita de ajustes tecnológicos, como indicado pela Figura 14, que é chegado o momento. Estes ajustes tecnológicos visam equilibrar melhor o balanço de energia, permitindo que além de aumentar ligeiramente as freqüências de cada núcleo, pode-se fazê-lo minimizando o consumo energético do processador como um todo, assim garantindo um melhor desempenho do mesmo. Portanto, o novo paradigma tecnológico: o de multicore com processamento paralelo heterogêneo se vislumbra como o florescer desta novíssima era do multicore e da computação paralela heterogênea e de teraflops num desktop. 41 Figura 14: A história se repete ou nós já vimos isto ocorrer anteriormente. Fonte: MIT Course 6.189 IAP, 2007 [34] Um dos melhores exemplos desta ruptura tecnológica, que podemos exibir, é a do processador IBM CELL, com suas diminutas dimensões, alta densidade de transistores (cerca de 241 milhões), alta freqüência de operação (3.2 GHz), heterogeneidade de processadores (1 PPE + 8 SPE) e altíssimo desempenho (240 GFLOPS teoricamente). Um novo olhar tecnológico se aproxima para iluminar nossa visão. O CELL não pode esperar, nem nós podemos esperar o CELL (Figura 15). 42 Figura 15: As diminutas dimensões do processador CELL Fonte: MIT Course 6.189 IAP, 2007 [34] 4.1 TAXONOMIA DOS MULTICORES Os multicores podem ser divididos em três principais grupos, descritos na seqüência: Memória Compartilhada: Neste os processadores comparti- lham uma única memória comum, acessível por todos os núcleos. Rede Compartilhada: Os núcleos compartilham internamente um barramento exclusivo para comunicação entre eles próprios. Crippled ou Minicores: Os núcleos ou minicores são desabilita- dos de algumas funções básicas para fins de simplificação e aproveitamento de projetos mais sofisticados em processadores mais simples e mais baratos – um tipo de desmembramento. Memória Compartilhada Rede Compartilhada Crippled ou Minicores 43 Intel Yonah, AMD Opteron MIT Raw Intel Tflops IBM Power 5 & 6 IBM CELL PicoChips Sun Niagara T1, T2 Tabela 1 Exemplos de processadores multicore Fonte: MIT Course 6.189 IAP, 2007 [34] Algumas das significativas características dos computadores listados na Tabela 1 são detalhadas na Tabela 2, a seguir: Processador Multicore Características Intel Yonah, AMD Opteron Primeiro dualcore comercial da Intel, lançado em 2005, com 65 nm e também com versão singlecore IBM Power 5 & 6 Processadores dualcore IBM, sendo que o Power 6 pode atingir até 4.7 Ghz de clock, lançado em 2007 para servidores high-end Sun Niagara T1, T2 Denominado T1 pela Sun, possui 8 cores e 32 threads, enquanto o modelo T2 possui 8 cores e 64 threads simultâneas. MIT Raw Multicore experimental do MIT com 16 cores com rede interna de alta velocidade IBM CELL Bastante discutido neste trabalho, 9 cores heterogêneos (1 PPE + 8 SPEs) Intel Tflops Nome inicial para projeto Intel do processador com 80 cores PicoChips Multicore heterogêneo, constituído de muitos microprocessadores que podem ser desmembrados e agregados para constituir funções de processamento específicas Tabela 2 Características gerais de alguns processadores multicore Fonte: Sites dos fabricantes (Intel [7], IBM [8], Sun [25], MIT [14]) 44 5 GPU GPU ou unidade de processamento gráfico (Graphical Processor Unit) é um dispositivo de renderização gráfica para PC, workstation ou console de jogos eletrônicos. As modernas GPUs são muito eficientes em manipular e exibir gráficos computadorizados e suas estruturas internas altamente paralelas as tornam mais eficientes que as CPUs típicas e convencionais, para uma faixa de algoritmos que requisitam um intenso e massivo uso de cálculos. Uma GPU pode alojar-se numa placa de vídeo em separado ou estar integrada na própria placa mãe. Na Figura 16, temos exemplos de GPUs. Figura 16: GPUs de mercado: Nvidia Quadro FX 5600 e ATI (AMD) R600 Fonte: Sites dos fabricantes Nvidia [9] e AMD [10] As modernas GPUs são descendentes dos chips gráficos monolíticos dos idos anos de 80 e 90 e possuem hardwares especializados, que são capazes de efetuar a maior parte de operações gráficas 2D e operações para traçar retângulos, triângulos, círculos e arcos. As mais recentes também já possuem suporte a 3D e tipicamente incluem funções relativas a processamento de vídeo digital. Algumas GPUs podem fazer uso de DMAs (dispositivos de acesso direto à memória) para reduzir os tempos de load/restore nos processadores dos hosts associados. As GPUs surgiram da especialização de funções gráficas e ainda hoje estão para os processadores como os co-processadores das famílias inicias de x86, 45 ditos x87. Esta analogia será crucial para entendimento das diferenças nos capítulos seguintes. Hoje, as GPUs paralelas avançam contra mercados específicos dominados pelas CPUs convencionais, como veremos, devido à alta especialização de suas funções, num elevado grau de paralelismo e acentuado poder de computação aritmética. O mercado de entretenimento formado pelos jogos eletrônicos e desenhos animados em 3D foi o grande impulsionador das GPUs e aceleradores gráfi cos, permitindo uma enorme capitalização das duas principais empresas responsáveis pelo desenvolvimento e comercialização de GPUs: Nvídea e ATI (atualmente incorporada como uma divisão pela fabricante de processadores AMD). 5.1 FUNÇÕES COMPUTACIONAIS As GPUs mais recentes usam a maior parte de seus transistores para efetuar cálculos relativos a gráficos computacionais 3D. Elas foram inicialmente usadas para acelerar o trabalho de mapeamento de texturas e renderização de polígonos com uso intensivo de memória, posteriormente foram adicionadas unidades para aceleração de cálculos geométricos tais como as transformações de vértices entre diferentes sistemas de coordenadas. Desenvolvimentos recentes, em GPUs, incluem suporte para sombreamentos programáveis, que podem manipular vértices e texturas com muitas das mesmas operações suportadas pelas CPUs, com técnicas de extrapolação e interpolação para reduzir as distorções, e com alta precisão no espaço de cores. Devido a maior parte destas computações envolverem matrizes e vetores, engenheiros e cientistas demandaram maiores estudos do uso de GPUs para cálculos não-gráficos [11]. 46 5.2 GPGPU Um novo apelo comercial com a mudança de nome de GPU para GPGPU, busca efetuar um novo enquadramento das GPUs no mercado diretamente dominado pelas CPUs, pois quando estas são comparadas com os processadores convencionais atuais são de desempenho muito superior para aplicações especializadas de diversas ordens, como as científicas, que fazem uso intensivo de cálculos aritméticos e uma nítida paralelização muito própria e conveniente às arquiteturas das GPUs existentes. A General-Purpose Computing on Graphics Processing Units (GPGPU), ou GPU de fins gerais, é uma recente tendência que força e incentiva o uso de GPUs para efetuar computação no lugar de CPUs. A adição de estágios programáveis e precisão aritmética mais alta para pipelines de renderização permitem aos desenvolvedores de software usar as GPUs para aplicações não relacionadas a gráficos apenas. Pela exploração das arquiteturas extremamente paralelas das GPUs, que usam a abordagem de processamento de stream (um stream é uma seqüência da dados que podem ser números, cores, vetores RGBA, etc.), muitos problemas de computação em tempo real podem ser acelerados consideravelmente [12] . Por muitos anos as funcionalidades das GPUs foram limitadas. De fato, por muitos anos elas foram usadas para acelerar certas partes dos pipelines gráficos. Algumas melhorias eram necessárias antes que a GPGPU se tornasse factível. A facilidade de programação e os tipos de dados foram as principais melhorias acrescentadas as GPUs, para permitir sua melhor utilização pelos desenvolvedores de jogos para obter efeitos mais realísticos. O desenvolvedor não precisa ficar muito preocupado em portar seu programa para GPUs, pois não é uma tarefa tão difícil quanto no caso do processador CELL, mas, com relação às estruturas de dados, estas sim precisam ser mais bem detalhadas e compreendidas. 47 5.2.1 CONCEITOS DE PROGRAMAÇÃO EM GPGPU As GPUs são projetadas especificamente para gráficos e assim são muito restritas em termos de operações e programação. Por causa de sua natureza, as GPUs não são eficientes para lidar com problemas que podem ser resolvidos usando-se processamento de stream e o hardware só pode ser usado em certas ocasiões [11]. PROCESSAMENTO STREAM As GPUs só podem processar vértices e fragmentos independentes, mas podem processar muitos deles em paralelo. Portanto, é especialmente eficiente quando o programador quer processar muitos vértices da mesma forma. Neste sentido, as GPUs são stream processadas -- os processadores que podem operar em paralelo pela execução de um único kernel ou muitos registros num mesmo stream de uma única vez. Um stream é simplesmente um conjunto de registros de computação similar. Nas GPUs, vértices e fragmentos são elementos no stream e vértices e sombreadores de fragmentos são os kernels a serem executados sobre eles. Logo, as GPUs processam elementos independentemente, se os dados são compartilhados ou estáticos. Para cada elemento só podemos lê-lo da entrada, efetuar operações sobre ele, e gravá-lo na saída. São permitidas múltiplas entradas e múltiplas saídas, mas nunca um pedaço de memória que é de leitura e gravação simultaneamente. Aritmética intensiva é definida como a operação executada por palavra de memória transferida. É importante para aplicações GPGPU que se tenha aritmética intensiva ou a latência de acesso à memória limitará a velocidade de computação. 48 Aplicações ideais para GPGPU possuem grandes arquivos, alto paralelismo, e mínima dependência entre os elementos de dados. 5.3 PORQUE USAR GPGPU? As GPUs hoje são bens de consumo praticamente adquiríveis e vendáveis como commodities (produtos de prateleira) e possuem preços relativos muitos baixos, sendo o melhor e mais poderoso hardware computacional mensurado em GFLOPS pelo menor custo, ou seja, o melhor valor por dólar empregado. Portanto, tem sido uma excelente opção de todos que dos seus recursos necessitam para suas aplicações extensíveis um pouco além de suas características específicas de processamento gráfico, com várias aplicações de fins gerais sendo portadas para as GPUs, graças as suas novíssimas características de facilidade de programação, ou “programabilidade” como denominaremos doravante neste trabalho, e uma enorme largura de banda de memória. Não somente o hardware é rápido, mas também as suas atualizações e novas tecnologias estão sendo disponibilizadas mais rapidamente que a tecnologia de seu concorrente, as CPUs, com disponibilização de device drivers (programas acionadores dos dispositivos que permitem a utilização dos mesmos pelo sistema operacional e aplicações dos usuários) rapidamente para sistemas Linux e Windows [9]. 49 Figura 17: Acelerada evolução do poder computacional das GPUs Fonte: Tutorial sobre GPU de Mike Houston na SIGGRAPH 2007 [38] As GPUs são onipresentes e economicamente menos custosas, ou seja, estão em todos os dispositivos: placas gráficas, desktops, notebooks, PDAs, celulares, etc. Atualmente já alcançaram um bom nível de maturidade tecnológica e científica. Na Figura 17, podemos observar que num curto espaço de tempo, de 2001 a 2007, as GPU não apenas aumentaram seu desempenho centenas de vezes como também o fizeram com uma velocidade muito maior que as CPUs, que além de crescer muito pouco em termos de desempenho, no mesmo período, também o fizeram de modo muito lento relativamente as GPUs, isto no que se refere às suas aplicações gráficas específicas, é claro. 50 5.4 TÉCNICAS GPGPU As técnicas básicas de operação com GPUs são aplicadas em computação gráfica para renderização de figuras 2D utilizando primitivas gráficas para traçar retângulos, triângulos, círculos, arcos, preenchendo áreas, processando vértices e fragmentos, etc. E, também como texturização, iluminação e suavização para figuras 3D nas modernas GPUs, além de incluírem funções relacionadas a processamento de vídeo digital. 5.4.1 CLASSIFICAÇÃO DAS OPERAÇÕES DAS GPUS PROCESSAMENTO STREAM As GPUs [49] podem processar vértices e fragmentos em separado mas podem fazê-lo em muitos desses e de modo paralelo ao mesmo tempo, ou seja, o desempenho das GPUs podem ser muito acelerado em comparação as CPUs, pois as GPUs são processadores de streams, isto é, processadores que podem operar em paralelo pela execução em um único kernel de muitos registros num mesmo stream de cada vez. 51 MAPEAMENTO A operação de mapeamento simplesmente aplica uma dada função (um kernel) a todo o elemento no stream. Como, por exemplo, o aumento do brilho de uma imagem com a aplicação de um fator constante a cada valor num stream. A operação de mapeamento é de simples aplicação na GPU. O programador gera um fragmento para cada pixel na tela e aplica o programa fragmento a cada um. O stream resultante é do mesmo tamanho do armazenado no buffer de saída. REDUÇÃO Algumas computações requerem o cálculo de um stream pequeno (possivelmente um stream de um elemento a partir de um stream muito maior). Esta operação é chamada de redução. Geralmente, uma redução pode ser obtida em múltiplos passos. Os resultados dos passos anteriores são usados como entradas para os passos seguintes e o resultado final destas operações é reduzido até que se atin ja um elemento restante. SCATTER A operação de scatter é mais naturalmente definida sobre um processador de vértices. O processador de vértices é capaz de ajustar as posições dos vértices, o que permite ao programador controlar onde a informação será armazenada no grid (rede de pontos que formam uma malha bidimensional retangular ou tridimensional cúbica). 52 GATHER O processador de fragmentos é capaz de ler texturas num modo de acesso aleatório, tal que pode obter informação de qualquer célula do grid, ou múltiplas células, se assim o desejar. FILTROS DE STREAM Um stream filter é essencialmente uma redução não-uniforme. A filtragem envolve a remoção de itens do stream baseada em algum critério. SORT A operação sort (classificar, ordenar) transforma um conjunto desordenado de elementos em um conjunto ordenado de elementos. SEARCH A operação search (busca, procura) permite ao programador encontrar um elemento particular num stream, ou possivelmente encontrar vizinhos de um elemento específico. A GPU não é usada para acelerar a busca de um elemento indivi dual, mas sim executar buscas múltiplas em paralelo. 53 5.5 ESTRUTURA DE DADOS As estruturas de dados das GPUs são bem conhecidas e descendentes diretas da representação de dados gráficos para texturização, renderização, buferização, etc. Permitem representar dados estruturados como vetores em uma, duas ou três dimensões (1D, 2D ou 3D) de forma direta (1D ou 2D) e indireta (3D) mas com limitações dependentes da memória da GPU. 5.6 APLICAÇÕES EM GPGPU As aplicações para GPPGUs foram desenvolvidas inicialmente para as necessidade de computação gráfica. Essencialmente: translações, rotações, texturização, rasterização, iluminação e todos os aplicativos dependentes destes procedimentos como: gráficos 2D e 3D, otimização geométrica, multiplicação matricial, processamento de sinal, etc. Posteriormente, desenvolveram-se, graças a novos algoritmos e novas potencialidades e performance das novas GPGPUs algoritmos para sistemas de partículas, dinâmica de fluidos, processamento de vídeo, dinâmica molecular, simulação física, Ray-Tracing (traçado de raios), etc. A extensão de aplicações de computação de alto desempenho (HPC) para GPU é muito recente e possui um amplo espectro à sua frente como, por exemplo, processamento sísmico, FFT 3D, dinâmica das nuvens, imagens médicas, etc. Novas aplicações são esperadas mas restringe-se ao processamento de ponto fixo ou ponto-flutuante simples, ou seja, processamento com dados numéricos do tipo inteiro ou que necessitem de baixa precisão de cálculo ou poucas casas decimais de resultados. Aplicações em GPGPU 54 Análise de Dados Dinâmica das Nuvens Otimização Geométrica Biomédica Simulação Física Dinâmica dos Fluídos Multiplicação Matricial Reconhecimento de Voz Sistema de Partículas Processamento de Vídeo Simulação do Campo de Forças FFT 3D Dinâmica Molecular Análise Léxica Desenho de Grafos Avaliação Polinomial Processamento de Sinal Processamento Sísmico Gráficos Comparação de Strings Ray-Tracing (Traçado de Raios) Imagens Médicas Tabela 3 Algumas aplicações para GPGPUs Fonte: http://www.cis.upenn.edu/~suvenkat/700/. 5.7 [39] DIAGRAMA DE BLOCOS DA GPU Na Figura 18, podemos verificar os detalhes arquiteturais da GPU da Nvidia, modelo Nvidiia GeForce 8800. Existem muitos elementos na pastilha da placa gráfica ou GPU. Estes elementos, esquematicamente podem ser visualizados no diagrama de blocos mostrado na mesma Figura 18. Os blocos verdes marcados com “SP” e arranjados em grupos de 16 são o que a Nvidia denomina “ stream processors” (processadores de stream). A arquitetura G80 da Nvidiia, da qual faz parte a GeForce 8800, possui oito grupos de SPs, num total de 128 processadores de stream. Existem sombreadores de pixels e vértices mas existem processadores, de ponto flutuante, capazes de operar sobre vértices, pixel ou outros tipos de dados. A maior parte das GPUs operam sobre dados de pixel na forma de vetor emitindo instruções concorrentes sobre múltiplos componentes de cor de um pixel (tais como vermelho, verde, azul ou alfa), mas os processadores stream da arquitetura G80 são 55 escalares – cada SP manipula um componente. Os SPs podem ser redirecionados para manipular dados de vértices (ou outras coisas) dinamicamente, de acordo com a demanda. Também, diferentemente dos processadores de gráficos tradicionais, aqueles cujas freqüências devem estar próximas a 600 MHz ou superior, estes possuem velocidade de clock próximas a freqüências de 1,35 GHz, dando a GeForce 8800 um tremendo poder de processamento de ponto flutuante. A maior parte do restante do chip trabalha a uma freqüência independente e mais convencional, da ordem de 575 MHz. Abaixo dos oito clusters, encontra-se o chaveamento do barramento (os pedaços com todas as linhas e setas) que conectam os clusters às seis partições ROP. Cada partição ROP tem sua própria memória cache L2 e uma interface à memória gráfica (ou frame buffer, indicada pelo rótulo “FB”) que tem 64 bits de largura. No total, isto fornece 384 bits de largura para a memória. Cada conjunto de 16 SPs é formado por dois grupos de oito SPs. Cada grupo tem seu próprio endereçamento de textura (TA) e unidades de filtragem (TF, blocos azuis) e seu próprio pool de cache L1. Além do cache L1, existe uma conexão de barramento que leva às unidades ROP, com seus caches L2 e conexões à memória principal. 56 Figura 18 Diagrama de blocos das unidades de processamento das GPUs Fonte: Course of Stanford University – CS448-07-spring [40] 5.8 PRINCIPAIS LINGUAGENS PARA USO EM GPUS Historicamente, as principais linguagens para desenvolvimento específico de programas para GPUs são: Brook, Cg, GLSL, HLSL, Sh [41] Existem muitos pacotes de desenvolvimento de software (SDK) para programadores desenvolverem aplicações para GPUs. O principal deles, atualmente, é o CUDA (Computer Unified Development Architecture), desenvolvido pela empresa Nvidia e, ao que tudo indica, passará a ser o padrão. Outro pacote de de - 57 senvolvimento para GPU prometido pelo fabricante AMD é o CTM (Close to The Metal) mas, ao que tudo indica, tenderá a aderência ao padrão CUDA da Nvidia por motivos de racionalidade, evitando competições que enfraqueceriam o mercado neste nicho de mercado com área tão específica [42]. 6 CELL 6.1 UMA HISTÓRIA ROMÂNTICA O conceito de CELL foi criado pela Sony Computer Entertainment Inc., do Japão, para Sony PlayStation 3. A gênese da idéia foi em 1999 quando o japonês Ken Kuratagi da Sony [Kuratage], “pai do PlayStation 3”, imaginou um computador que atuasse como uma célula num sistema biológico. Uma patente foi aplicada em nome de Masakazu Suzuoki e Takeshi Yamazaki como inventores em 2002. Segundo o próprio Kuratage [43], “Embora vendido como uma console de jogo, o que vai de fato entrar na casa é um computador baseado em célula.” 6.2 DA IMAGINAÇÃO À REALIDADE No verão de 2000 em Tóquio, Japão, as empresas IBM, Sony SCEI e Toshiba, com o objetivo de iniciar um projeto de uma nova e revolucionária micro-arquitetura de processador, visando às futuras necessidades interativas de processa- 58 mento e objetivando alcançar desempenho 1000 vezes superior ao daquele momento, considerando-se a arquitetura computacional vigente insatisfatória para as necessidades computacionais projetadas para os dispositivos interativos do futuro próximo. Ficou a cargo da divisão de pesquisa da IBM a responsabilidade pela abordagem de uma nova organização de projeto, levando em conta o estado da arte do processo tecnológico de 90 nm com silício-sobre-isolante (SOI), dielétricos com baixo-k (pequena constante dielétrica relativa ao dióxido de silício – SiO 2 ) e interconexões de cobre. Já em sua concepção inicial pretendia-se uma fortíssima capacidade de processamento central, para sistemas de entretenimento,. juntamente com uma interconexão de broadband (banda larga) e estruturas de super computadores. Várias propostas foram discutidas, todas multicore, indo de chips multiprocessados até multiprocessadores orientados a fluxos de dados (streams) No final daquele ano acordou-se que a arquitetura aprovada seria uma combinação da arquitetura IBM Power de 64 bits com processadores “sinergéticos” a fim de obter a densidade e a eficiência de potência necessária aos requisitos computacionais desejados. Após meses de discussão arquitetural e negociações contratuais, constitui-se uma joint venture denominada STI (Sony SCEI – Toshiba - IBM) localizada em Austin, Texas, Estados Unidos, e com investimentos de 400 milhões de dólares e cerca de 400 cientistas alocados ao projeto em março de 2001. Os objetivos e desafios do projeto foram: excelência em performance, especialmente em jogos e aplicações multimídia; tempos de resposta para usuário e rede compatível com sistemas em tempo real; aplicabilidade a um vasto intervalo de plataformas; e, suporte para ser introduzido em 2005 [36] . Uma nova arquitetura denominada Broadband Processor Architecture, estende a arquitetura Power de 64 bits com a cooperação de processadores de alívio (“ditos processadores sinergéticos”), com acesso direto à memória (DMA) e mecanismos de sincronização de comunicação com os mesmos (“Memory Flow Control”), e com melhorias para gerenciamento de tempo-real. A primeira geração do processador CELL combina dual-threaded, dual-issue, arquitetura Power 64-bit compatível. 59 O Power Processor Element (PPE) com oito novíssimas arquiteturas Synergistic Processor Element (SPEs), o controlador de memória no chip (LS – local storage -memória local) e contando com um controlador para interface de I/O configurável. Estas unidades são interconectadas com um elemento de barramento de interconexão coerente no próprio chip (EIB). Suporte extensivo para funções pervasivas, tais como: power-on, teste, depuração de hardware no chip, e funções de monitoração e performance também estão incluídas . [36] As características básicas lógicas e físicas do processador CELL estão descritas na Figura 19. Figura 19: Características gerais de um CELL Fonte: MIT Course 6.189 IAP, 2007 [34] 60 Os atributos chave deste conceito são • : [36] Um projeto para altas freqüências, pequeno número de portas por ciclo, permitindo ao processador operar a baixa voltagem e baixa potência enquanto mantém alta freqüência e alta performance. • Compatibilidade com arquitetura IBM Power para fornecer um ponto de entrada convencional para programadores, para virtualização, suporte a múltiplos sistemas operacionais e habilitado a utilizar a experiência IBM em projetar e verificar multiprocessadores simétricos. • Arquitetura SIMD (Single Instruction, Multiple Data), suportado para ambas as extensões de mídias vetoriais em PPE e conjuntos de instruções no SPEs, como um dos meios de melhorar o desempenho em jogos / mídia e aplicações científicas, aumentando-se a eficiência consumo / dissipação de energia. • A eficiência de potência e área do PPE, que suporta o projeto de alta freqüência. • SPEs para alívio coerente. SPEs possuem memória local, DMA assíncrono coerente, e um grande número de registradores unificados para melhorar a largura e para um novo nível de eficiência de potência e desempenho combinados. Os SPEs são dinamicamente configuráveis para suportar a proteção de conteúdo e privacidade. • Um barramento coerente com alta largura de banda e também uma alta largura de banda de memória para permitir eficiência e desempenho às aplicações que deles necessitarem para fazer uso intensivo e para permitir interações no chip através da alta largura de banda de comunicação entre os elementos do processador. O barramento é coerente para permitir que um único espaço de endereçamento seja compartilhado pelos PPEs e SPEs, visando eficiência de comunicação e facilidade de programação. 61 • Alta largura de banda de I/O flexível e configurável para suportar um grande número de sistemas operacionais, incluindo configuração num único chip com interfaces duais e desacopladas com coerente configuração dual-processada que não requer chips adicionais de chaveamento para conectar os dois processadores. • Implementação modular totalmente configurável para maximizar performance por watt e performance por milímetro quadrado de silício, além de facilitar o projeto de produtos derivados. • Suporte extensível para gerenciamento de potência e dissipação térmica do chip, testes de fabricação, hardware e software de depuração, e análise de performance. • Alta performance, baixo custo da tecnologia de em- pacotamento. • Alta performance, baixa potência com tecnologia SOI de 90 nm. Em síntese, temos: • Projeto de alta freqüência e baixa voltagem. • Compatibilidade com arquitetura Power 64 bit. • Arquitetura Single Instruction Multiple Data (SIMD). • Elemento de Processamento Power (PPE). • Elemento de Processamento Sinergético (SPE). • Alta largura de banda coerente de fabrica no chip e alta largura de banda de memória. • Alta largura de banda de I/O flexível. 62 • Implementação totalmente reconfigurável. • Funcionalidade pervasiva (notável, que se espalha) extensiva. • Alta performance, baixo custo de tecnologia de empacotamento. • Alta performance e baixa potência com tecnologia CMOS SOI. Modelo e facilidades de programação: o Modelo de função de relaxamento. o Modelo de extensão de dispositivo. o Modelo de aceleração computacional. o Modelos de streaming. o Modelo multiprocessador com memória compartilhada. o Modelo de thread assimétrica em tempo de execução. Os elementos componentes básicos do processador CELL, que podem ser vistos na Figura 20, são: • 1 Power Processor Element (PPE). • 8 Synergistic Processor Elements (SPEs). • Element Interconnect Bus (EIB). 63 • Controladores de Acesso Direto à Memória (DMAs). • 2 controladores de memória Rambus XDR. • Interfaces de (Input/Output) Rambus FlexIO. Figura 20: Fotografia da pastilha de um processador CELL Fonte: MIT Courrse 6.189 IAP, 2007 [34] Na Figura 20, podemos observar os componentes físicos do processador CELL na pastilha, e que a pastilha do CELL é formada por 1 PPE + 8 SPE, com uma interconexão IEB e um cachê L2, dentre outros elementos como a controladora de Entrada e Saída, duas interfaces de memória XDRAM, o controlador de memória e o FlexIO do tipo Rambus além do circuito lógico para depuração e teste. 64 6.3 DISPOSITIVOS DE VETORIZAÇÃO DO CELL AltiVec (VMX IBM ou Engine Velocity Apple) O AltiVec é uma máquina SIMD e uma extensão para o conjunto de instruções do IBM PowerPC, projetado para melhorar o desempenho de qualquer aplicação que explore o paralelismo em nível de dado . AltiVec é usado para aumen- [44] tar o desempenho no processamento de aplicações de áudio, vídeo e comunicação. Para fazer uso do AltiVec, o desenvolvedor não precisa necessariamente reescrever o código inteiro da aplicação, mas a aplicação deve ser reprogramada ou, no mí nimo, recompilada. Aplicações que usam o AltiVec não requerem que sejam escritas em Assembler (linguagem de máquina). É possível usar as linguagens de alto nível C, C++ ou C Orientado a Objeto para facilitar o uso do AltiVec. ALTIVEC NO PPE Um outro interessante fato sobre o PPE é que ele inclui suporte para as instruções vetoriais VMX (também conhecidas como ”AltiVec” ou “Velocity Engine” devido a Apple, descrito no parágrafo anterior). O VMX acelera de cálculos financeiros a funções do sistema operacional apesar de que (mesmos nos equivalentes dos PCs) não aparente ser usado atualmente. Uma empresa que usa extensivamente o VMX é a Apple, que a usa para acelerar as funções de seu sistema operacional OS X, e não daria muito trabalho para a Apple utilizar o elemento PPE do processador CELL se assim o deseja-se [43]. 65 AltiVec no SPE Os SPEs são processadores vetoriais (ou SIMD). Isto é, eles efetuam múltiplas operações simultaneamente numa única instrução. A computação vetorial existe nos supercomputadores desde os idos de 1970 (o computador Cray 1 foi o primeiro a usar essa técnica) e modernas CPUs têm aceleradores de mídias (isto é, MMX, SSE, VMX / AltiVec) que funcionam com o mesmo princípio. Cada SPE é capaz de executar 4 operações de 32 bits cada por ciclo de instrução (8 se levarmos em conta multiplicar-somar). A fim de tirar vantagem dos SPEs, os programas executáveis precisam ser “vetorizados”, isto pode ser feito em muitas áreas de aplicação como vídeo, áudio, gráficos 3D, memória principal (eles podem mover os dados entre as memórias locais dos SPEs) [43]. Enquanto os processadores convencionais têm unidades vetoriais na placa (SSE ou VMX / AltiVec) eles não estão dedicados a processadores vetoriais. A ca pacidade de processamento vetorial é agregada ao conjunto de instruções existente e tem que compartilhar os recursos de CPU. Já os SPEs são dedicados a processadores vetoriais de alta velocidade e com sua própria memória, não necessitando compartilhar qualquer outro recurso senão a memória (e nem mesmo esta se a maior parte dos dados puder se ajustar ou estar contido completamente em sua memória local). Além desse fato, existem oito deles, SPEs, e portanto, podemos perceber porque o seu potencial computacional é tão grande. Tal discrepante diferença de desempenho soa parecer ridículo mas, na verdade, já está presente nas modernas placas gráficas de sistemas existentes com capacidade análoga de processamento como, por exemplo, as Nvidia GTX 8800. Existem GPUs que já podem fornecer um poderoso processamento maciçamente paralelo, quando programadas propriamente mas isto não é exatamente uma tarefa fácil. A diferença com o processador IBM CELL, conforme alegam seus defensores, é que este, num futuro próximo, será mais barato, consideravelmente mais fácil de programar e será usado para uma vasta classe de problemas. Esta afirmativa não parece estar longe da verdade, pois a Join Venture STI (Sony-Toshiba-IBM) preten- 66 de embarcar não apenas a atual geração de Sony PlayStation 3 mas as seguintes, como também as TVs de alta definição (HDTV), os dispositivos de disco rígido de alta definição HD BlueRay, os HD DVDs também de alta definição, dentre outros que surgirão, enquanto as GPUs ficarão, no máximo, confinadas a placas gráficas dependentes de hosts para terem seus serviços disponibilizados além de preços talvez não competitivos devidos a fatores de economia de escala de produção 6.4 [43] . DESENVOLVIMENTO PARA O CELL Enquanto desenvolver para o processador CELL poderia soar como uma forma esquisita de tortura, na verdade, isto não é bem o caso. Se pudermos com preender o desenvolvimento de programação para multithreading, gerenciamento de cache e SSE / VMX / AltiVec, parece que não teremos problemas com o CELL. A linguagem primária para desenvolvimento no CELL esperada é a linguagem C com técnicas de sincronização de thread normais usadas para controlar a execução de diferentes cores. A linguagem C++ também é suportada num certo grau e outras linguagens também estão em desenvolvimento (incluindo, aparentemente, FORTRAN). Vários sistemas estão em desenvolvimento para controlar a execução em CELL, tal que os desenvolvedores deverão ter uma plenitude de opções, comparável ao desenvolvimento do Sony PlayStation 2 (PS2), que era primariamente feito em assembly (instruções em linguagem de máquina) e era altamente restritivo e, hoje, já existem centenas de jogos para este sofisticado hardware de console de jogos. A distribuição de tarefas para os SPEs, que funcionam como aliviadores de carga dos PPEs, pode ser manuseada pelo sistema operacional ou middleware (middleware é um software que faz a mediação entre diversos tipos de hardware e software em uma rede, de modo a possibilitar a integração de seus aplicativos). Esta 67 distribuição de tarefas pode ser implementada compilando-se as aplicações ou mesmo, de modo corajoso, desenvolvendo-ser a aplicação diretamente na própria linguagem de máquina (assembly) do CELL através de instruções diretas do PPE e SPEs, sendo responsabilidade do desenvolvedor fazer fluir seu próprio sistema. Prometem os fabricantes, que os SPEs serão dinamicamente selecionáveis e acionados, e que os desenvolvedores não necessitarão se preocupar com o que os SPEs estão fazendo. O fabricante Toshiba está desenvolvendo software para executar CELL em seus bens de consumo. Eles falaram em um sistema operacional sob medida para seus produtos (atualmente, uma versão de Linux adequada) no qual as tarefas são divididas entre os “módulos” dos SPEs e do PPE. Cada módulo do SPE é uma subtarefa que pode operar usando um ou mais SPEs, dependendo do poder computacional requerido, os módulos também podem trocar dados via stream uns com os outros [45]. 6.5 É O PROCESSADOR CELL DE FIM GERAL? O CELL foi projetado como um processador de fim geral, mas otimizado para tarefas que requeiram o uso de computação intensiva. O PPE é um processador convencional e continua agindo como tal. A grande diferença estará nos SPEs, como foram projetados para acelerar tipos específicos de códigos e serão notavelmente melhores e mais eficientes em algumas áreas do que em outras, mesmo que os SPEs não sejam de fim geral. O CELL é em sua essência voltado para executar todos os programas a velocidades moderadas com capacidade para mudar para execução a altas velocidades para certos tipos de códigos . [21] O PPE é um core de fim geral e não deve apresentar problemas para a maioria dos códigos. Diz-se que o PPE tem uma arquitetura simplificada quando comparada com outros processadores de desktops e parecem ter razão, não pela 68 pelo baixo desempenho mas pelo baixo desempenho em códigos voltados para fins gerais. Devemos tomar cuidado com esta afirmação porque esse código pode ou não ser de fim geral. Alguns fazem uma vaga referência à perda de capacidade do hardware de executar instruções fora de ordem ou limitada capacidade de predição de desvios [21] . Esta relativa simplicidade pode ser desvantajosa em alguns casos. Entretanto, o PPE não existe isoladamente e será capaz de deslocar o trabalho pesado para os SPEs. Mesmo que a diferença de desempenho transferida seja maior do que a perda devido a simplificação. 6.6 A ARQUITETURA RISC ATACA NOVAMENTE A tendência nas CPUs dos últimos 15 anos tem sido aumentar o desempenho não apenas aumentando a taxa da freqüência do processador mas, também, aumentando o número de instruções por ciclo (IPC). Os projetistas têm usado transistores adicionais a cada processo de miniaturização para criar adicionalmente máquinas mais sofisticadas, que podem executar mais e mais instruções indo até ao requinte de executá-las fora de ordem. Muitas CPUs de modernos desktops fazem isso, exceto alguns processadores Transmeta, VIA e Itanium da Intel. A execução fora-de-ordem é uma raridade nos dispositivos embarcados com processadores devido as considerações de consumo de energia não o permitirem. O PPE é completamente diferente, entretanto. Ele usa um projeto muito simples e não contém nenhum hardware de previsão de execução fora de ordem, o que é completamente oposto à abordagem do último core do PowerPC, o 970FX, também conhecido como G5. 69 A razão para a completa mudança na direção da filosofia do projeto é devido aos projetistas estarem se deparando agora com as limitações físicas da CPU. As CPUs, que executam instruções fora de ordem, são altamente complexas e usam um grande número de transistores para alcançar seus objetivos, estes requerem muita energia e, portanto, necessitam de resfriamento para a energia dissipada. O resfriamento se torna um problema crescente à medida que os transistores começam a perder elétrons transformando parte da potência consumida mesmo quando não estão em uso ativo. Este problema é comum a todos os fabricantes de CPUs de desktops e estes tentam ganhar mais desempenho aumentando as velocidades dos clocks dos processadores e são levados, ao invés disso, a uma abordagem de multicore. Aqueles que ainda não foram levados a esta simplificação, certamente o serão, conforme a tendência de multicore dos fabricantes comprova estes fatos [21]. 7 DIFERENÇAS ENTRE O PROCESSADOR CELL E GPUS As diferenças fundamentais entre o processador IBM STI CELL e as GPUs são intrínsecas e fundamentais que vão desde suas concepções arquiteturais até as suas pretensões mercadológicas e econômicas, ou seja, já nasceram distintas e não convergirão para um foco comum. Enquanto as GPUs, querendo ou não, representam uma sofisticadíssima evolução dos co-processadores matemáticos, como assim se apresentam para efeito de simplicidade, e pertencem à categoria de processadores de fins específicos, o processador CELL propõe-se a ser de fins gerais desde sua concepção e não é nem se pretende ser evolução de uma arquitetura existente e sim uma nova e revolucionária arquitetura de multicore heterogênea com uma rede interna de alta velocidade entre os seus núcleos, acrescido do legado IBM Power 64 bits no PPE e com memória distribuída nos SPEs do próprio processador, podendo todos estes últimos elementos acessar diretamente a memória principal via DMA ou trocar dados entre as memórias locais e a principal a altíssimas velocidades num barramento de até 300 GB/s (giga bytes por segundo). 70 A conseqüência fundamental das diferenças, acima expostas, é que isto implica numa maior complexidade de desenvolvimento de software, bibliotecas, compiladores e, portanto, programas para os processadores CELL. As GPUs possuem uma grande presença de mercado. De fato, são de mais fácil programação, com as novas características, sem grandes traumas para os desenvolvedores. Praticamente dominam o mercado de jogos e a industria do entretenimento como os desenhos animados. Mas, como podemos exemplificar com os principais fabricantes de hardware para jogos eletrônicos com seus produtos como Microsoft Xbox 360, Sony PlayStation PS3 e Nintendo Wii, já se utilizam todos eles de processadores IBM multicore de distintas gerações, tendo a Sony o privilégio de ter o seu PS3 como sendo o primeiro produto de mercado com o processador CELL, graças aos frutos da parceria STI (Sony-Toshiba-IBM). Isto é, de fato, fora do circuito das GPUs em placas gráficas para PCs, principalmente para os jogos eletrônicos, existe um domínio completo de processadores IBM na indústria de jogos eletrônicos [34] e com suas consoles apresentadas na Figura 21. Figura 21 Jogos de mercado: Sony PS3, Microsoft Xbox 360 e Nintendo Wii Fonte: Sites dos fabricantes Microsoft [46], Sony [19] e Nintendo [47] 71 As conseqüências econômicas da parceria STI serão importantíssimas para toda a economia de escala de produção e comercialização de produtos com o processador CELL internalizados. Tudo indica que os parceiros desejam embutir o processador CELL em todo e qualquer eletro-eletrônico de suas indústrias o que implicará numa gigantesca economia de escala para todos, em especial para os consumidores, permitindo-se assim que as mais avançadas tecnologias estejam disponíveis em muitas das atualmente primordiais ferramentas dos seres humanos em toda e qualquer parte do globo terrestre ou mesmo fora deste. As dimensões, consumo elétrico e necessidades de refrigeração foram concebidas para tal, aguardando apenas o transcurso natural da mudança definitiva do paradigma de programação seqüencial para a programação paralela como pré-requisito fundamental da transição tecnológica. E quanto as GPUs? Bem, os movimentos que se podem observar indicam que os defensores ideológicos ou comerciais das GPUs não buscam se comparar com processador CELL mas sim com aqueles processadores que consideram seu adversário natural: as CPUs convencionais, com um ou poucos núcleos. Tudo leva a crer que a maior interessada nesta contenda, as fabricantes de processadores Intel a fabricante AMD, reagirão e procurarão reverter o jogo a seu favor, se assim o desejarem. A esta incursão invasiva das GPUs, que se pretendem muito superiores em preço e desempenho e se qualificam como sendo de fins gerais, quando comparadas com as CPUs convencionais [12] , é preciso dar um tempo e aguardar o desenro- lar dos fatos para se verificar se concretizará ou se não será apenas um apelo de marketing. A tendência, sob uma ótica simplificada, seria a inserção de funcionalidades e facilidades de programação de GPUs em CPUs via inserção nos chips de nova geração e tecnologia de 45nm ou de dimensão inferior ou nas modernas placas mãe que hão de vir, como abordaremos em capítulo específico à frente. Cabe, ainda, ressaltar a dependência fundamental das GPUs em função das CPUs, sem as quais tornam-se produtos inoperantes e inúteis. Sem dúvida, vis tas por esta ótica, não são tão mais baratas assim, pois não são autônomas e encarecem mais ainda os desktops, laptops ou outros dispositivos que as utilizem. O problema fundamental das GPUs não é o de se tornarem mais especializadas ainda, 72 muito pelo contrário, é de buscarem se fazer e comportar de modo tal que sejam de uso geral e não especificamente para o processamento gráfico. Sabedores dos prós e contras das próprias GPUs, e das fragilidades das CPUs convencionais, é conveniente do ponto de vista comercial, tentar conquistar novos mercados e territórios comerciais, que não os já quase que exclusivamente dominados pelas GPUs como o de computação gráfica (na indústria de entretenimento: desenhos animados, jogos eletrônicos em PCs, filmes, etc). 8 RUDIMENTOS DE SOFTWARE PARA GPUS A GPU é altamente especializada para computação intensiva e paralelizada, devido a sua origem voltada para o desenvolvimento de computação gráfica e os problemas computacionais relacionados (processamento de imagens, renderização, sombreamento, texturização, etc.) e, também, ao rápido crescimento da indústria de jogos. A programação de GPU é feita com linguagens de alto nível e tem suporte a precisão de ponto flutuante simples (32 bits), não possuindo suporte a precisão dupla, pois esta não é necessária para a indústria de jogos ou entretenimento. O atual modelo de programação desenvolvido pela empresa Nvidia, fabricante de GPUs e placas gráficas muito conceituadas no mercado, e que praticamente o domina, esta concebeu toda uma nova arquitetura de programação a que batizou de CUDA (Computer Unified Device Architecture) que é composta de APIs, compiladores, depuradores, ferramentas e toda a sorte de meios para facilitar e auxiliar os desenvolvedores de aplicação para o uso de GPUs [9], fazendo com que estas passassem a integrar e solucionar problemas de fins gerais, passando a denominá-las comercialmente como GPGPUs, que tem um bom apelo comercial por dar a entender que as modernas GPU são aplicáveis ao processamento de fins gerais sob o domínio das CPUs mas, logicamente, não é válido para todos os casos, porém é válido para algumas aplicações importantes, de simulações a cálculos científicos que envolvam matrizes e solucionadores de sistemas equações lineares. 73 8.1 A ARQUITETURA CUDA COMO PADRÃO PARA GPU Então, esta nova arquitetura denominada CUDA, proposta pela Nvidia [9] , baseia-se num modelo de programação de fim geral partindo de lotes de threads dos usuários a serem executados nas GPUs, que podendo executar centenas de theads passam a funcionar como um co-processador para problemas com dados maciçamente paralelos. CUDA possui em sua arquitetura: acionadores (drivers) para carregar programas nas GPUs que podem ser usados exclusivamente e são otimizados para computação intensiva; utilização de interfaces projetadas para uso de gráficos, sem a necessidade de APIs; compartilhamento de dados com objetos do tipo buffers de OpenGL; velocidades de download e de releitura máximas garantidas; e, gerenciamento explícito de memória da GPU . [48] A arquitetura CUDA possibilita a integração de um programa de aplicação escrito na linguagem C da CPU + GPU, onde a parte serial é executada na CPU e a parte paralela ou acelerável do Kernel em C é executada nos blocos de threads da GPU. Para o modelo de programação CUDA, que é o de um co-processador altamente multi-threaded, a GPU é vista como um device (dispositivo), isto é: encontra-se na CPU ou host, tem sua própria memória DRAM e é capaz de executar muitas threads em paralelo. Esboçaremos a seguir os passos lógicos de execução de programas em conformidade com a arquitetura CUDA : [48] As porções paralelas dos dados são executadas nos dispositivos como kernels (um kernel é um fragmento, uma porção limitada e definida do programa que é executada em cada elemento de um stream do programa, gerando um stream de saída – pixel bufffer). 74 Por sua vez, os kernels são executados em paralelo em muitos threads. Os threads são extremamente leves e exigem pouquíssimo overhead (trabalho adicional) de criação e, enquanto as GPUs exigem milhares de threads por razões de eficiência (quanto mais threads concorrentes maior o desempenho da GPUs), as CPUs multicore necessitam de uns poucos threads. Um kernel é executado como um grid de blocos de threads e todos esses compartilham os mesmos dados do espaço de memória da GPU. Um bloco de thread é um lote de threads, que podem cooperar entre si, sincronizando suas execuções e compartilhando eficientemente os dados através de uma memória compartilhada de baixa latência num mesmo bloco. Dois threads de diferentes blocos não podem cooperar entre si. Threads e blocos possuem identificadores, IDs, tal que cada thread possa decidir em que identificador do bloco, bloco ID ( 1D ou 2D), ou identificador da thread, thread ID (1D, 2D ou 3D) trabalhar, permitindo-se assim uma simplificação do endereçamento de memória quando do processamento de dados multidimensionais. Como, por exemplo, no processamento de imagens, etc. Cada thread pode efetuar a leitura e / ou gravação a depender do tipo de operações que irá realizar, conforma Tabela 3. 75 Operação Ler/Gravar Ler/Gravar Ler/Gravar Ler/Gravar Apenas Ler Apenas Ler Onde ocorre nos registradores por thread na memória local por thread na memória compartilhada por bloco a memória global por grid as constantes de memória por grid a memória de textura por grid Tabela 4 Tipos de operações em GPU e localização de ocorrência Fonte: Tutorial da Nvidia em SISGRAPH 2007 [48] O host pode ler e gravar as memórias global, constante e de textura, que são de acesso lento por serem de alta latência. Os limites máximos para os elementos de memória ou threads são característicos de cada GPU. Por exemplo, nas placas gráficas Nvidia modelo GeForce 8800 GTX ou GTS, estes elementos estão presentes com as seguintes limitações mostradas na Tabela 4. Quantidades 512 65.535 16/12 768/640 16 KB 64 KB 32 threads Limites Máximos theads no máximo por bloco como tamanho máximo da dimensão de um grid processadores de streaming @675/600 Mhz em GTX/GTS MB de dispositivo de memória (GTX/GTS) memória compartilhada por multiprocessador em 16 bancos memória para constantes por Warp com 16 Warps por bloco Tabela 5 Exemplo de limites superiores para GPU Fonte: Tutorial da Nvidia em SISGRAPH 2007 [48] A arquitetura CUDA foi concebida para ser fácil e leve. Portanto, as APIs são escritas como extensões da linguagem C ANSI. Logo, tem uma baixa curva de aprendizagem e, o projeto do hardware foi elaborado para alto desempenho com leve intervenção de acionadores em tempo de execução. 76 CUDA possuem funções de alocação ou liberação de memória global do dispositivo (GPU) como cudaMalloc () e cudaFree(), respectivamente bem como funções de transferência de dados do host para o dispositivo como cudaMemcpy(). Existem funções de declaração pré-fixadas e pós-fixadas por dois caracteres de sublinhado (underscore) “__”, como: __device__ float DeviceFunc(), chamado e executado no dispositivo __global__ void KernelFunc(), chamado no host e executado no dispositivo __host__ HostFunc(), chamado e executado no host float As funções que envolvem dispositivos do tipo (__device__) não podem ter seus endereços dados e, para as funções executadas nos dispositivos: não há recursividade. Não podem existir declarações estáticas no interior destas funções e o número de argumentos deve ser fixo, ou seja, não pode ser variável na chamada das destas funções. Uma função Kernel deve ser chamada numa configuração de execução e qualquer chamada a uma função Kernel é assíncrona a partir da versão CUDA 1.0, e uma sincronização explícita é necessária para blocagem. 8.2 CONCLUSÃO SOBRE A ARQUITETURA CUDA EM GPU A arquitetura CUDA visa habilitar o paralelismo na memória compartilhada do chip da GPU, para maior eficiência do compartilhamento de dados inter-threads, melhorando todo o legado das antigas limitações de hardware das GPUs da seguinte maneira: o acesso à memória para leitura ou gravação era feito em pixels, o que tornava a programação menos flexível e, ao invés disso, tornar a programação mais flexível, fornecendo um endereçamento genérico à memória DRAM permitindo a leitura ou gravação de não mais apenas um e somente um pixel, ou seja, tornando 77 mais eficiente o uso da memória compartilhada da GPU, economizando assim a largura de banda de grandes memórias. Memórias local e global residem num mesmo dispositivo de memória (DRAM) muito mais lento do que a memória compartilhada. Então, há uma maneira mais lucrativa de executar computação no dispositivo blocando os dados para se beneficiar da vantagem da maior velocidade da memória compartilhada da seguinte forma: Particionando os dados em subconjuntos de dados que se ajustem na memória compartilhada. Manipular cada subconjunto de dados com um único bloco de thread tal que: • O carregamento do subconjunto de dados da memória global para a memória compartilhada, usando-se múltiplos threads para se explorar o paralelismo em nível de memória; • Efetuar a compilação do subconjunto na memória compartilhada, cada thread pode fluir eficientemente sobre múltiplos conjuntos de dados; e • Copiar os resultados da memória compartilhada para a memória global. As memórias de textura e constante também devem residir no dispositivo de memória (DRAM) de acesso mais lento que a memória compartilhada, o que é al tamente eficiente para dados de leitura. Cuidadosamente, os dados devem ser divididos conforme o padrão de acesso descrito na Tabela 5. Tipo de Acesso à Memória Tipo de Memória 78 Apenas Leitura, sem estrutura Apenas Leitura de arrays estruturados Leitura e Gravação compartilhada dentro de blocos Leitura e Gravação de registradores na memória local Leitura e Gravação de entradas / resultados memória constante memória de textura memória compartilhada memória local memória global Tabela 6 Acesso á memória pelo tipo específico de memória Fonte: 8.3 Tutorial da Nvidia em SISGRAPH 2007 [48] UMA IMPLEMENTAÇÃO CUDA NO HARDWARE G80 Uma nova série de GPUs da Nvidia, denominada G80, implementa por hardware o modelo de programação acima descrito da seguinte forma: i. O dispositivo tem um conjunto de 16 multiprocessadores; ii. Cada multiprocessador tem um conjunto de 32 processadores com arquitetura SIMD -- unidade de instrução compartilhada; iii. A cada ciclo de clock, o multiprocessador executa a mesma instrução num grupo de threads denominado warp; iv. O número de threads num warp é o tamanho do warp. 8.4 IMPLEMENTAÇÃO DA ARQUITETURA DE MEMÓRIA - G80 Os espaços de memórias locais, globais, constantes e de texturas são regiões do dispositivo de memória. Cada multiprocessador tem: o Um conjunto de registradores de 32 bits por processador. 79 o Uma memória compartilhada no chip, onde reside o espaço de memória compartilhada. o Um cache constante apenas para leitura para acelerar o espaço de memória constante. o Um cache de textura apenas para leitura para acelerar o espaço de memória de textura. 8.5 SÍNTESE DO MODELO DE HARDWARE DA G80 Cada bloco de um grid é desdobrado em warps, que é executado em um único multiprocessador (SM), e o dispositivo só processa um único grid por vez. Cada bloco de threads é executado por um único multiprocessador tal que o espaço de memória compartilhada reside no chip da memória compartilhada. Um multiprocessador pode executar múltiplos blocos concorrentemente sendo que as memórias compartilhadas e os registradores são particionados dentre as threads de todos os blocos concorrentes tal que se diminui o uso da memória compartilhada (por bloco) e aumenta-se o número de blocos que podem ser executados concorrentemente. Em resumo, podemos afirmar: • Uma GPU é um dispositivo ou conjunto de multiprocessadores. • Um multiprocessador é um conjunto de processadores e memória compartilhada. 80 • Um Kernel é um programa GPU ou programa que roda na GPU. • Um grid é um array de blocos de threads que executam uma thread. • Um bloco de thread é um grupo de threads SIMD que executam um Kernel e podem comunicar-se via memória compartilhada. • Os tipos de memória, sua localização em relação ao chip gráfico, seu tipo de acesso e autorização podem ser identificados na Tabela 6. Memória Localização Em cache fora do chip Não Local fora do chip N/D – residente compartilhada fora do chip Não Global fora do chip Sim constante fora do chip Sim Textura Acesso Quem acessa Leituta/Gravação Leituta/Gravação Leituta/Gravação Só Leitura Só Leitura Uma thread Toda thread do bloco Toda thread + host Toda thread + host Toda thread + host Tabela 7 Característica de cada memória de uma moderna GPU Fonte: 8.6 Tutorial da Nvidia em SISGRAPH 2007 [48] APIS PARA GPUS A API para GPUs é uma extensão da linguagem C e consiste de: • Extensões da linguagem C para porções de código que residem no dispositivo; e, • Uma biblioteca runtime, desdobrada em: o Componentes comuns provendo tipos intrínsecos de vetor e subconjuntos de bibliotecas runtime em C para ambos os códigos, do host e do dispositivo. 81 o Um componente host para controlar ou acessar um ou mais dispositivos do host. o Um componente dispositivo provendo funções específicas do dispositivo. Existem qualificadores de tipos de variáveis (__device__, __local__, __constante__, __shared__, etc) e variáveis automáticas que sem qualquer qualificador que residem nos registradores, exceto os vetores que residem em memória local. Existem restrições como, por exemplo, a dos ponteiros só poder apontar para memória alocada ou declarada na memória global. Os componentes comuns fornecem intrínsecos do tipo vetor e um subconjunto de bibliotecas runtime em C suportada tanto pelo código do host quanto do dispositivo. Para as componentes comuns de runtime, as funções matemáticas como, por exemplo: pow, sqrt, exp, log, sin, cos, ceil, floor, etc, quando executadas no host se estiverem disponíveis, serão usadas e somente serão suportadas para tipos escalares e não vetoriais. Para as componentes runtime de host, as funções fornecem uma maneira de lidar com: gerenciamento de dispositivos (incluindo sistemas multi-dispositivos), gerenciamento de memória e manipulação de erros. São inicializadas na primeira vez em que são chamadas e uma thread de host pode invocar um código de dispositivo para apenas um dispositivo, ou seja, múltiplas threads de host exigem execução em múltiplos dispositivos. Algumas funções matemáticas (sin(x), por exemplo) possuem menor precisão mas, para dispositivos mais rápidos, apenas uma versão (por exemplo, __sin(x), __pow(x), __log(x), __exp(x), __cos(x), __tan(x), ...) 82 Também são disponibilizadas funções de sincronização para permitir a disponibilização de sincronismo de todas as threads de um bloco. Por exemplo, void __syncthreads(); Uma vez atingido este ponto, a execução prossegue normalmente. É muito usado para evitar conflitos de memória compartilhada ou memória global. É permitindo em construções condicionais apenas se for uniforme aplicação em todo o bloco de threads. 8.7 COMPILAÇÃO EM CUDA Qualquer arquivo fonte contendo extensões de CUDA, deve ser compilável com o produto da Nvidia para GPUs CUDA compatíveis, o denominado nvcc. O nvcc é um acionador de compilador e trabalha invocando todos os compiladores e ferramentas necessárias como cudacc, g++, cl, etc. A saída do nvcc pode ser também um código C que então deve ser compilado com o resto da aplicação usando-se outra ferramenta ou um código objeto diretamente. 8.8 LINK-EDIÇÂO EM CUDA Qualquer executável com código em CUDA requer duas bibliotecas as dinâmicas a seguir: cudart biblioteca runtime de CUDA 83 cuda 8.9 biblioteca core de CUDA DEPURAÇAO EM CUDA A depuração em CUDA é, basicamente, realizada usando-se o modo de emulação do dispositivo, que é obtido ativando-se o modo de emulação através da palavra chave – deviceemu - quando da chamada do compilador nvcc (nvcc -deviceemu) e nenhum dispositivo ou device driver de CUDA é necessário e cada thread é emulada como uma thread de host. Quando se executa no modo de emulação do dispositivo, pode-se: Usar o suporte nativo de depuração do host (breakpoints, inspection, etc). Acessar qualquer dado de dispositivo específico do código do host e vise-versa. Chamar qualquer função do host a partir do código do dispositivo (por exemplo, printf) e vice-versa. Detectar situações de deadlock causadas pelo uso impróprio de __syncthreads. As threads de emulação de dispositivos são executadas seqüencialmente, isto significa que acessos de mesmas posições de memória por múltiplos threads podem produzir resultados diferentes. A referência de ponteiros de dispositivos para hosts ou de ponteiros de host para dispositivos podem produzir resultados corretos no modo de emulação do dispositivo, mas gerarão um erro no modo de execução do dispositivo. 84 Resultados de operações de ponto flutuante podem ser ligeiramente diferentes por causa das diferentes saídas dos compiladores, conjuntos de instruções e uso de precisão estendida para resultados intermediários. 8.10 A NOVA ARQUITETURA DE DESENVOLVIMENTO EM GPUS O fabricante AMD está propondo uma nova arquitetura para suas próprias GPUs ou CPUs com alto poder de processamento gráfico e / ou de fins gerais que ele denominou CTM (Close to The Metal) e pretendia lançar todo um pacote de desenvolvimento específico para esta arquitetura de mesmo nome. Mas, por razões de racionalidade e custo, dado que o seu concorrente primeiro e mais relevante na área, Nvidia, já possui a arquitetura CUDA bem estabelecida, difundida e de fácil implementação, parece indicar, pelos últimos movimentos do jogo, até aqui, que eles pretendem fazer de CUDA a arquitetura padrão para GPUs ou GPGPUs, que rodariam em plataformas de GPUs de distintos fabricantes como Nvidia, ATI (AMD), etc. Nota: É significativa outra iniciativa da AMD, com outra de suas tecnologias denominada “Torrenza”, que pretende licenciar o HyperTransport coerente para terceiras-partes poderem fabricar sockets compatíveis com coprocessadores e aceleradores. Permitir também que terceiras-partes de PPUs, GPUs e co-processadores possam acessar memórias de sistemas de processamento principal diretamente e coerentemente. Isto poderia permitir que modelos de aceleração de processamento pudessem ser de mais fácil uso, tendo o processador CELL como exemplo onde os SPEs não podem acessar a memória diretamente. 85 9 RUDIMENTOS DE SOFTWARE PARA CELL O processador CELL suporta uma variedade de modelos de programação. No modelo de extensão de dispositivo, um ou mais SPEs são fornecidos como função de uma interface como dispositivo. A aplicação não cuida dos SPEs, apenas os vê como um conjunto de capacidades, que noutros sistemas podem ser fornecedores de processadores gráficos, processadores físicos, processadores de imagem, processadores de áudio, codificadores, decodificadores, etc. Neste modelo os SPEs não são acessados diretamente pela aplicação. No modelo de função de alívio, os SPEs são usados para acelerar funções de computação intensiva. As funções são invocadas de uma maneira tipo RPC por uma chamada de uma thread que executa no processador Power. Como a toda thread de um SPE está associada uma thread do processador Power, os SPEs podem retornar funções de chamada do sistema operacional que então servem a thread pelo PPE. Enquanto este modelo de programação forneça, talvez, a extensão mais direta de programação de multi-threading de SMP, este é relativamente fácil de sobrecarregar o processador Power (PPE). O conjunto de funções suportadas por um ou por múltiplos SPEs também pode ser fornecido por uma biblioteca de terceiros. No modelo de aceleração computacional os SPEs atuam mais autonomamente. As threads dos SPEs são escalonadas pelo sistema operacional muito mais do que as threads do PPE, e os acessos de memória dos SPEs, sincronização e comunicações (todos via DMA) por eles próprios. Neste modelo o PPE executa o sistema operacional, e pode fornecer funções administrativas, e é ligeiramente envolvido com manipulação de erros, mas as aplicações são executadas quase que exclusivamente nos SPEs. O modelo de programação streaming também é literalmente suportado no processador CELL. Sendo a memória local mapeada, os dispositivos podem, se per- 86 mitido pelo sistema operacional, acessar diretamente via DMA a memória local. Este mapeamento também permite à memória local mapear diretamente as transferências via DMA para a memória local sem ter que passar pela memória principal, mantendo a comunicação inteiramente no chip (caso a memória local da origem e do destino estejam no mesmo chip). Portanto, um pipeline computacional com um ou mais Kernels computacionais por SPE é literalmente suportado. Em geral, o balanceamento de carga é um pouco mais difícil neste método do que no modelo de ace leração computacional, com passo adicional é colocado pelo SPE no pipeline com um pouco mais de trabalho. O ambiente de programação CELL é muito rico, fundamentado e bastante complexo. É constituído por grande conjunto incorporado num pacote desenvolvimento, que hoje se encontra na versão 3.1 e dele fazem parte: Kernel do sistema operacional baseado no Fedora 7 e no Kernel de Linux, GNU Toolchain, GNU gdb, compilador IBM XL C/C++ (e também o IBM XL Fortran para o PPE), bibliotecas matemáticas específicas para CELL BE (SIMD e MASS), bibliotecas e utilitários para suporte à performance, biblioteca de protótipos e exemplos e mais o ambiente de desenvolvimento IBM Eclipse. O ambiente de programação CELL também contempla uma vasta, e bem escrita, documentação com manuais, artigos, trabalhos publicados, etc, que são de enorme valia para todo aquele que gostar, se interessar ou necessitar de trabalhar com o CELL. É Uma documentação magnífica e pública. 10 USO DE GPUS E DE CELL NO AMBIENTE HPC Motivados pelo altíssimo custo de ambientes de computação de alto desempenho (HPC), quando se consideram hardwares de CPUs em cluster interconectados por switches em enormes e caras instalações, que requerem muita energia 87 para as centenas de processadores em racks e sua obrigatória refrigeração aliada da baixa capacidade de adensamento destes processadores, o mercado internacional referente a este nicho (computação de alto desempenho) clama por soluções alternativas mais economicamente viáveis, com maior otimização de recursos como um todo e a custos mais acessíveis. Com estes argumentos, fabricantes de GPUs como a Nvidia propõem soluções alternativas baseadas num conjunto variado de suas GPUs interconectadas a workstations multicore de alto desempenho, permitindo, para algumas aplicações específicas, um ganho real de produtividade fundamentado este na aceleração do desempenho das aplicações e numa significativa redução dos custos, principalmente com a desnecessária inserção de muitos nós de computação baseados na arquitetura x86 da Intel ou AMD. Outros visionários, para provas de conceito têm proposto e realizado testes de clusters de Sony PS3 com o processador CELL. Estas propostas são de baixo custo, mas de baixíssima confiabilidade, pois os Sony PS3 não foram projetados para ambientes hostis e não possuem a robustez necessária para suportar dias ou até mesmo semanas de processamento intensivo. São ótimos como prova de conceito, mas impraticáveis para a utilização em larga escala por motivos tecnológicos de hardware e software. Entretanto, creio que devamos incentivar este modelo através das universidades, centros de pesquisa, etc, devido ao seu baixo custo de inves timento e facilidade de aquisição, não necessitando, guardadas as devidas proporções, de infra-estrutura dispendiosa e de difícil aquisição por razões burocráticas. A partir do lançamento do Sony PlayStation 3 (PS3), como em suas versões anteriores é largamente usado no mercado, instituições científicas, escolas e universidades passaram a investir em ambientes de HPC baseados em processadores CELL devido ao baixo custo (poucas centenas de dólares por PS3) e a compatibilidade do sistema operacional com o Linux (inicialmente o Yellow Dog e, posteriormente, o Fedora Core 6). Estes ambientes ficam fisicamente muito parecidos, como mostrado na Figura 22, mas não possuem, por enquanto, a robustez, comuni cação, refrigeração própria e gerenciabilidade suficientes e necessárias para as exi gências de um ambiente de HPC, que necessita trabalhar horas a fio com 100% de utilização do processador. Deve-se destacar que isto nada tem a ver com o processador CELL, mas sim com o uso indevido deste a partir de uma console de jogos 88 para outros trabalhos mais sérios. De qualquer forma, considerando-se o baixo investimento no ambiente, vale como prova de conceito e possibilidade de familiarização e testes ao vivo com o processador CELL, sem se necessitar dos pacotes de emulação fornecidos pelo fabricante, IBM. Figura 22: Cluster Linux de IBM CELL com Sony PS3 Fonte: Buscador Google, imagens [50] Comercialmente, temos o lançamento das lâminas de processador IBM CELL com dois CELL por lâmina ou blade (como dizem os americanos) exibidas na Figura 23, e com todo o suporte e confiabilidade do fabricante, mas a preços atualmente proibitivos para se efetuar todo o investimento nesta tecnologia. Além disso, devemos considerar, neste instante, que a dificuldade maior é o de programação para CELL, que aliada ao custo inviabiliza qualquer movimento nesta direção imediatamente. Mas, do ponto de vista meramente científico é uma enorme tentação: um colírio para os reluzentes olhos das mentes que brilham. 89 Figura 23: Lâminas de CELL e IBM CELL Blade Center QS20 Fonte: Site do fabricante IBM, ww.ibm.com [8] De nossa parte acreditamos que as três escolhas descritas nos parágrafos anteriores são excelentes (GPU +CPUs, CELL em PS2 ou blade CELL) e, a de pender da capacidade econômica, deve-se optar por quantas se puder pagar embora, neste momento, os preços sejam proibitivos para uma grande maioria de usuários (da ordem de 10K dólares por blade), pois não temos certeza absoluta sobre qual delas realmente vingará e será o paradigma de um futuro próximo. No entanto, não devemos abandonar a solução de clusters do tipo beowulf devido ao lançamento das recentes CPUs multicore com 2, 4, e futuramente mais e mais núcleos numa mesma pastilha, pois a programação paralela para este ambiente é bem estabelecida, madura e fornece bons resultados do ponto de vista da relação custo-benefício, o ponto negativo é a baixa densidade de nós computacionais por rack, o enorme consumo de energia para operação e refrigeração do sistema como um todo e o alto custo em infra-estrutura primordialmente. Figura 24: Instalações típicas de clusteres Linux Beowolf Fonte: Buscador Google, imagens [50] 90 A Figura 24 Ilustra fisicamente um ambiente de clusters de x86 convencional, também denominado Beowulf no mercado, constituído de nós de processamento com um ou dois processadores físicos distintos e armazenados em gabinetes de altura 1U (1.75 polegadas), empilhados em armários (racks) de 42U de altura (por exemplo), e interconectados via rede através de switches de 1 Gigabit Ethernet, em geral. Para troca de mensagens, normalmente usa-se o protocolo MPI (Message Passing Interface). Uma solução do tipo Beowulf é considerada antiga e consumista de energia, de espaço e de refrigeração mas funciona muito bem pelo custo relativamente baixo ou adequável às necessidades e capacidade de investimentos que se tenha, mas é de pouca confiabilidade, de fraca gerenciabilidade e baixa escalabilidade. Podem ser escalados milhares de nós num cluster beowulf, porém a um custo total muito elevado e ineficiente, principalmente devido à infra-estrutura. Existem muitas outras propostas de ambientes de computação de alto desempenho. Dentre elas, a do IBM BlueGene/P merece destaque por ser a primeira a demonstrar de fato a possibilidade de se poderem escalar centenas de milhares de processadores para se obter respostas a um problema ou tarefa que deles necessitem com desempenho que pode ultrapassar 1 PetaFLOPS (atingido até 3 PetaFLOPS sustentados, conforme garante o fabricante IBM). 11 UMA EXPERIÊNCIA PRÁTICA COM GPUS E CELL Testamos e executamos todos os programas exemplos tanto em GPU Nvídea Quadro FX 5600, compatível com a arquitetura de desenvolvimento CUDA da própria Nvídia como, também, o mesmo foi feito com o CELL processor através de um Sony PlayStation 3, PS3, com um PPE e seis SPE habilitados como são habilitados de fábrica para os PS3. O PlayStation 3 possuía 512 MB de RAM, disco Blue Ray de 60 GB e demais componentes padrão. O sistema operacional instalado foi o Fedora Core 5.0 com as instruções de instalação conforme o sítio da IBM para tal. 91 Para a placa gráfica Nvídia Quadro FX 5600 com 1.5 GB de GDDR3 contamos com uma workstation Sun Ultra 40 M2 com dois processadores AMD Opteron 2218 com clock de 2.6 Ghz e memória RAM de 32 GB do tipo DDR2 667 Mhz sob o sistema operacional Red Hat WS 3.0 Update 8 com monitor Sony de 20 com resolução máxima de 1920 x 1200 ou 1600 x 1200 (Figura 25). Figura 25: Ambiente Teste: Sun + NV FX 5600 + cluster PS3 + switch Gig E Fonte: Sites dos fabricantes Sun [25], Nvidia [9] e bucador Google [50] Para as duas distintas plataformas, GPU e CELL, executamos todos os programas exemplo de seus respectivos SDK (pacotes de desenvolvimento). Não tivemos nenhum problema de instalação ou testes, mas as instalações foram efetuadas com muito cuidado e todos os detalhes e pré-requisitos de todas as ordens, prin cipalmente bibliotecas diversas tanto matemáticas quanto gráficas, foram efetuadas com sucesso. A documentação de instalação de todo o software para CELL em PS3 é muito boa e deve ser seguida a risca. Podemos encontrar alguns problemas no que se refere ao dispositivo de saída como monitor, devido a necessidade de se trabalhar com monitor padrão simples. Isto não é obrigatório mas pode vir a causar problemas que tomam tempo na instalação inicial do Linux para CELL. As bibliotecas gráficas também precisam ser atualizadas bem como os compiladores e depuradores CELL compatíveis. De um modo geral, podemos concluir que as informações fornecidas pelo fabricante são suficientes para iniciados e não suficientes para novatos em Linux e CELL. 92 Quanto a GPU Nvídia, foi muito mais fácil por a instalação é idêntica a de uma placa gráfica comum num PC. Inicialmente, instala-se o sistema operacional Linux Red Hat WS 3 Update 8 (pré-requisito da versão CUDA 1.0 testada). Após a instalação física da placa e, se necessário, a atualização da BIOS da workstation Sun Ultra 40 M2, é só instalar o device driver mais atualizado para a placa gráfica da Nvídia CUDA compatível (no nosso caso Quadro FX 5600) e pronto, o sistema GPU+CPU está disponível para utilização. Os testes executaram perfeitamente e sem erros nas duas plataformas testadas, GPU e CELL. Para efeito de comparação, resolvemos testar: a multiplicação matricial, a Fast Fourier Transform em três dimensões (FFT3D) e o programa de ordenação (sort) denominado Bitonic Sort nas duas plataformas para compararmos os tempos de execução em cada uma delas. Na verdade, desistimos dos testes, pois verificamos que não concluiríamos absolutamente nada de novo em relação aos programas já testados e com dados de resultado de domínio público, além de ter que inserir ro tinas de medição de tempo de processamento, pois as medições via comando de mensuração de tempo de execução de comandos do Unix como time e timex não possuem a precisão necessária para tal, ou sejam, produzem respostas em décimos de segundo quanto os resultados dos cálculos referentes aos exemplos em GPU Nvidia e IBM CELL são muito mais baixos, da ordem de milésimos de segundo ou menores. Deveríamos, então encher os processadores de carga, mas acreditamos mais uma vez que esta tarefa nada acrescentaria ao estudo. Concluímos apenas que a funcionalidade, operacionalidade e disponibilização tanto da GPU da Nvidia Quadro FX 5600 em Sun Ultra 40 M2 como do processador IBM CELL internalizado num Sony PlayStation 3 são exeqüíveis e relativamente de fácil implementação. 93 12 A COMPUTAÇÃO DE PETAFLOPS Um dos desafios computacionais da humanidade, no século passado, foi o de atingir o desempenho computacional de um PetaFLOPS, ou seja, obter cerca de um quatrilhão de operações de ponto flutuante por segundo de maneira sustentada. Este desafio foi encaminhado por vários centros de pesquisa e governos, exigindo vultuosos recursos e uma verdadeira corrida para atingi-lo ou ficar em evidência momentaneamente devido à primeira colocação na corrida. Várias e várias tentativas ambiciosas foram realizadas cada vez mais, de TeraFLOP em TeraFLOP, revezando-se vários dos excelentes participantes. Os problemas eram, e são, gigantes cos: adensamento de processadores, alimentação elétrica, área física, refrigeração, capacidade de processamento propriamente, programação, sistemas de arquivos, I/O paralelo, dentre outros. No ano 2002, os japoneses se posicionaram em primeiro lugar com o seu Earth Simulator [51] com performance da ordem de 50 TeraFLOPS [52] : um marco pre- servado por dois anos seguidos. Logo, por razões de cunho ideológico e necessidades científicas, os americanos resolveram contra-atacar e deram prosseguimento ao já existente projeto em conjunto com o departamento de defesa americano, o LLNL [53] e a IBM para o projeto IBM BlueGene [54] , que se propunha a uma escalabilidade, que definiremos como a capacidade de se poder interconectar e processar em conjunto uma quantidade significativa de processadores, nunca dantes obtida. Assim o conseguiram com uma inovadora tecnologia altamente escalável de 4.096 a um milhão de processadores de baixo clock, mas podendo atingir até o tão sonhado 1 PetaFLOPS, teoricamente. Como prova de conceito e realização, conseguiram e retomaram a primeira posição para os americanos em 2004 e a preservam até os dias atuais com o seu BlueGene/L (o L é de Linux Affinity), que em sua nova geração denomina-se BlueGene/P (o P é de PetaFLOPS) (Figura 26), que na realidade pode 94 atingir teoricamente até 3 PetaFLOPS . O IBM BlueGene é uma arquitetura cienti- [54] ficamente interessantíssima mas não a contemplaremos no escopo da discussão deste modesto trabalho. Figura 26: Fonte: IBM BlueGene/P site da IBM [54] Área Aplicações de Petascale Saúde, Ciências da Vida Novas drogas, pesquisa de órgãos, genoma. Assoreamento de rios, efeitos de mudanAmbiente: Recursos Naturais, Análise ças climáticas ou qualidade do ar, agriculde Terremotos tura, incêndios, águas e outros recursos. Combustão turbulenta, predição de eficiProdução e conservação de Energia ência de combustíveis, mais eficiência nas células solares. Nanociência Desenvolvimento de novos materiais, semicondutores mais velozes e com mais baixa potência, desenvolvimento de drogas, células de combustível, melhores screening de aeroportos. Pesquisa Compreender a formação do universo, matéria escura, Física Quântica, pesquisas de proteínas, etc, etc. Tabela 8 Problemas desafiadores para pesquisa de Fonte: MIT Course 6.189 IAP, 2007 [37] Podemos dizer que a computação de PetaFLOPS é coisa do passado, pelos menos nos moldes que se apresentou e que se realizou até hoje, ou seja, a custos de centenas de milhões de dólares de investimento e necessidades de in- 95 fra-estrutura e manutenção de energia, refrigeração, etc. Mas, o importante é que a humanidade conseguiu e continua a desenvolver-se em tal área. O problema fundamental foi deslocado no sentido de se obter não apenas o desempenho de PetaFLOPS, mas este desempenho a custo muito mais econômico e viável como um todo e com menores recursos energéticos e de infra-estrutura para tal. A Tabela 7 mostra algumas das principais aplicações que necessitam da computação de PetaFLOPS. A tendência atual, que se apresenta nas informações públicas, é que a computação de alto desempenho medida em TeraFLOPS se desloque para o desktop do usuário, isto é, esteja ao alcance de qualquer um indivíduo que dela necessite sem precisar que se possua uma enorme riqueza para ter acesso a este recurso computacional. Está tendência se configura através de GPUs ou CELL, por exemplo, em conjunto com processadores multicore convencionais de arquitetura x86 a serem disponibilizados como commodities para todos os usuários em futuro breve, como as GPUs já o são e, de certa forma, os CELL também através do PS3. Como consideramos a melhor proposta atual, vamos exemplificar com o projeto do Laboratório Nacional de Los Alamos [55] nos Estados Unidos, para tipificar nitidamente a tendência mais relevante deste início de século, ou seja, a computação de alto desempenho baseada numa arquitetura híbrida e mista, formada por pro cessadores multicores e CELL processor, isto é, uma computação paralela heterogênea. Inicialmente, estima-se e vai-se trabalhar com esta tecnologia mista em processadores distintos e fisicamente separados, mas em um mesmo rack ou Blade- Center porém, o que se espera num futuro próximo é que estes possam ser acoplados em uma mesma placa-mãe ou até mesmo numa mesma pastilha. Não devemos subestimar a comprovada capacidade tecnológica, tenacidade e disciplina dos japoneses, que prometeram retornam com propostas inovado ras após 2012 e já apresentaram o Grape DR na universidade de Tóquio (Greatly Reduced Array of Processor Elements with Data Reduction) . [30,57-59] Bem, vamos detalhar alguns pontos cruciais do Projeto Roadrunner do Labaratório de Los Alamos a seguir, e apresentamos seu logotipo na Figura 27. 96 Figura 27: Logo do projeto RoadRunner Fonte: Los Alamos Lab [55] Os dois objetivos principais do projeto Roadrunner [56] são: o progresso científico na pesquisa de armas; e, avanços arquiteturais em algoritmos e aplicações executados com computação de PetaFLOPS. Considerando a tendência de computação heterogênea e híbrida da computação científica de alto desempenho, escolheu-se uma combinação de processadores IBM CELL e AMD Dual Core interconectados com rede Infiniband para alcançar os objetivos traçados para acelerar os algoritmos. Na verdade, arquiteturas hete rogêneas já foram tentadas e bem sucedidas anteriormente como IBM Deep Blue, FPS Array Processor, vários supercomputadores FPGA, Tsubame, etc, mas este do projeto Roadrunner atingirá o desempenho de PetaFLOPS . O logo do projeto é [56] uma ave local muito rápida (Figura 27). Existem duas formas de ataque para atingir o desempenho de PetaFLOPS: a escalabilidade de processadores ou o aumento da velocidade de processamento dos nós. O IBM BlueGene atacou a primeira mas Los Alamos pretende atacar a segunda como pode ser visto na Figura 28. 97 Figura 28: Distintas abordagens e direções na busca do PetaFLOPS Fonte: Los Alamos National Lab [55] Na Figura 28, podemos verificar que o projeto Roadrunner é completamente e filosoficamente ortogonal ao projeto IBM BlueGene. Esta ortogonalidade deve-se ao fato de se tentar obter PetaFLOPS de desempenho não baseado na alta escalabilidade do BlueGene de poder escalar centenas de milhares de processado res homogêneos de baixo clock (700 MHz) mas na iniciativa de tentar obter PetaFLOPS com poucas dezenas de milhares de processadores heterogêneos de alto clock (>= 3,2 Ghz) e alto desempenho desses processadores. Fundamentalmente baseados em IBM CELL processor e servidores SUN dualcore quadprocessados, por enquanto. Isto quer dizer o mesmo desempenho a um custo mais baixo. 98 Figura 29 O processador CELL, peça fundamental do projeto RoadRunner. Fonte: Los Alamos National Lab [55] Da Figura 29, vemos que o CELL processor é primordial para os objetivos do projeto Roadrunner. Partindo do CELL BE (1+8) de primeira geração com tecnologia de 90 nm SOI com performance da ordem de 15 GF/s em dupla precisão em 2006 e atingindo ~100 GF/s com sua primeira revisão CELL BE (1+8eDP) de 65 nm SOI até alcançar a notável marca ~1 TF/s Processor com tecnologia 45 nm SOI. O roadmap do CELL indica significativas melhorias no processamento em ponto flutuante de precisão simples e posteriormente dupla aliado a um aumento de memória inicialmente para 2 GB e em seguida para 16 GB com comunicação em PCI Express 16x. Tudo isso com o apoio da evolução dos pacotes de desenvolvimento aguardada para as novas versões SDK 3 (atual) e SDK 4 (2008) [27] . 99 O projeto consiste de três fases distintas [56]: • Fase 1: Sistema Básico. • Fase 2: Propotipação com CELL. • Fase 3: Atingir o PetaFLOPS e demonstrar o novo paradigma de HPC. Esquematicamente, mostramos na Figura 30 a proposta pós-fase 3: Figura 30 Em apenas 18 racks , 7.000 CPUs e 13.000 CELLs : 1 PetaFLOPS Fonte: Los Alamos Lab [55] A programação do sistema como um todo, basear-se-á em três premissas de paralelismo, conforme se demonstra em forma de diagrama na Figura 30. 100 1. MPI ainda sendo usado entre os nós e os nós internos aos multicore (AMD Opteron dual-core e CELL (1+8); 2. Alívio dos algoritmos computacionalmente intensivos de grande granularidade para os CELL processors nos nós computacionais; e 3. Paralelismo de granularidade fina via threads nos próprios processadores CELL. Figura 31 Arquiteturas distintas com duas CPUs físicas distintas Fonte: Los Alamos Lab [55] As Figuras 30 e 31 demarcam nitidamente a opção por uma arquitetura heterogênea. 101 12.1 SISTEMAS DE COMPUTAÇÃO HÍBRIDA ESTÃO CHEGANDO [ Já vimos esse filme antes: “Deja Vu” ] Na atualidade as arquiteturas de computadores estão tendendo ao acoplamento de sistemas paralelos: combinando diferentes tecnologias de distintos fabricantes e compondo sistemas não homogêneos. Por hora, estes sistemas heterogêneos são formados por sistemas homogêneos fisicamente distintos como arquiteturas x86, GPUs, Power 64 e outras mas num futuro próximo serão formadas por es tas ou outras que hão de vir numa mesma pastilha de maneira homogênea como os multicore x86 ou mesmo heterogênea como os multicore tipo CELL (1 PPE + 8 SPE), como exemplificado na Figura 31. HETEROGENEIDADE NO NÍVEL DO CHIP No passado, como um seu corolário, a Lei de Moore forneceu os argumentos para o aumento da densidade lógica nos chips. Os chips tornaram-se mais potentes e mais capazes de operações de ponto flutuante (FLOPS), registradores, caches, execução fora de ordem, operações pendentes de memória e as velocidades de processamento aumentaram devido à miniaturização dos componentes dos chips. No presente, a Lei de Moore ainda vigora, mas as velocidades dos clocks atingiram um plateau (patamar estável), a complexidade do processador e o paralelismo em nível de instrução parecem ter alcançado um plateau também. Isto implica que os processadores multicore agora deverão ser a norma e o padrão. No futuro, existirão mais e mais dispositivos por chip (4, 8, 32, 64, 128, ...) preservando-se ainda a Lei de Moore, conforme o ANEXO A descreve em detalhes. 102 Um grande número de dispositivos poderão levar a arrays ou agregados de dispositivos interconectados, não apenas multicore, mas também múltiplas arquiteturas de hierarquia de memória assim como dispositivos de fins especiais serão quase que certamente adicionados, ou seja, definitivamente teremos a heterogeneidade no nível do chip. HETEROGENEIDADE NO NÍVEL DO SISTEMA Nós, provavelmente, já a estamos experimentando agora em nosso PC desktot ou laptop com uma placa gráfica separada (CPU + GPU). Dentre outras máquinas e dispositivos existentes podemos citar: Cray XD1 (FPGA), SRC MapStation (FPGA). GPGPU (computação em placas gráficas, cartões Clearspeed SIMD PCI, cartões FPGA PCI e chips IBM CELL BE). Existem novas iniciativas para aceleradores em nível de nó como AMD Torrenza (soquetes, HT & HTX no nível dos dispositivos), Intel/IBM Geneseo (dispositivos a nível de cartões PCI Express). Novos sistemas HPC heterogêneos ou híbridos como LANL Roadrunner (Opteron + CELL), Tokyo Institute of Technology TSUBAME (Opteron com cartões Clearspeed) e TeraSpft (blades CELL). A Figura 32 caracteriza claramente a heterogeneidade discutida neste parágrafo e aplicada no Projeto RoadRunner. Podemos observar processadores CELL, que já são heterogêneos por si próprios e mais servidores de arquitetura x86_64 dualcore, formadas por CPUs AMD Opteron Dualcore. 103 Figura 32 Um exemplo marcante de heterogeneidade Fonte: Los Alamos Lab [55] Os aspectos similares entre a programação de sistemas, e / ou de dispositivos heterogêneos, e a programação atual são vários e podemos destacar os seguintes : • A execução paralela é em threads ou via OpenMP (possivelmente, apenas não ao nível de loop); • Tratamento de unidades em recortes, filas de trabalho e blocos de dados; com relação à comunicação e transferência de dados preserva-se a superposição de comunicação e computação (apenas 104 sem amortização e operações de comunicação de dados via send/recv/put/get,conforme o MPI); • Operações vetoriais (SSE, Cray, dependências de dados); a Lei de Amdahl [35] continua válida para speedup paralelo; • A linguagem C continua a ser a pedra fundamental que funciona como o denominador comum entre o atual e o novo; • O código é decomposto em duas, três ou mais partes cooperativas com diferentes funções de computação, coordenação, upload/download, retardo de mensagens; • O usuário terá visibilidade explícita de memória e transferência de dados via DMAs e superposição de comunicação e computação, além de memórias locais de tamanho limitado e restrições ao alinhamento de dados; e • Preocupações sobre a granularidade de parte do código devem ser consideradas como Flops versus requisitos de largura de banda de dados, blocos de código, rotinas inteiras e coleções de rotinas implementadas em algoritmos, pacotes físicos integralmente completos; e, por último, necessárias conversões do tipo Big-Endian e Little-Endian (CELL-Opteron, por exemplo). 12.2 “DEJA VU” (PARECE QUE A HISTÓRIA SE REPETE) O legado do conhecimento em programação adquirido no passado pode trazer algumas vantagens para o presente e o futuro. Como dizem os americanos “Teach new dogs old tricks” (‘Ensinar velhos truques aos novos cachorrinhos’). 105 Muitas técnicas do passado, como as diagramadas na Figura 33, são semelhantes e aplicáveis às idéias de programação dos sistemas heterogêneos que se vislumbram: processadores de periféricos do CDC 6600/7600 (10-way co-processadores de I/O); hierarquia de memória explícita do CDC 660 ECS & 7600 LCM/SCM; buferização do I/O fora do núcleo (superposição dos dados do núcleo); overlays de FORTRAN (tamanho de imagens de programa); sistemas de processamento de array de ponto flutuante (FPAPs); computador analógico-digital (programação híbrida); JCL IBM e cartões DD. Figura 33 O futuro imita o passado Fonte: Los Alamos Lab [55] 106 13 TECNOLOGIAS ALTERNATIVAS A SUBSTITUIÇÃO DO CMOS 13.1 A EVOLUÇÃO DAS TECNOLOGIAS DOS TRANSISTORES O transistor, inventado em 1948 nos laboratórios da Bell Telephone Company por Bardeen, Brattain e Schockley, sem patente registrada, foi uma das invenções que mais influenciou a nossa maneira de viver. Posteriormente, este mérito foi reconhecido e laureado com o prêmio Nobel de Física do ano de 1956 pela pesquisas e descoberta do transistor. O advento da tecnologia do transistor bipolar, tornouse o elemento ideal para uma lógica binária liga-desliga (on-off) [57]. Em 1952, G.W.A. Drummer, observou que o circuito eletrônico poderia ter dimensões menores se os seus componentes discretos: transistor, resistor e capacitor estivessem no mesmo pedaço do semicondutor. É o que se passou a denominar de circuito integrado. As idéias de Drummer só puderam se tornar realizáveis, devido a problemas decorrentes de dificuldades técnicas, em 1959 graças a Jack Kilby da Texas Instruments, também laureado com Nobel de Física em 2000 pela participação na invenção do circuito integrado. A tecnologia de transistores bipolar passou a ser produzida em massa nos anos 60 e, no começo desta mesma década, uma nova tecnologia de mais fácil incorporação na produção dos chips, a tecnologia do transistor de efeito de campo, MOSFET (Metal-Oxide-Semiconductor Field Effect Transistor), inventado por Steven Hofstein e Frederic Heiman da empresa RCA (Radio Corporation of America). À tecnologia MOSFET, incorporou-se uma novíssima tecnologia complementar, denominada CMOS (Complementary Metal-Oxide-Semiconductor) formada por transistores MOSFET e portas CMOS, cuja principal vantagem seria o baixo con- 107 sumo de energia. E esta ulterior tecnologia CMOS, vigora e domina até os dias atuais. Como podemos observar que, os limites fundamentais associados às dimensões dos dispositivos criados a partir da tecnologia CMOS, já demonstram esgotamento e estão próximos de seus limiares. A mínima energia para processar um bit de informação, Ebit, opera a 0,017 eV e a uma temperatura T = 300 K, (~ 26,85 graus Celsius - temperatura ambiente). O grande desafio na engenharia da eletrônica digital é o desenvolvimento de tecnologias até o limite-de-escala já discutido neste trabalho e que ainda detalharemos mais à frente. Dos vários problemas associados devido a miniaturização cada vez maior dos transistores, ou seja, do maior adensamento de transistores por unidade de área, que alcançará 850 milhões de transistores em pastilhas com áreas menores do que 250 mm2, como no caso da processador IBM CELL em sua ter- ceira geração, prometida para fins de 2010, conforme roadmap do processador CELL esboçado na Figura 29, são : 1. dificuldades na dissipação do calor gerado nas operações. 2. instabilidades devido a efeitos quânticos de tunelamento de cargas, podendo adquirir proporções incontroláveis. 3. dificuldades nos processos litográficos de fabricação. 4. custos financeiros para construção de novas fábricas, o que poderá aumentar o processo de fabricação do transistor e não diminuir, como acontece atualmente. 108 13.2 LIMITES DE TRANSISTORES NA TECNOLOGIA MOSFET Enfim, dentro do paradigma da atual arquitetura de microchips baseados em tecnologia CMOS, os chips podem não mais evoluir e a Lei de Moore, talvez tenha que ser esquecida por causa dos limites-de-escala da Física e da obrigatória quebra do paradigma da tecnologia CMOS. Do ponto de vista formal da Mecânica Quântica, e pelo Princípio da Incerteza de Heisenberg, a distância mínima da porta é da ordem de 1,5 nm mas, antes que possamos nos aproximar de 1,5 nm o tunelamento do elétron torna-se não desprezível já próximo a 5 nm e, para agravar o esgotamento da tecnologia CMOS, próximo de 5 nm a potência dissipada é aproximadamente 3,15 x 10 5 W/cm2. Apesar de, nos últimos 30 anos, a microeletrônica avançar e conseguir aumento de ambos, velocidade e densidade na escala dos dispositivos componentes (isto é, CMOS switch), esta tendência terminará bem antes de atingirmos a barreira de energia, pois não seremos capazes de remover o calor,provocado pela dissipação de energia [29] . Embora o Princípio da Incerteza de Heisenberg exija profundos conhecimentos de Mecânica Quântica, os corolários dele decorrentes são de fácil demonstração. Senão, vejamos para demonstrar os dados do parágrafo anterior [29] : ∆x.∆p ≥ ћ ∆E.∆t ≥ ћ xmin = ћ / ∆p = ћ / √(2 me Ebit) = ћ / √(2 me KB T ln 2) = 1,5 nm ( T = 300 K, ~ 27 graus centígrados) Mas, antes que estes limites físicos sejam atingidos, outros fatores como dissipação térmica, por exemplo, já atuarão e restringirão a obtenção destes [28,32] . 109 13.3 AS FUTURAS TECNOLOGIAS QUE SE APRESENTAM Os cientistas estão buscando alternativas. A expectativa é que só se possa alcançar as limitações da tecnologia CMOS em aproximadamente 15 anos de desenvolvimento para que se obtenha tecnologia de fabricação próxima a 5 nm. Então, quais são as alternativas disponíveis? Bem, as alternativas disponíveis e candidatas a sucessão da tecnologia CMOS são : [32] o Diodos Ressonantes de Tunelamento; o Dispositivos de Tunelamento de um Único Elétron; o Autômatos Celulares Quânticos; o Nanoeletrônica Molecular; e o Spintrônica. Vamos, a seguir, descrever sucintamente cada uma dessas tecnologias candidatas e emergentes para fins de trazer um pouco de luz às novas idéias. 1.1.1 TECNOLOGIA DE DIODOS RESSONANTES DE TUNELAMENTO Esta abordagem consiste na supressão do tunelamento de um elétron para uma ilha pelo carregamento da energia de um único elétron. A principal vantagem seria a baixa potência e a alta densidade do dispositivo. Mas como desvantagens, temos uma tecnologia imatura, dificuldades de fabricação, 110 lentidão inerente, problemas de conexões e, principalmente, baixas temperaturas (~ 40 K). 1.1.2 AUTÔMATOS CELULARES QUÂNTICOS (QCA) Este seria um novo paradigma de computação composto por arrays de dispositivos quânticos e procedimentos computacionais. Procedimentos estes que poderiam: gravar bits de entrada; permitir que arrays possam relaxar para o estado fundamental dessas entradas; e poderiam ser feitas leituras de resultados de computação pela sensibilização de estados de polarização. Os dispositivos podem ser fios lineares, inversores, portas, e células de memória. As principais vantagens seriam: resolver o problema das conexões pelo uso da Lei de Coulomb ; tornar possíveis elementos de computação de ultra-alta [11] densidade; e, obter dissipação de potência extremamente baixa. As principais desvantagens são: uniformidade celular (a função de resposta da célula degrada significativamente se um ou três elétrons estiverem na célula); deve ter o controle preciso dos pontos quânticos (variações nos tamanhos dos pontos inibem a biestabilidade celular); e, temperaturas absolutamente baixas (~4 K). 1.1.3 NANOELETRÔNICA MOLECULAR Baseada nos nanotubos de carbono, permite Switches/Diodos com diferentes tamanhos e dopagem CNT para fazer junções PN; transistores, substituindo 111 canais por CNTs em CMOS. Como desvantagens têm: controle de quiralidade, Assembly e alto custo. A nanoeletrônica também poderia se basear na eletrônica de uma única molécula com o rotaxane e benezethiol. A principal desvantagem seria baixo reprodutibilidade e escalabilidade. 1.1.4 SPINTRÔNICA Esta é a principal tecnologia candidata a superar as limitações fundamentais do CMOS. É a mais bem posicionada. Sua denominação, Spintrônica, deve-se a um neologismo para designar “eletrônica baseada em spin” e também é conhecida como magnetoeletrônica. A eletrônica baseada em spin, ou seja, na propensão quântica dos elétrons de girar (spin em inglês) assim como fazer uso do estado de suas cargas , nasce com a descoberta do efeito magnetoresistivo gigante (GMR) [11] em 1988, pela equipe de Albert Fert, do Laboratório de Física dos Sólidos em Orsy (CNRS, França). Esta tecnologia levou ao desenvolvimento e patente de cabeçotes de leitura de discos pela IBM, em 1997 [57] . A memória baseada em spintrônica (MRAM) avançou rapidamente e a computação baseada em spin está chegando. A Spintrônica leva a vantagem de que o spin é eletricamente carregado como o elétron e possui um estado de energia fracamente detectável caracterizado como spin up (spin para cima) e sping down (spin para baixo); requer-se menos potência para manipular spins do que cargas. Existem duas abordagens para uso do spin: a magnetoresistividade e as correntes de spin polarizado em semicondutores formados por materiais semimetálicos ou semicondutores magnéticos diluídos (DMS). Esses dois estados eletrônicos dos spins permitem uma extensão direta da lógica binária, vastamente empregada nos computadores digitais. Exploram-se os estados “spin up” e “spin down” com os assim chamados qubits ou bits quânticos 112 spintrônicos como superposições de 0 ou 1 intrinsecamente, então, um registrador de dois qubits spintrônicos poderia ter até oito estados possíveis ao invés de quatro. As principais vantagens da spintrônica são: a não volatilidade; o aumento na velocidade de processamento de dados; a diminuição do consume de potência elétrica; o aumento nas densidades de integração; a interface com tecnologia CMOS existente e menores custos efetivos pois utiliza técnicas de processo semelhantes as da atual tecnologia CMOS. Além disso, existem dispositivos em desenvolvimento, tanto teóricos como práticos. Por exemplo: transistores de spin ou diodos de spin; alguns já demonstrados, como células de memória,MRAM (que logo, logo, será comercializada). Sobre estas MRAMs podemos dizer que são memórias não-voláteis, o que significa que preservam a informação após o desligamento da força de alimen tação, são 1.000 vezes mais rápidas na velocidade de gravação e sem perdas por ciclo. Graças a Spintrônica foi possível reduzir, por exemplo, o tamanho dos discos rígidos, porém aumentando-se a capacidade de armazenamento . [32] O parceiro fundamental da IBM na pesquisa de Spintrônica é a universidade de Stanford e as pesquisas visam superar as barreiras de tunelamento e aquecimento, provenientes das limitações físicas da tecnologia CMOS. A spintrônica é a tecnologia candidata mais bem posicionada para suceder a tecnologia CMOS [8,15] . 113 14 CONCLUSÕES As necessidades computacionais geraram mais e mais competição entre os fabricantes de processadores para a fabricação de processadores monoprocessados com velocidades de processamento cada vez maiores. Corroborando a Lei de Moore, e graças à tecnologia de fabricação envolvida, esses fabricantes puderam adicionar mais e mais transistores equivalentes em diminutas áreas de pastilhas cada vez menores, permitindo-se um adensamento superficial destes transistores por processador e acelerando-se mais ainda a velocidade do clock ou freqüência do chip até atingirem os limites impostos pela física. O adensamento foi tão acelerado que as freqüências alcançadas já beiravam o patamar das reações nucleares atômicas, exigindo-se assim enormes quantidades de energia de alimentação dos circuitos com também enormes necessidades de refrigeração destes. O aumento da freqüência de clock do processador por si só não é suficiente para drásticas modificações no aumento do desempenho dos processadores atuais e, muito menos, os do futuro. É dada a hora da quebra do paradigma da computação atual e o já anunciado fim dos processadores monoprocessados. É chegada a hora de saudarmos o multicore e nos despedirmos do singlecore. Mais uma vez, graças ao desenvolvimento tecnológico dos processos de fabricação de chips 90 nm, 65 nm, 45 nm, etc pode-se adensar mais ainda os tran sistores nos chips e resolveu-se inserir múltiplos núcleos numa mesma pastilha só que com o requinte de freqüências mais baixas, ganhando-se assim mais capacidade de processamento com relativamente menor consumo de energia e necessidades de refrigeração. Um novo paradigma se apresenta: a nova era dos processadores multicores homogêneos. 114 Concomitantemente, tendo os antigos co-processadores aritméticos como modelos e devido às gigantescas demandas por computação gráfica, motivadas principalmente pela grande aceitação comercial do apelo aos jogos eletrônicos, foram desenvolvidos rapidamente dispositivos gráficos dedicados de altíssimo desempenho computacional em específicas aplicações gráficas e situados posteriormente em dispositivos gráficos separado, ou seja, placas gráficas mais baratas que os pro cessadores, mas ainda, até aqui, dependentes destes para requisitar e disponibilizar seu potencial computacional para os usuários que dele necessitem. Estes dispositivos gráficos foram se tornando tão poderosos computacionalmente que seus disse minadores tencionam competir com os antigos processadores singlecore convencionais de fins gerais em outros mercados comerciais, restritos a nichos como os de alto desempenho (HPC) e mesmo os convencionais, tentando portar algumas aplicações para este fim como as do mercado financeiro, por exemplo. Ao que tudo indica, pelos atuais movimentos do mercado, sob os auspícios das novíssimas tecnologias de 45 nm ou menores dimensões, os fabricantes adensarão mais ainda os seus chips e poderão vir a internalizar muitas das funções de uso gráfico específico nas próprias e recentíssimas CPUs multicore densas com dezenas e, talvez, centenas de núcleos. Assim sendo, pode ser que os fabricantes de processadores convencionais e de fins gerais contra-ataquem e venham a invadir o nicho específico de mercado de jogos e computação gráfica ou da placas gráficas como um todo. Das tecnologias apresentadas, as GPUs possuem um enorme crescimento imediato mas acreditamos, devido às suas dependências, que este crescimento tenderá a se reduzir devido ao avanço do multicore e manycore e ao grau de capacidade evolutiva dos fabricantes de processadores, repetindo-se assim o mesmo que ocorreu com a inserção das funções dos co-processadores internalizadas diretamente nos processadores de gerações mais atualizadas. Parece aparentemente óbvio. Por mais que tentem e, de certa forma, talvez até blefem na tentativa de invasão do mercado dominado pelas CPUs, as GPUs não consigam o seu intento e, quem sabe, até despertem a defesa imediata dos fabricantes de CPUs e precipitem a computação heterogênea em novas pastilhas destes fabricantes, que possuem tecnologia, capital e inteligência para tal. 115 Quanto à outra tecnologia desenvolvida pela parceria STI (SONY-TOSHIBA-IBM), realmente, terá um futuro muito mais promissor e duradouro dadas suas características de fins gerais e de sua revolucionária tecnologia heterogênea e altíssimo desempenho em várias aplicações tanto no que se especializa como multimídia, computação paralela de fins gerais, processamento de imagens e tantas outras já vistas aqui. O grau de dificuldade maior da tecnologia CELL é a sofisticadíssima e necessária forma de desenvolver novas aplicações, que já devem ser feitas pensando-se em paralelo e programando-se em paralelo. Muitas ferramentas de apoio já estão sendo desenvolvidas e facilitaram sobremaneira esta facilidade de programação (programabilidade) destes novos dispositivos computacionais. A programação paralela deve ser vista como o novo paradigma de programação em oposição frontal à programação seqüencial neste momento e nos momentos futuros, não como um saber restrito apenas a uns poucos que dela podem usufruir, mas a todo e qualquer um que dela venha a necessitar de maneira acessível e a baixos custos. A computação paralela heterogênea será obrigatória a todos por razões de necessidade fundamental, pois toda a tecnologia de desenvolvimento de novos softwares e aplicações terá necessariamente que ser executada nas atuais ou futuras máquinas que serão integradas por processadores no mínimo multicores ou manycores mais ou até mesmo mais complexos, como os sistemas paralelos heterogêneos, compostos de tecnologias distintas que conviverão inicialmente talvez em sistemas também heterogêneos situados em dispositivos físicos distintos, como GPUs + CPUs, mas, posteriormente, quem sabe, poderão estar integrados na mesma pastilha física. Incentivar o ensino de programação paralela nas escolas e universidades é primordial para as gerações futuras e deve ser encarado como uma diretriz educacional, técnica e científica. Acreditamos, por suas características, que o processador CELL dominará principalmente no mercado de eletro-eletrônicos, pois está era a intenção primeira de dois dos parceiros da STI, que possuem um enorme gabarito para tal e, devido 116 às potencialidades gerais e específicas do processador CELL, aliadas ao seu alto poder de desempenho e bom grau de miniaturização com baixo consumo elétrico e pequena necessidade de refrigeração, fará com que este possa vir a ser integrado em muitos dos eletro-eletrônicos, que conhecemos e outros que passaremos a conhecer. Como, por exemplo, podemos citar os novos televisores de HDTV, TV digital de alta definição, propostos a serem lançados pela Toshiba em 2009. A computação dita de um TeraFLOPS estará disponível para os usuários através de desktops do tipo PC ou mesmo laptops ou notebooks por custos idênticos ou menores do que os praticados pelo mercado atualmente. Os ambientes de HPC poderão ser expandidos para aqueles que, por razões econômicas, como empresas, universidades, centros de pesquisa, governos deles não possam desfrutar e para aqueles outros que puderem ou que já desfrutem de ambientes próximos serão mais simples, mais baratos com desempenho de um ou mais PetaFLOPS, permitindo-se assim um maior desenvolvimento científico de todas as aplicações que delas se tornarem prescindíveis e que sejam mais nobres como a genética, biologia, física ou química ou menos nobres como as da indústria da guerra, das armas, do capital financeiro, sem nenhum juízo de valor a priori. A computação paralela heterogênea definitivamente se posicionará e será hegemônica. A tecnologia de processos de até 10 nm nos próximos dez anos no máximo conforme prevêem os cientistas, provavelmente, permitira que tecnologias distintas inicialmente convivessem num mesmo sistema heterogêneo, mas em dispositivos físicos distintos e posteriormente convirjam, graças ao alto grau de adensamento de transistores num mesmo chip, numa mesma pastilha de silício com diminutas dimensões, baixo consumo e altíssimo desempenho. Como conseqüência direta da ascensão da computação paralela heterogênea, teremos a queda da portabilidade com se apresenta nos dias atuais. Isto quer dizer que os novos programas não serão necessariamente portáveis para estas diferentes máquinas mesmo que, possivelmente, sejam escritos na pedra fundamental que os unirá, a linguagem C, por enquanto. Parece interessante e será, pois os programas terão que ser escritos de modo análogo às linguagens de baixo nível tipo 117 Assembly, mas só que formatados em linguagem de alto nível, linguagens C e Fortran, de modo que terão que passar por processos análogos aos de montagem dos programas onde os compiladores C e Fortran, funcionando equivalentemente ao montador Assembler, só compilando os programas e gerando executáveis juntamente com suas bibliotecas para cada parte heterogênea do sistema como um todo, a depender de sua participação no processo. A grande vitoriosa desta revolução advirá com a computação paralela heterogênea que se anuncia será a humanidade como um todo, pois setores como a indústria, a medicina, a biologia, a física, a química, a engenharia, a educação, a ciência, os governos, e todos os indivíduos que direta ou indiretamente dependerem desta tecnologia poderão dela tirar os seus benefícios, o que seria impensável noutros tempos. O processador CELL como o primeiro a incorporar, de uma maneira completamente revolucionária, esta tecnologia do processamento paralelo heterogêneo, tem tudo para ser um sucesso tão grande quanto foi o da tecnologia RISC. 118 REFERÊNCIAS BIBLIOGRÁFICAS 1. BYTE MAGAZINE, August, 1981, IBM PC 2. Site http://pt.wikipedia.org/wiki/IBM_PC, acessado em 01/12/2007 3. IBM System p Family, Quick Reference – May 2007, page 2. 4. http://www.ibm.com/news/pt/pt/2007/05/Chip.html , acessado em 01/12/2007. 5. H.,-Y. MC CREARY, M. A BROYLES, M. S. FLOYD et ali, Energy Scale for IBM Power6 microprocessor-based systems, IBM Journal of Research and Development, IBM Power6 Microprocessor Technology, Vol 51, N. 6, 2007. 6. HSIAN-FEN TSAO, BRIAN PORTER,SAS Forecast Server Performance and Sizing for AIX on IBM System p570 Server, IBM Corporation, August 2007. 7. Site http://www.intel.com, acessado em 30/11/2007. 8. Site http://www.ibm.com, acessado em 01/12/2007. 9. Site http://www.nvidia.com, acessado em 20/11/2007. 10. Site http://www.amd.com, acessado em 14/11/2007. 11. Site http://www.wikipedia.org, acessado em 03/11/2007. 12. Site http://www.gpgpu.org, acessado em 10/11/2007. 13. Site http://www.georgiatech.edu, acessado em 30/10/2007. 14. Site http://www.mit.edu, acessado em 16/10/2007. 15. Site http://www.stanford.edu, acessado em 23/10/2007. 16. Site http://www.lanl.gov, acessado 28/10/2007. 17. Site http://www.di.ufpe.br, Curso de Verão Java, acessado em 03/12/2007. 18. BRUNO CARDOSO, SÁVIO R. A S. ROSA, TIAGO M. FERNANDES, IC-UNICAMP, RA (023241,025144,025313). 19. Site http://www.sony.com, acessado em 25/12/2007. 119 20. Site http://www.toshiba.com, acessado em 10/12/2007. 21. http://www.blachford.info/computer/Cell/Cell4_v2.html , The Revenge of RISC, Cell Architecture Explained Version 2, Parte 4, acessado em 08/11/2007. 22. http://blogs.intel.com/brasildigital/2007/08/processadores_multicore ..., acessado em 21/11/2007. 23. http://en.wikipedia.org/wiki/Locality_of_reference , acessado em 20/12/2007. 24. http://www.intel.com/portugues/pressroom/releases/2005/0418b.htm , acessado em 01/11/2007. 25. http://www.sun.com, acessado em 29/11/2007. 26. http://www.sun.com/processors/UltraSPARC-T1/, acessado em 29/11/2007. 27. http://www.research.ibm.com/cell, acessado em 01/09/2007. 28. Zhirnov, V.V.;Cavin, R.K., III; Hutchby, J.A.; Bourianoff, G.I.; Limits to binary logic switch scaling – a gedanken model,Bourianoff, Proceedings of the IEEE, Volume 91, Issue 11, Nov 2003 Pages(s): 1934-1939. 29. S. E. Thompson, Fall 2004, University of Florida, Fall 2004, Limits for Si MOSFETs (continued) 30. http://techfreep.com/tokyo-u-touts-512-core-processor.htm , Tokio U Touts 512-Core Processor. 31. http://pt.wikipedia.org/wiki/Lei_de_Joule , acessado em 23/11/2007. 32. H. Lee, K. Mayes, D. Andrews, E. Althinoglu, J. Klug, R. Priestley, What´s wrong with CMOS and what´s our alternative?, May 7, 2004, no site http://mri63.adtech.icair.org. 33. http://en.wekipedia.org/wiki/Multicore, acessado em 20/11/2007. 34. Webinar da Intel, http://www.intel.com, Tim Mattson; James Reinders, Parallel computing has gone mainstream: Will be ready?, em 20 de março de 2007. 35. http://pt.wikipedia.org/wiki/Lei_de_Amdahl , acessado em 29/11/2007. 36. J. A Kahle et al, Introduction to the Cell multoprocessor, IBM J. Res. & Dev., Vol. 49, No. 45, July September 2005. 37. MIT Course 6.189 IAP, 2007, Prof Dr. Saman Amarasinghe and Prof Dr. Rodric Rabbah, Lectures 1-18, http://cag.csail.mit.edu/ps3/lectures.shtm , acessador em 01/10/2007. 38. Mike Houston – Stanford University, General-Purpose Computations on Graphics Hardware, Tutorial of SIGGRAPH 2007, August 2007. 120 39. http://www.cis.upenn.edu/~suvenkat/700/, acessado em 20/11/2007. 40. http://graphics.stanford.edu/courses/cs448-07-spring/ , Course of Stanford University – CS448-07-spring, Performance Analysis and Characterization – Real Time Graphics Architecture, Kurt Akeley and Pat Hanrahan. 41. Mike Houston – Stanford University, High Level Languages for GPUs, Tutorial of SIGGRAPH 2007, August 2007. 42. Justin Hensley – Stanford University, Close to The Metal, Tutorial of SIGGRAPH 2007, August 2007. 43. http://www.blachford.info/computer/Cell/Cell1_v2.html , Inside the Cell, Cell Architecture Explained Version 2, Parte 4, acessado em 08/11/2007. 44. http://developer.apple.com/hardware/ve/summary.html , Executive Summary. Apple (2004-09-27) 45. http://www.blachford.info/computer/Cell/Cell3_v2.html , Programming the Cell, Cell Architecture Explained Version 2, Parte 4, acessado em 08/11/2007. 46. http://www.microsoft.com, acessado em 10/11/2007. 47. http://www.nintendo.com, acessado em 10/11/2007. 48. Mark Harris – Nvidea, Introduction to CUDA, Tutorial of SIGGRAPH 2007, August 2007. 49. J. D. Owens et al, “A Survey of General-Purpose Computation on Graphics Hardware.” In Eurographics 2005, State of the Art Reports, August 2005, pp. 21-51. 50. Dispositivo de busca Google, http://www.google.com, acessado em 04/12/2007. 51. http://www.es.jamstec.go.jp/index.en.html , acessado em 04/12/2007. 52. http://www.top500.org, acessado em 04/12/2007. 53. http://www.llnl.com, site acessado em 21/11/2007. do Lawrence Livermore National Laboratory, 54. http://www.research.ibm.com/bluegene, Projeto IBM BlueGene/P, acessador em 03/09/2007. 55. http://www.lanl.gov, 30/11/2007. Los Alamos National Laboratory, acessado em 121 56. http://www.lanl.gov/orgs/hpc/roadrunner/index.shtml , site RoadRunner do Los Alamos Lab, acessado em 30/11/2007. do Projeto 57. A. FAZZIO, Alguns Aspectos da Nanotecnologia Molecular, Instituto de Física, Universidade de São Paulo, São Paulo, SP. 58. http://grape-dr.adm.s.u-tokyo.ac.jp/system-en.html , acessado em 16/12/2007. 59. http://grape-dr.adm.s.u-tokyo.ac.jp/index-en.html , acessador em 16/12/2007. 60. http://www.hpcwire.com/hpc/1154214.html, acessado em 16/12/2007. 61. http://pt.wikipedia.org/wiki/Wafer_Eletrônica , acessado em 10/12/2007. 62. http://pt.wikipedia.org/wiki/Fóton , acessado em 27/12/2007. 63. http://pt.wikipedia.org/wiki/Efeito_Compton, acessado em 27/12/2007. 64. http://pt.wikipedia.org/wiki/Princípio_da_incerteza_de_Heisenberg , acessado em 10/12/2007. 65. http://www.sindicato.com.br/contren/principi.htm , acessado em 10/12/2007. 66. http://www.mundoquimico.hpg.com.br, acessado em 10/12/2007. 67. http://ciencia.hsw.uol.com.br/quantum-suicidio1.htm ,acessado em 10/12/2007. 68. http://pt.wikipedia.org/wiki/Quanta , acessado em 27/12/2007. 122 ANEXOS 123 ANEXO A - LEI DE MOORE Um dos grandes mitos da indústria de semicondutores e um dos fundadores da Intel, Gordon Moore (Figura 34), publicou um artigo na revista Eletronics Magazine, datado de 19 de abril de 1965 onde afirmava, naquela data, quinze anos antes dos computadores pessoas, que com o ritmo de evolução tecnológica, seria possível duplicar o número de transistores numa área de silício a cada ano. A verificação de Moore foi observar que a dimensão linear do transistor se reduzia por um fa tor 1/√2 em cada nova tecnologia de fabricação. Conseqüentemente, a área diminuiria com um fator de 2 e, portanto, 2 vezes mais transistores seriam colocados em um chip. Devido ao aumento da complexidade na manufatura de chips, Moore reajustou esse período para dois anos em novo artigo publicado em 1975. Esta observação ficou popularmente conhecida como Lei de Moore e, atualmente o período foi atualizado para 18 meses. A Lei de Moore implica em interessantes corolários pois, com o aumento de transistores é possível produzir processadores menores, mais velozes e até mais baratos, devido ao aumento de produtividade dos wafers de silício. Por conseqüência, essa idéia levaria a uma dramática redução nos custos de fabricação. Isso foge ao senso comum de que um produto mais novo e de melhor desempenho costuma ser mais caro para ser produzido e não mais barato. 124 Figura 34 Fonte: Tributo a Gordon Moore Site www.forumpcs.com.br, acessado em 30/11/07 Gráfico 1 Evolução do número de transistores nos microchips Intel no tempo Fonte: Wikipedia, www.wikipedia.com, acessado em 30/11/07 125 No Gráfico 1, podemos observar a constatação da Lei de Moore, notando que é válida ajustada para os processadores Intel a cerca de 40 anos, se considerado o período de 18 meses para que se tenha dobrado o número de transistores no chip. As previsões mais otimistas dão conta que a Lei de Moore será válida, talvez, até o ano de 2020. Ocorre que, como ainda se pode observar do Gráfico 1, uma das formas de se aumentar à capacidade de processamento é aumentando-se o número de transistores dos microprocessadores, além de se aumentar a sua freqüência de operação, naturalmente. Mas, o que acontece é que quanto maior for o núme ro de transistores, maior a energia dissipada sob a forma de calor. Do ponto de vista prático, como é sabido por todos que lidam na vida prática com processadores, quanto maior a capacidade de processamento de uma CPU, mais ela esquenta e esquenta tanto que, se providências radicais não forem tomadas para reduzir a produção de calor e também dissipá-lo mais eficientemente para o meio ambiente ou a atmosfera, o circuito simplesmente derrete. A explicação simples, advém da física elementar: a potência consumida em um circuito é proporcional à resistência à passagem da corrente elétrica e diretamente proporcional ao quadrado da tensão aplicada (ou seja, P = V 2. R). Então, dois objetivos se apresentam para os fabricantes de processadores: diminuir a tensão de alimentação (ou “voltagem”) e reduzir a resistência para aumentar a capacidade de processamento dos processadores sem que estes derretam. A redução de tensão é tecnicamente impraticável por dificuldades de or dem tecnológica, apesar de muitos fabricantes também trabalharem com famílias de processadores de baixa voltagem (low voltage). Então, o único caminho tecnológico a ser seguido é o da diminuição da resistência. Sabemos da eletrônica básica e da física de semicondutores, que um transistor é constituído de uma porção de silício (Si) à qual foram agregadas algu- 126 mas impurezas, especialmente o elemento químico germânio (Ge). Então, para se fabricar um transistor é preciso produzir uma fina camada ou placa de cristal de silício puro e acrescentar pequenas porções do elemento germânio. A este processo físico-químico denominamos de dopagem do silício. E, como um circuito integrado nada mais é do que uma combinação de um imenso número de transistores que, para fabricá-los usa-se uma única camada de silício na qual se depositam microscópicas porções de germânio em determinados pontos numa placa que recebe o nome de wafer. Depois, é só fazer as ligações elétricas e envasar o chip no encapsulamento. Esta é uma descrição didática e excessivamente simplificada. A tecnologia de fabricação dos wafers também é muito relevante. Apenas para efeito de esclarecimento, atualmente a dimensão dos wafers fabricados é da ordem de 300 mm mas já existe tecnologia de fabricação para wafers de 450 mm em estudo. Objetivamente, dos argumentos acima, podemos concluir: quanto mais fina a camada de silício usada como base do circuito, menor a resistência que ela apresentará à passagem da corrente elétrica e, conseqüentemente, menor o calor dissipado. Portanto, como o número de transistores e a freqüência de operação dos modernos microprocessadores continuam crescendo, se aumentado a densidade de transistores por unidade de área, em não se podendo baixar mais a tensão de ali mentação, só restou aos fabricantes continuar reduzindo a espessura da camada de silício. As espessuras das camadas de silício dos computadores pessoais dos anos 80 eram da ordem de 1000 nm (um nanômetro é uma medida de comprimento igual a um bilionésimo de metro, ou seja, 10 -9 m) e hoje, são da ordem de 65 nm (multicores Intel ou AMD, por exemplo), com perfectivas de 45 nm (novos multicore Intel ou AMD, ou processadores IBM CELL, a serem lançados nos anos de 20092010) [???]. Para concluir, verificamos que estamos nos aproximando de fenômenos físicos que ocorrem com objetos de dimensões muito, muito pequenas, diminutas, 127 da ordem das dimensões de poucos átomos alinhados, poucos angstons (um angstron é uma medida de comprimento da escala atômica, isto é, 1 A = 10 -10 m) e está é uma abordagem que só pode ser conduzida além de uma Física Clássica, Newtoniana, e apenas por uma Física Moderna, Física Quântica. Estes fenômenos que passam a ocorrer e limitar o paradigma vigente de tecnologia CMOS têm suas restrições definidas e delimitadas pela Física Quântica e, possivelmente, como alegam os cientistas que o estudam, poderá ser quebrado com a instauração de um novo paradigma (ou tabú) com o imprescindível auxílio da própria Física Quântica. Isto é, as causas dos problemas decorrentes dos processos de fabricação da tecnologia CMOS induzirão e permitiram tirar proveitos de outros fenômenos físicos descritos e estudados pela Mecânica Quântica, como movimento de spins de elétrons, etc. Para, possivelmente, obtermos novos paradigmas tecnológicos que permitam o avanço e o progresso da Ciência. Em particular, em suas aplicações aos novos computadores quânticos que se espera passem a existir daqui a uns 20 ou 30 anos, com prazos otimistas. 128 ANEXO B - PRINCÍPIO DA INCERTEZA DE HEISENBERG O princípio da incerteza de Heisenberg consiste num enunciado da mecânica quântica, formulado inicialmente em 1927 pelo físico alemão Werner Heisenberg, impondo restrições à precisão com que se podem efetuar medidas simultâneas de uma classe de pares de observáveis [64] . É possível medir com precisão, a posição de corpos grandes, como, por exemplo, um automóvel. Por outro lado, Há que se considerar que o elétron é tão pequeno, que se tentasse calcular sua posição e velocidade, os próprios instrumentos de medida iriam influenciar as determinações [65] . Isso porque, para se estudar uma partícula, é preciso interagir de alguma maneira com esta partícula. Nenhum instrumento pode “sentir” ou “ver” um elétron sem influenciar intensamente o seu movimento. Se, por exemplo, construíssemos um microscópio tão poderoso, capaz de localizar um elétron, teríamos de usar uma radiação com comprimento de onda muito menor que o da luz. (Para que um objeto diminuto possa ser visto num micros cópio, o comprimento de onda da luz utilizado deve ser menor que o diâmetro do objeto.) Esse super microscópio imaginário deveria, para isso, usar raios X ou raios γ . Mas a energia destas radiações é tão grande que modificaria a velocidade e, conseqüentemente, o momento do elétron, numa quantidade grande e incerta. O princípio da incerteza pode ser assim interpretado: quanto mais de perto tentarmos olhar uma partícula diminuta, tanto mais difusa se torna a visão da mesma [66] . Um dos maiores problemas dos experimentos quânticos é a aparentemente inevitável tendência humana de influenciar o estado e a velocidade de pequenas partículas. Isto acontece até mesmo quando somente observamos as partículas, frustrando os físicos quânticos. Para se combater isso, os físicos criaram máquinas 129 enormes e complexas, como os aceleradores de partículas, que removem qualquer influência humana do processo de acelerar a energia de movimento de uma partícula [67]. Ainda assim, os resultados variados que os físicos obtêm, quando examinam a mesma partícula, indicam que não conseguimos evitar afetar o comportamento dos quanta (plural de quantum, em latim ) – ou partículas quânticas. Até mesmo [68] a luz que os físicos utilizam para ver melhor os objetos que eles estão observando pode influenciar o comportamento dos quanta. Os fótons, partículas elementares mediadoras da força eletromagnética, por exemplo, mesmo sendo a menor medida de luz, que não têm massa nem carga elétrica, ainda conseguem fazer uma partícula se mexer, alterando sua velocidade e aceleração. Este é o chamado Princípio da Incerteza de Heisenberg. Werner Heisenberg descobriu que as nossas observações têm efeito sobre o comportamento dos quanta. O Princípio da Incerteza de Heisenberg parece difícil de entender – até mesmo o nome intimida. Mas na verdade é fácil de compreender, e quando se consegue, entende-se o principal fundamento da mecânica quântica. É conveniente uma analogia para o entendimento do Princípio de Heisenberg. Imaginemos que somos cegos e com o tempo desenvolvemos uma percepção técnica para dizer a que distância um objeto está, jogando uma bolinha de borracha nele. Se a bolinha for jogada numa banqueta próxima, a bolinha volta rápido, e sabe remos o quão perto. Se a bolinha for jogada em alguma coisa do outro lado da rua, vai levar mais tempo para ela voltar, e saberemos que o objeto está longe. O problema fundamental é quando a bolinha é jogada – principalmente uma bolinha de borracha – em algum objeto, a bolinha vai jogar este objeto do outro lado da sala e pode até mesmo ter impulso para bater de volta. Pode-se dizer onde o objeto estava, mas não onde está agora. Tem mais: pode-se calcular a velocidade do objeto depois que este foi atingido pela bolinha, mas não se tem idéia de qual era a sua velocidade antes de a bolinha bater. Este é o problema revelado pelo Princípio da In certeza de Heisenberg. Para saber a velocidade de um quark (uma das partículas quânticas) devemos medi-la, e para medi-la, somo forçados a afetá-la. A mesma coisa acontece para a observação da posição de um objeto. A incerteza sobre a posi- 130 ção e velocidade de um objeto torna difícil para o físico descobrir muito sobre ele. É claro que os físicos não jogam bolinhas de borracha nos quanta para medi-los, mas mesmo a mais sutil interferência pode fazer com que estas partículas incrivelmente pequenas se comportem de maneira diferente. È por isso que os físicos quânticos são forçados a criar experimentos mentais baseados nas observações dos experimentos reais para provar ou contestar interpretações – explicações para a teoria quântica. Formalmente, pode-se exprimir o Princípio da Incerteza nos seguintes termos: O produto da incerteza associada ao valor de uma coordenada xi e a incerteza associada ao seu correspondente momento linear p i não pode ser inferior, em grandeza, à constante de Planck normalizada. Em termos matemáticos, exprime-se assim: ∆ xi . ∆ pi ≥ 2 onde é a constante de Planck (h) dividida por 2π . A explicação disso é de fácil entendimento, e fala em favor da intuição, embora o raciocínio clássico e os aspectos formais da análise matemática tenham levado os cientistas a pensarem diferentemente por muito tempo. Quando se quer encontrar a posição de um objeto qualquer, como elétron, por exemplo, é necessário fazê-lo interagir com algum instrumento de medida, direta ou indiretamente. Por exemplo, faz-se incidir sobre ele algum tipo de radiação. Tanto faz que se considere a radiação do modo clássico – constituída por ondas ele tromagnéticas – ou do modo quântico – constituído por fótons. Se quer determinar a posição do elétron, é necessário que a radiação tenha comprimento de onda da ordem da incerteza com que se quer determinar a posição. 131 Neste caso, quanto menor for o comprimento de onda (maior freqüência) maior a precisão. Contudo, maior será a energia cedida pela radiação (onda ou fóton) em virtude da relação de planck entre a energia e a freqüência da radiação: E = h.ν e o elétron sofrerá um recuo tanto maior quanto maior for essa energia, em virtude do efeito Compton (Efeito Compton ou o Espalhamento de Compton, é a diminuição de energia -- aumento de comprimento de onda -- de um fóton de raio-X ou de raio gama, quando ele interage com a matéria ). Como conseqüência, a velocidade sofrerá uma [62] alteração não de todo previsível, ao contrário do que afirma a mecânica clássica. Argumentos análogos poderiam ser usados para se demonstrar que ao se medir a velocidade com precisão, alterar-se-ia a posição de modo não totalmente previsível. Resumidamente, pode-se dizer que tudo se passa de forma que quanto mais precisamente se medir uma grandeza, forçosamente mais será imprecisa a medida da grandeza correspondente, chamada de canonicamente conjugada. Natureza da medida em mecânica quântica Como se pode depreender da argumentação anterior, a natureza de uma medida sofre sérias reformulações no contexto da mecânica quântica. De fato, na mecânica quântica uma propriedade leva o nome de observável, pois não existem propriedades inobserváveis nesse contexto. Para a determinação de um observável, é necessário que se tenha a preparação conveniente do aparato de medida, a fim de que se possa obter uma coleção de valores de ensemble de entes do sistema. Se 132 não puder montar, ao menos teoricamente (em um Gedankenexperiment) uma preparação que possa medir tal grandeza (observável), então é impossível determiná-la naquelas condições do experimento. Uma comparação tornará mais clara esta noção. No experimento de difração da dupla fenda, um feixe de elétrons atravessando uma fenda atinge mais adiante duas outras fendas paralelas traçadas numa parede opaca. Do lado oposto da parede opaca, a luz, atravessando as fendas simultaneamente, atinge o anteparo. Se puser sobre este um filme fotográfico, obtém-se pela revelação do filme um padrão de interferência de zonas claras e escuras. Este resultado indica uma natureza ondulatória dos elétrons, resultado esse que motivou o desenvolvimento da mecânica quântica. Entretanto, pode-se objetar e afirmar-se que a natureza dos elétrons seja corpuscular, ou seja, composta de fótons. Pode-se então perguntar por qual fenda o elétron atravessou para alcançar o anteparo. Para determinar isso, pode-se pôr,junto a cada fenda, uma pequena fonte luminosa que, ao menos em princípio.pode indicar a passagem dos elétrons por tal ou qual fenda. Entretanto, ao fazê-lo, o resultado do experimento é radicalmente mudado. A figura de interferência, antes presente, agora dá lugar a uma distribuição gaussiana bimodal de somente duas zonas claras em meio a uma zona escura, e cujos máximos se situam em frente às fendas. Isto acontece porque as naturezas ondulatória e corpuscular do elétron não podem ser simultaneamente determinadas. A tentativa de determinar uma inviabiliza a determinação da outra. Essa constatação da dupla natureza da matéria (e da luz) leva o nome de princípio da complementaridade. Essa analogia serve para mostrar como o mundo micro físico tem aspectos que diferem significativamente do que indica o senso comum. Para se entender perfeitamente o alcance e o real significado do princípio da incerteza, é necessário que se distingam três tipos reconhecidos de propriedades dinâmicas em mecânica quântica: 133 • Propriedades compatíveis: são aquelas para as quais a medida si- multânea e arbitráriamente precisam de seus valores não sofre nenhum tipo de restrição básica. Exemplo: a medição simultânea das coordenadas x, y, z de uma partícula. A medição simultânea dos momentos px, py, pz de uma partícula. • Propriedades mutuamente excludentes:são aquelas as quais a medida simultânea é simplesmente impossível. Exemplo: se um elétron está numa posição xi, não pode estar simultaneamente na posição diferente xj. • Propriedades incompatíveis: são aquelas correspondentes a grandezas canonicamente conjugadas, ou seja, aquelas cujas medidas não podem ser simultaneamente medidas com precisão arbitrária. Em outras palavras, são grandezas cujas medidas simultâneas não podem ser levadas a cabo em um conjunto de subsistemas identicamente preparados (ensemble) para este fim, porque tal preparo não pode ser realizado. Exemplo: as coordenadas x, y, z e seus correspondentes momentos px, py, pz, respectivamente. As coordenadas angulares θ i e os seus correspondentes momentos angulares J i. Observáveis e Operadores No formalismo matemático da mecânica quântica, os observáveis são representados por operadores matemáticos sobre o espaço de Hilbert (matemático alemão). Esses operadores podem ser construídos a partir de seus equivalentes clássicos. No formalismo de Heisenberg, as relações de incerteza podem ser dadas na forma de um operador comutador, que opera sobre dois outros operadores quaisquer: [ A, B ] ≡ AB − BA 134 onde A e B são operadores quaisquer. No caso das relações de incerteza: [ X k , Bl ] = iδ kl Ι Dirac, físico e matemático francês, notou a semelhança formal entre o comutador e os parênteses de Poisson, outro matemático e físico francês. Sabedor da equivalência usado pelo físico austríaco Schrödinger, quando este postulou a forma da equação de onda. Dirac, postulou as seguintes equivalências, que valem como receita para se acharem os operadores quânticos correspondentes a grandezas clássicas: coordenada xk → operador Xk momento pl → operador {xk , pl } → i ∂ ⋅ ∂ xk 1 ⋅ [ X k , Pl ] i A descrição dos objetos microscópicos tem conseqüências teóricas importantes, como o princípio da incerteza de Heisenberg. O fato de os objetos microscópicos, em muitas situações, terem uma localização no espaço mesmo que aproximada, implica que não podem ser descritos por uma onda com um só comprimento de onda (onda plana), pois esta ocuparia todo o espaço. É necessária uma superposi ção de comprimentos de ondas diferentes para se obter um “pacote” de ondas mais bem localizado e que represente o objeto microscópico.