nome do autor

Propaganda
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.
Download