Buscar

Programao Paralela em Arquiteturas MultiCore

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 94 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 94 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 94 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

PDF gerado usando o pacote de ferramentas em código aberto mwlib. Veja http://code.pediapress.com/ para mais informações.
PDF generated at: Thu, 07 Aug 2014 20:40:02 UTC
Programação Paralela em
Arquiteturas Multi-Core
Conteúdo
Páginas
Capa 1
Arquitetura Cell Broadband Engine 1
Arquitetura Intel Core e Core 2 7
Arquitetura Sun Niagara e Niagara II 16
Programação em Pthreads 24
Programação em OpenMP 41
Compiladores paralelizadores 50
Ambientes de programação e bibliotecas 66
Aplicações Internet 75
Referências
Fontes e Editores da Página 90
Fontes, Licenças e Editores da Imagem 91
Licenças das páginas
Licença 92
Capa 1
Capa
Programação Paralela em Arquiteturas Multi-Core
Índice >>
Arquitetura Cell Broadband Engine
Este capítulo está estruturado da seguinte forma: primeiramente uma visão geral da arquitetura, para situar o leitor,
seguido de um detalhamento da arquitetura e de seus componentes (PPE, SPE, EIB e FlexIO). Após segue uma seção
sobre desenvolvimento para Cell, mostrando o modelo de programação e as ferramentas existentes. Finalmente
segue uma listagem de aplicações e implementações existentes e uma discussão sobre o futuro da arquitetura. Ao
final está uma listagem das referências.
Visão geral
A arquitetura Cell foi criada em conjunto pela Sony, Toshiba e IBM. O Cell combina um processador PowerPC com
coprocessadores com recursos multimídia e processamento vetorial.
O Cell é conhecido por ser o processador do PlayStation 3, uma entre as muitas aplicações desse processador.
Ele possui grosso modo quatro partes. Estrutura externa de entrada e saída (FlexIO), o processador principal (Power
Processing Element - PPE), 8 coprocessadores (Synergistic Processing Elements - SPE) e um barramento circular de
dados de alta banda que une as 3 partes (Element Interconnect Bus - EIB).
Entre as principais características estão:
•• 64 bits.
•• Não permite execução de instruções out-of-order.
•• É capaz de despachar até duas instruções por ciclo.
•• Composto por uma cache L2 de 512KiB, um cache L1 two-way de 32KiB de instruções e um cache four-way
set-associative de dados.
Arquitetura Cell Broadband Engine 2
Arquitetura
O chip do processador Cell pode ser organizado em várias configurações diferentes. A mais comum é a utilização de
uma unidade PPE, o Power Processor Element, e múltiplas SPEs, os Synergistic Processing Elements. A PPE e as
SPEs são ligadas por um barramento interno de alta velocidade, o EIB (Element Interconnect Bus). Ficando dessa
forma:
•• 1 Power Processor Element (PPE)
•• 8 Synergistic Processor Elements (SPEs)
•• Element Interconnect Bus (EIB)
•• Direct Memory Access Controller (DMAC)
•• 2 Rambus XDR memory controllers
•• Interface Rambus FlexIO (Input / Output)
PPE
O PPE é uma unidade baseada na arquitetura POWER, que é a base das linhas POWER e PowerPc. O papel do PPE
é servir como um controlador das várias SPEs, que serão responsáveis pela execução da maior parte da carga de
trabalho. Como o PPE é muito similar a outros processadores PowerPc de 64 bits, será possível utilizá-lo com
sistemas operacionais convencionais, já disponíveis para esta arquitetura.
SPE
É um processador totalmente autônomo, capaz de suportar unicamente instruções SIMD. Tem um banco de
registradores único. Baseado em arquitetura RISC, com registradores de 128 bits, capazes de guardar qualquer tipo
de dados.
FlexIO
As sete vias de transmissão e cinco de recebimento Rambus FlexIO tem a largura de um byte. Essas vias podem ser
configuradas como duas interfaces lógicas. Com as vias Rambus FlexIO, operando a 5Ghz, as interfaces de I/O
(Input/Output) atingem um pico de taxa de transferência de 30GB/s de saída e 25GB/s de entrada. Uma configuração
típica pode ter uma interface de I/O configurada com taxas de transferência de 30GB/s para saída e 20GB/s para
entrada, e outra interface com 5GB/s para saída e 5GB/s para entrada.
Dados e comandos na interface de I/O são transmitidos como pacotes. Além do comando, resposta e dado, cada
pacote pode carregar informação como tag de dado, tamanho do dado, identificador de comando e informações para
controle de fluxo, assim como outras informações. Por causa destes overheads e tempos de chegada de dados e
comandos potencialmente não ótimos, a taxa de transferência efetiva nas duas interfaces pode ser menor, variando
entre 50% a 80% da taxa bruta. Claro que outros fatores como tráfego de dados no EIB, alocação de recursos,
velocidade dos dispositivos de I/O, características de ordenação do tráfego de dados de I/O e interrupções podem,
potencialmente, reduzir a taxa de transferência mais ainda.
Arquitetura Cell Broadband Engine 3
Desenvolvimento
Algumas das principais características do desenvolvimento para Cell:
•• Desenvolvimento em cima do Linux para PowerPC.
•• Programação para as SPEs é baseada em C, com suporte parcial a C++ (Fortran sendo estudada).
•• É responsabilidade do programador fazer o trabalho de consistência entre memória principal e LocalStore nas
SPEs.
A pesquisa de ferramentas e frameworks para Cell busca prover uma camada de abstração acima do hardware, que
permita que as aplicações sejam escaláveis na presença de outros processadores. Este processo demanda novas
ferramentas, já que o paradigma de programação para o Cell envolve programas para cada um dos SPEs, que contém
todas as suas instruções e seus dados. Este paradigma é diferente do utilizado por linguagens orientadas a objeto,
como Java.
Essas e outras peculiaridades fazem a programação em Cell ser razoavelmente diferente e mais complicada, o que
limita muito o número de desenvolvedores preparados.
Modelo de programação
Como o modelo de programação do Cell é muito complexo e amplo, seguem alguns documentos que tratam dele
com mais detalhes:
• A página 4 desse artigo fala sobre a anatomia de uma aplicação Cell. [1]
• Arquivo explicando a arquitetura cell, e o modelo de programação.[2]
• Descreve modelos de programação, técnicas e indica bibliotecas para facilitarem o desenvolvimento de
aplicações.[3]
• Tutorial bastante abrangente sobre programação no Cell.[4]
Ferramentas: SDKs, Compiladores e Bibliotecas
• Cell SDK. [5]
• libspe2 - Biblioteca que simplifica a programação, abstraindo o modelo e permitindo programar de forma
parecida com outras plataformas. Explicação passo a passo de como cross-compilar usando Linux [6].
•• GDB - Ferramenta de depuração.
• Existem projetos chamados Single Source Compilers que seriam capazes de gerar código de máquina tanto para o
PPE quanto para os SPEs. [7]
• Octopiler - Projeto da IBM para facilitar a programação separando automaticamente um programa entre os várias
cores. [8]
Aplicações e implementações
As principais aplicações do Cell são para multimídia e aplicações científicas.
Atualmente ele está sendo implementado em:
•• PlayStation 3, um console de vídeo game produzido pela SONY.
• Computação científica, através da integração de vários PlayStation 3 em cluster
São previstas as seguintes implementações:
•• Cinema em casa, a Toshiba anunciou que está considerando produzir televisões de alta definição usando o Cell. A
empresa já apresentou um sistema que pode decodificar até 48 fluxos de vídeo MPEG-2 em telas de 1920x1080.
• Supercomputadores, o novo supercomputador sendo planejado pela IBM, o IBM Roadrunner, será um híbrido de 
um CISC de propósito geral e processadores Cell. Foi anunciado que provavelmente este será o primeiro 
supercomputador capaz de trabalhar na escala dos petaflops. Ele usará uma versão mais atualizada do Cell, feita
Arquitetura Cell Broadband Engine 4
com tecnologia de 65nm e SPUs (Synergistic Processing Unit) capazes de executar cálculos de dupla precisão em
registradores de 128 bits, alcançando 100 gigaflops de precisão dupla.
Futuro
A IBM já anunciou que pretende diminuir o tamanho dos transistores do Cell abaixode 90 nm (tecnologia atual)
para poder aumentar o clock sem gerar problemas térmicos e diminuir o consumo de energia.
Já estão sendo criados e produzidos os primeiros Cells de 65 nm, que reduzem o tamanho do chip de 230 mm² para
120 mm², diminuindo muito os gastos com a produção e permitindo um clock de 6 GHz a 1.3 V, permitindo uma
performance de 384 GLFOPS, bem maior que os 204.8 GFLOPS do Cell de 90 nm.
Embora ainda não tenha sido mostrada nenhuma tecnologia para diminuir o tamanho além dos 65 nm, é possível que
isso ocorra caso o Cell tenha muito sucesso, pois a aliança Sony, Toshiba e IBM anunciou que pretende chegar aos
45 nm e aos 32 nm (apesar de não ter mencionado que será com o Cell).
Referências
• Pequena descrição sobre a arquitetura. Uma interessante introdução ao tema [9].
• Texto explicativo, com todos os detalhes da arquitetura [10].
• Apresenta por alto o funcionamento, o sistema de memória e cache e os componentes do processador [11].
• Explica bem o funcionamento dos processadores, o paralelismo e o sistema de memória [12].
• Principais características e funcionalidades do processador Cell [13]. São apresentados detalhes do funcionamento
de cada uma das estruturas que compõe a arquitetura Cell, e sua organização é comparada com a de outros
processadores, dentre eles o Emotion Engine, core do console PlayStation 2.
• Utilização dos processadores Cell no PlayStation 3 [14].
• Explica sobre a arquitetura do Cell e também apresenta uma discussão sobre o seu desempenho [15].
• Página com vários artigos sobre como desenvolver aplicações de alto desempenho para a arquitetura Cell [16].
• A página da Wikipédia sobre o Cell explica por alto as características da arquitetura e dá uma visão geral do
processador [17].
• Explica o potencial do Cell para computação científica [18].
• Artigo de alunos da UNICAMP mostrando os benefícios que o processador Cell apresenta em relação ao
paralelismo [19].
• Slides da IBM que justificam a necessidade de se usar Cell [20].
• Artigo explicando a arquitetura Cell, de forma relativamente simples, fornecendo alguns dados técnicos [21].
• Artigo explicando a arquitetura Cell, de forma relativamente simples, fornecendo alguns dados técnicos [22].
• Artigo explicando a arquitetura Cell, de forma relativamente simples, fornecendo alguns dados técnicos [23].
• Um site da Sony explicando minuciosamente a arquitetura [24]. O domínio é japonês, mas está em inglês com
PDF muito bons (e grandes). É bem detalhista, mas é bom para entender direito como é a arquitetura.
• Uma visão geral da arquitetura exemplificando eficiência, aplicações, etc [25].
• Um pouco mais abrangente relatando a estrutura do processador, fluxo de dados, programação para o Cell, entre
outros [26].
• Notícia falando sobre o projeto de integrar o Cell Broadband Engine num poderoso mainframe da IBM para lidar
com a nova geração de aplicações do mundo virtual, como a Internet 3D [27].
• Notícia falando sobre o uso do Cell Broadband Engine para criar imagens médicas [28].
• Artigo da Wikipédia falando sobre as duas versões do Cell já existentes hoje e das próximas versões a serem
lançadas [29] (de acordo com o Roadmap da Intel).
• Artigo falando sobre estratégias que podem ser utilizadas por compiladores para aumentar a eficiência de 
utilização do Cell. Como evitar cenários onde a arquitetura está sujeita a grandes penalidades, o que ocorre, por 
exemplo, quando o compilador não consegue dar boas "dicas" de branch prediction em aplicações que possuem
Arquitetura Cell Broadband Engine 5
muitos comandos condicionais. [http://dcon.com.br/jd.comment/intro-cell-be-pt_BR.pdf PDF que apresenta uma
visão clara da arquitetura do processador Cell, descrevendo seu funcionamento e mostrando suas vantagens [30].
• Uma explicação do processador através de sua utilização nos jogos [31].
• Visão geral das características de desempenho do Cell BE [15]. São apresentadas informações referentes ao
pipeline do processador e ao relacionamento com memórias cache. Além disso, são mostrados exemplos de
aplicações e suas características de desempenho. Por exemplo, são mostradas comparações de resultados de
desempenho envolvendo precisão dupla, decodificação de vídeo MPEG-2 e multiplicação de matrizes.
• Artigo que apresenta, de forma bastante resumida, as principais características e funcionalidades do processador
Cell BE [13]. Sua organização é comparada, inclusive, ao Emotion Engine, core do console PlayStation 2. Esse
conteúdo pode ser bastante importante na auxílio à determinação de tópicos a serem explorados na discussão
global sobre o processador em questão.
• Artigo bastante interessante que dá detalhes sobre a arquitetura e fala um pouco sobre o futuro do Cell [32].
• Apresentação sobre a arquitetura Cell [33].
• Apresentação da IBM sobre Cell Broadband Engine [34].
• Integração entre Cell Broadband Engine e Mainframe [27].
• Introdução à arquitetura Cell Broadband Engine [35]. Dando enfoque à aplicações de processamento de sinal, pois
é notado pelos autores que esta arquitetura se destaca nesta área. Os autores também explicam os atributos
fundamentais da arquitetura que determinam estas vantagens de performance do Cell.
• Manual da arquitetura Cell Broadband Engine [36]. São descritos, com minúcia, os detalhes técnicos da arquitetura
e de todos seus componentes.
• Funcionamento, sistema de memória e cache e os componentes do processador [11].
• Explica bem o funcionamento dos processadores, o paralelismo e o sistema de memória [12].
• Ambiente de código aberto para Sistemas de software em Cell Broadband Engine [1]
• Ambiente de código aberto para Sistemas de software em Cell Broadband Engine [37]
• Apresentação da IBM sobre o projeto da eficiência do processador Cell [38].
• Artigo que apresenta diversos modelos de programação para o Cell Broadband Engine (CBE) Processor, dos mais
simples aos mais avançados [39].
• Slides explicando detalhadamente a arquitetura do Cell, dando ênfase ao quesito performance [40].
• Uso da arquitetura Cell em um problema real com contém uma comparação de performance com o Core 2 Duo
[41]. Simulação de fluxo de sangue no cérebro humano.
• Editorial sobre as limitações do Cell para uso em aplicações científicas [42].
• Descreve a criação de um compilador de Fortran para o Cell [43].
• Exemplo de aplicação apresenta conclusões interessantes [44].
• Excelente artigo sobre programação no Cell [4].
Referências
[1] http:/ / www. research. ibm. com/ people/ m/ mikeg/ papers/ 2007_ieeecomputer. pdf
[2] http:/ / cell. scei. co. jp/ pdf/ CBE_Architecture_v101. pdf
[3] http:/ / www. netlib. org/ utk/ people/ JackDongarra/ PAPERS/ scop3. pdf
[4] http:/ / www. pad. lsi. usp. br/ joomla/ index. php?option=com_docman& task=doc_download& gid=79
[5] http:/ / www. alphaworks. ibm. com/ tech/ cellsw
[6] http:/ / www. cellperformance. com/ articles/ 2006/ 11/ crosscompiling_for_ps3_linux. html
[7] http:/ / mnagano. wordpress. com/ 2007/ 07/ 12/ relembrando-peter-hofstee-o-pai-do-cell/ #more-229
[8] http:/ / news. zdnet. com/ 2100-9593_22-6042132. html
[9] http:/ / domino. watson. ibm. com/ comm/ research. nsf/ pages/ r. arch. innovation. html
[10] http:/ / www. blachford. info/ computer/ Cell/ Cell0_v2. html
[11] http:/ / dcon. com. br/ jd. comment/ intro-cell-be-pt_BR. pdf
[12] http:/ / domino. research. ibm. com/ library/ cyberdig. nsf/ papers/ 1B2480A9DBF5B9538525723D0051A8C1/ $File/ rc24128. pdf
[13] http:/ / www. ic. unicamp. br/ ~ducatte/ mo401/ 1s2006/ T2/ 011104-T. pdf
[14] http:/ / www2. dcc. ufmg. br/ projetos/ cggt/ lib/ exe/ fetch. php?w=& h=& cache=cache& media=playstation3. pdf
Arquitetura Cell Broadband Engine 6
[15] http:/ / www. ibm. com/ developerworks/ power/ library/ pa-cellperf
[16] http:/ / www-128. ibm. com/ developerworks/views/ power/ libraryview. jsp?search_by=programming+ high-performance+ applications+
on+ the+ Cell+ BE+ processor
[17] http:/ / en. wikipedia. org/ wiki/ Cell_%28microprocessor%29
[18] http:/ / www. lbl. gov/ Science-Articles/ Archive/ sabl/ 2006/ Jul/ CellProcessorPotential. pdf
[19] http:/ / www. ic. unicamp. br/ ~rodolfo/ Cursos/ mc722/ 2s2006/ Trabalho/ g02-texto. pdf
[20] http:/ / beatys1. mscd. edu/ compfront/ 2006/ cf06-gschwind. pdf
[21] http:/ / arstechnica. com/ articles/ paedia/ cpu/ cell-1. ars
[22] http:/ / arstechnica. com/ articles/ paedia/ cpu/ cell-1. ars/ 2
[23] http:/ / arstechnica. com/ articles/ paedia/ cpu/ cell-2. ars
[24] http:/ / cell. scei. co. jp/ e_download. html
[25] http:/ / www. kaboodle. com/ reviews/ the-cell-architecture
[26] http:/ / moss. csc. ncsu. edu/ ~mueller/ cluster/ ps3/ doc/ CellProgrammingTutorial/ BasicsOfCellArchitecture. html
[27] http:/ / www. technologynewsdaily. com/ node/ 6824
[28] http:/ / www. dailytech. com/ Cell+ Broadband+ Engine+ Does+ Medical+ Imaging/ article6866. htm
[29] http:/ / en. wikipedia. org/ wiki/ Cell_microprocessor_implementations
[30] http:/ / cag. csail. mit. edu/ crg/ papers/ eichenberger05cell. pdf
[31] http:/ / mnagano. wordpress. com/ 2007/ 07/ 12
[32] http:/ / www. devhardware. com/ c/ a/ Computer-Processors/ Cell-Inside-the-Future-of-Processor-Architecture
[33] http:/ / www. google. com. br/ url?sa=t& ct=res& cd=13& url=http%3A%2F%2Fwww. ps3land. com%2FCELL. ppt&
ei=V3TXRoOkBoeiev2i4NAM& usg=AFQjCNFhAAjRQZsmNF-JHCiE3pqng0Hocg& sig2=LZ7jpMF4mPCGCoITwpQKtA
[34] http:/ / www. gpgpu. org/ sc2006/ workshop/ presentations/ Paolini_IBM_Cell. pdf
[35] http:/ / www-01. ibm. com/ chips/ techlib/ techlib. nsf/ techdocs/ D21E662845B95D4F872570AB0055404D/ $file/ 2053_IBM_CellIntro.
pdf
[36] http:/ / www-01. ibm. com/ chips/ techlib/ techlib. nsf/ techdocs/ 1AEEE1270EA2776387257060006E61BA/ $file/ CBEA_v1.
01_3Oct2006. pdf
[37] http:/ / homepages. dcc. ufmg. br/ ~yurif/ lpp/ 2007_ieeecomputer. pdf
[38] http:/ / www. cerc. utexas. edu/ vlsi-seminar/ spring05/ slides/ 2005. 02. 16. hph. pdf
[39] http:/ / www-128. ibm. com/ developerworks/ power/ library/ pa-fpfunleashing
[40] http:/ / www. casesconference. org/ cases2005/ pdf/ Cell-tutorial. pdf
[41] http:/ / www10. informatik. uni-erlangen. de/ Publications/ Talks/ 2007/ Goetz_ICMMES07. pdf
[42] http:/ / www. hpcwire. com/ hpc/ 679134. html
[43] http:/ / www. cs. utk. edu/ ~dongarra/ cell2006/ cell-slides/ 17-Yuan-Zhao. pdf
[44] http:/ / www. cs. berkeley. edu/ ~samw/ projects/ cell/ GSPx06Talk. pdf
Arquitetura Intel Core e Core 2 7
Arquitetura Intel Core e Core 2
A microarquitetura Intel Core, divulgada em 2006 pela Intel, é uma nova arquitetura que permite um aumento de
desempenho combinado à um menor consumo de energia. Possui recursos avançados que permitem um melhor
desempenho por Watt. Dentre estes recursos temos uma execução mais rápida de instruções maiores, uma melhora
no sistema de consumo de energia que possibilita a desativação temporária de áreas ociosas, um sistema aprimorado
de predição de instruções e dados e também algumas novas instruções multimídia.
O texto abaixo apresenta em linhas gerais essa nova arquitetura e seus principais recursos.
Introdução
Os processadores que têm sido desenvolvidos recentemente buscam em sua maioria alcançar o máximo de
paralelismo possível. Essa afirmação pode ser verificada facilmente ao se analisar arquiteturas de processadores
como os Sun Niagara, Sun Niagara 2 e o IBM/STI Cell.
Para alcançar uma maior eficiência em aplicações que exigem maior grau de paralelismo, a tendência atual é que os
novos processadores contenham um número cada vez maior de unidades de processamento. Para produzir
processadores com tantas unidades de processamento, é necessário diminuir a complexidade de cada unidade de
forma a permitir que a produção do processador seja economicamente viável para o fabricante. Essa redução de
complexidade pode afetar recursos que antes eram tidos como necessários nos processadores modernos, como a
execução fora de ordem [1], utilizada para aumentar o número de instruções realizadas em um ciclo de clock.
Neste contexto temos a introdução de processadores baseados na microarquitetura Core da Intel, que busca
aperfeiçoar ainda mais os complexos recursos existentes nos processadores modernos e ao mesmo tempo atacar o
problema do processamento de aplicações paralelas acrescentando vários núcleos de processamento a um único
processador.
Conceito de desempenho
O desempenho [2] de um processador não pode ser medido apenas como uma proporção direta da frequência do
relógio do processador, ou mesmo como a quantidade de instruções realizadas por ciclo do processador (IPC). O
desempenho é dado pela simples equação:
Desempenho = Frequência IPC
Desta forma temos duas maneiras principais de aumentar o desempenho de um processador, aumentando a
frequência ou o throughput. Assim, o aumento da capacidade de processamento depende da microarquitetura do
processador e do aumento da frequência, ambos dependentes de como o processador é projetado e construído.
Arquitetura
A tendência atual dos processadores voltados para ambientes paralelos é não implementar execução de instruções
fora de ordem. A execução fora de ordem permite que uma seqüência de instruções enviadas para o processador
sejam processadas internamente em uma ordem diferente da seqüência original, que busca aumentar o número de
instruções processadas de acordo com a arquitetura do processador, ordenando novamente na seqüência original após
o término da execução. Processadores que não contam com esse recurso precisam que o ordenamento das instruções
seja feito antes de enviadas para o processador, através de otimizações feitas por um compilador, por exemplo.
A arquitetura Core foge à regra e busca aperfeiçoar as técnicas já existentes. Assim, cada núcleo de processamento é
altamente eficiente e ao mesmo tempo complexo, dificultando a criação de processadores que possuam muitos
núcleos. Espera-se que ganhos expressivos de poder de processamento sejam alcançados com a adição de novos
núcleos de processamento aos processadores, ao contrário da estratégia anterior da Intel com a arquitetura NetBurst,
onde os ganhos eram alcançados principalmente com avanço das técnicas de fabricação que permitissem que os
Arquitetura Intel Core e Core 2 8
processadores funcionassem a frequências cada vez maiores.
Abaixo encontra-se um diagrama simplificado de um núcleo de processamento (core) baseado na arquitetura Intel
Core:
O dito popular que a Intel parece ter seguido ao desenvolve a arquitetura Core foi "Mais é Melhor". A arquitetura
Core possui uma quantidade maior de cada unidade ou recurso que pode ser encontrada em uma unidade de
processamento. A arquitetura Core possui mais lógica de decodificação, melhor reordenação de instruções, mais
estações de reserva, mais hardware de execução, maiores buffer's e outros recursos encontrados nos mais de 150
milhões de transistores de cada processador baseado na arquitetura Core.
Apesar da adição de mais recursos à arquitetura Core, existem limites ao número de instruções que podem ser
executados simultaneamente em um núcleo de processamento. Quanto maior o número de instruções a unidade de
execução do núcleo pode processar simultaneamente, maior a dificuldade em manter a unidade de execução
completamente ocupada, pois as instruções em execução não podem possuir dependências entre sí. Se várias
instruções que possuem interdependências são enviadas à unidade de execução, apenas uma é executada enquanto as
outras aguardam o término da primeira. Além disso, a latência do acesso à memória pode fazer com que a unidade de
execução fique ociosa aguardando instruções e dados.
A arquitetura Core possui várias funcionalidades e soluções que visam manter a poderosa unidadede execução
ocupada. Essas funcionalidades buscam principalmente minimizar o envio simultâneo de instruções que possuam
dependência para a unidade de execução e minimizam o número de acessos à memória.
A Intel atribuiu nomes a cada uma dessas soluções, que são explicadas em maiores detalhes nas seções a seguir.
Arquitetura Intel Core e Core 2 9
Intel Wide Dynamic Execution
A Execução Dinâmica é uma combinação de técnicas como a análise do fluxo de dados, execução especulativa,
execução fora de ordem e tecnologia superescalar onde se tem mais de uma unidade de execução. A primeira vez que
esta tecnologia foi usada pela Intel foi na microarquitetura Intel de 6ª geração, conhecida como P6, usada nos
processadores Pentium Pro, Pentium II, and Pentium III. Para a microarquitetura Intel NetBurst, foi introduzido o
Advanced Dynamic Execution, um dispositivo de execução especulativa proposto para manter a continuidade da
execução de instruções dentro do processador. Além disso, a NetBurst possui um algoritmo de previsão de desvio
(branch-prediction) mais eficaz diminuindo o número de reconfigurações do pipeline.
Com a microarquitetura Intel Core tem-se um ganho significativo da capacidade de despachar execuções devido ao
Intel Wide Dynamic Execution. Essa tecnologia possibilita uma maior entrega de instruções por ciclos de clock
melhorando tanto o tempo de execução como a utilização eficaz de energia. Cada núcleo de execução é, digamos,
mais largo, possibilitando que cada núcleo busque, despache, execute e retorne até quatro instruções completas
simultaneamente. Anteriormente a NetBurst podia trabalhar com ate três instruções por tempo, um ganho de
desempenho de 33%. Outras melhorias incluem um melhor algoritmo de previsão de desvio, buffers de instruções
maiores o que possibilita mais flexibilidade na execução além de outras melhorias que reduzem o tempo de
execução.
Macrofusion©
Macrofusion é uma nova característica da nova arquitetura que permite reduzir o tempo de execução. Nas gerações
anteriores cada instrução era decodificada individualmente e então executada. Com a Macrofusion permite-se que
pares de instruções comuns, por exemplo, uma comparação seguida de um desvio condicional, sejam combinadas em
uma única instrução interna (micro-op) durante a decodificação. Assim duas instruções do programa podem ser
executadas como um único micro-op, reduzindo o trabalho total que o processador deveria realizar. Esta propriedade
aumenta o número de instruções executadas por unidade de tempo ou reduz o tempo necessário para se executar
certo conjunto de instruções. A conclusão direta é que a Macrofusion possibilita uma melhor resposta do processador
com menos gasto de energia.
Para facilitar a Macrofusion uma nova e aprimorada unidade lógica e aritmética (ALU) foi desenvolvida para a
microarquitetura Core. Esta nova ALU executa instruções combinadas pela Macrofusion em um único ciclo de
clock.
A microarquitetura Intel Core também aprimorou a técnica de fusão de micro-op utilizado pela primeira vez na linha
Pentium M. Essa técnica visa uma melhor utilização da energia do processador. Nos modernos processadores as
instruções x86 dos programas, chamadas macro-op, são desdobradas em unidades menores de execução, os
micro-ops, antes de serem despachados ao pipeline para o processamento. Esta fusão de micro-op é realizada nos
micro operadores que possuem o mesmo macro-op para reduzir o número de instruções que realmente serão
executadas. Isso possibilita um melhor escalonamento de instruções aumentando o throughput da máquina. Alguns
estudos mostram que a fusão destes operadores pode reduzir em mais de 10% o número de micro-ops manipulados
pela lógica do processador.
Arquitetura Intel Core e Core 2 10
Intel Intelligent Power Capability
Intel Intelligent Power Capability foi desenvolvido, basicamente, para reduzir o consumo de energia e temperatura
do processador. Esta inovação gerencia o consumo de energia em tempo de execução nos núcleos ativos. O resultado
é a uma otimização na relação desempenho/consumo em todas as esferas de computação.
Para fazer isso, a microarquitetura Core possui aprimoramentos em recursos já existentes em processadores
anteriores da Intel e alguns novos recursos;
Recursos de famílias anteriores:
•• Intel Speedstep: A tecnologia Intel Speedstep permite que a frequência de operação (através da alteração de razão
entre FSB e clock) e a tensão do núcleo de um processador sejam alterados em tempo de execução. Alguns fatores
que podem levar à alteração da frequência e tensão são a fonte de energia do sistema (bateria ou fonte), estado
térmico do processador. Outro fator importante é a política de gerenciamento de energia do sistema operacional,
que pode selecionar o nível de economia de energia baseando-se, por exemplo, na utilização do processador.
•• Enhanced Intel Speedstep: Todas as vezes que ocorre uma variação na frequência do processador, este fica
indisponível por um curto período de tempo, enquanto que a variação na tensão do núcleo do processador não
ocasiona esta indisponibilidade. O enhanced Speedstep permite que a tensão varie independentemente da
frequência do processador (no Intel Speedstep a variação de tensão e frequência sempre ocorria em conjunto).
Esta alteração melhora a disponibilidade do processador ao permitir que seu consumo seja reduzido sem a
necessidade de alterar sua frequência
•• Enhanced Halt State (Estado C1E): O processador entra no estado C1E (estado econômico de energia) quando o
sistema operacional envia um comando HALT. Nos sistemas operacionais atuais este comando é enviado quando
o sistema não encontra-se com carga máxima de utilização. Quando está no estado C1E a frequência do
processador é alterada para o mínimo (através da alteração do multiplicador) além da tensão também ser reduzida.
Novos Recursos:
•• Desabilitação seletiva de subsistemas: Processadores baseados na microarquitetura Core podem desabilitar
unidades internas que não estejam sendo utilizadas. Essas unidades não são o núcleo inteiro, mas subsistemas
como a ALU (unidade lógico-aritmética) e barramentos internos, que agora podem ser alimentados
separadamente. A grande dificuldade nas implementações anteriores desse recurso é que ao alimentar novamente
as unidades é necessário aguardar um curto período de tempo até que elas estejam novamente prontas para
utilização. A implementação da Intel não aumenta o tempo de resposta ao religar unidades que não estavam em
uso.
•• Medição distribuída de temperatura: Por causa do novo recurso de desabilitação seletiva de subsistemas, partes
diferentes do processador poderão estar ligadas/desligadas dependendo da utilização do sistema, fazendo com que
as temperaturas no processador variem de maneira não uniforme. Com essa dificuldade em se medir a
temperatura do processador eficazmente, a Intel distribuiu vários sensores de temperatura pelo processador. A
temperatura informada para o sistema/usuário e maior temperatura encontrada dentre as medições de todos os
sensores de temperatura do processador.
Arquitetura Intel Core e Core 2 11
Intel Advanced Smart Cache
A arquitetura Intel Core foi desenvolvida desde o começo prevendo-se o suporte a vários núcleos por processador.
Diferentemente dos processadores anteriores, os processadores Intel Core com múltiplos núcleos compartilham a
memória cache de nível 2 (L2).
A primeira vantagem da estratégia de compartilhar o cache L2 é que a quantidade de cache L2 pode ser alterada
dinamicamente de acordo com a carga dos núcleos. Em um processador DualCore, quando um núcleo está inativo, o
núcleo ativo fica com toda a cache L2 à sua disposição. Quando vários núcleos estão ativos a cache L2 é dividia
proporcionalmente entre os núcleos de acordo com a frequência de requisições feitas por cada núcleo à memória.
A segunda vantagem é que ao utilizar uma única cache L2 não é necessário utilizartécnicas para garantir a
consistência de dados entre as caches dos vários núcleos, diminuindo a utilização do barramento entre o processador
e a memória do sistema.
Uma terceira vantagem é que o espaço total disponível em cache L2 é melhor utilizado já que quando dois núcleos
utilizam os mesmos dados eles não são duplicados em várias caches, sendo compartilhados pelos dois núcleos.
A última vantagem é que a microarquitetura Core possui lógica de controle adicional para permitir que os dados da
cache L1 de um núcleo sejam transferidos para a cache L1 de outro núcleo passando pela cache L2 compartilhada.
Isso permite um passo a menos (não é necessário transferir dados entre as caches L2 de cada núcleo) no
compartilhamento de dados entre as caches L1 de diversos núcleos, potencialmente melhorando a performance do
sistema quando vários núcleos executam a mesma tarefa.
Intel Smart Memory Access
Intel Smart Memory Access é o nome de um conjunto de técnicas utilizada para aumentar a performance do sistema
de acesso à memória do processador. Consiste das técnicas de Pré-Carregamento [3] e Desambiguação de Memória
[4].
Pré-carregamento
A primeira técnica utilizada para aumentar a performance é o pré-carregamento [5]de instruções e dados.
A microarquitetura possui 6 unidades independentes de pré-carregamento de dados:
•• 2 unidades na cache de primeiro nível (L1) do primeiro núcleo
•• 2 unidades na cache de primeiro nível (L1) do segundo núcleo
•• 2 unidades na cache de segundo nível (L2) compartilhada entre os núcleos
A microarquitetura Core possui também 2 unidades independentes de pré carregamento de instruções:
•• 1 unidade na cache de primeiro nível (L1) do primeiro núcleo
•• 1 unidade na cache de primeiro nível (L1) do segundo núcleo
As unidades guardam informações sobre os padrões de acesso das unidades de execução aos dados e padrões de
execução do programa. Alguns desses padrões de acesso são:
• Assumir se um desvio condicional [6] provavelmente será tomado, baseado na probabilidade da instrução de
desvio condicional alterar o fluxo de execução do programa de acordo com o histórico recente dos resultados
deste desvio condicional específico. Quando o processador assume que o desvio será tomado, ele encontra o
endereço de destino do desvio e começa a executar as instruções do novo local.
• Em um loop, os preditores de desvio [7] normalmente assumem que na próxima iteração a execução ocorrerá
dentro do loop (a condição para saída do loop é considerada sempre como não verdadeira). Sendo assim, esse
preditores de desvio sempre erram a previsão na iteração que sai do loop. A microarquitetura Core introduziu
preditores que registram em qual iteração um loop foi interrompido. Na próxima vez que o mesmo loop for
executado, se o número de iterações antes de sair do loop for o mesmo, o preditor irá acertar a previsão da última
iteração, prevendo-a como uma saída do loop
Arquitetura Intel Core e Core 2 12
•• Desvios condicionais indiretos (onde o endereço de destino é carregado de um registrador) são intrinsecamente
difíceis de pré-carregar, já que a informação sobre o endereço de destino está indisponível durante o processo de
predição. Quando os preditores assumem que um desvio condicional indireto será tomado, eles verificam em uma
tabela se o desvio condicional indireto já foi tomado anteriormente e qual foi o seu endereço de destino naquela
execução. Os preditores utilizam então esse endereço como o provável destino da execução atual.
Desambiguação de memória
Os processadores modernos utilizam a execução fora de ordem; uma técnica que altera a ordem em que as instruções
são realizadas para permitir que um número maior de instruções esteja em execução em um determinado momento.
Quando ocorre uma instrução STORE seguida de um LOAD, podem acontecer duas situações:
•• O LOAD vai tentar carregar o dado que foi salvo pelo STORE, sendo assim a ordem de execução das instruções
não pode ser alterada.
•• O LOAD vai carregar um dado diferente do salvo pelo STORE, sendo assim ele pode ser executado antes do
STORE
O problema é que para diferenciar os dois casos, é necessário saber os endereços de memória onde o STORE está
salvando os dados. Este endereço só fica disponível alguns ciclos após o início da execução do STORE. Como
conseqüência, o processador deve aguardar um ciclo após o início da execução do STORE para decidir se o LOAD
já pode começar a ser executado (em paralelo com o STORE) ou se o seu início deve ser postergado para depois da
finalização da execução do STORE.
Estudos[8] indicam que em mais de 97% dos casos não existe dependência entre os dados de STORE e LOAD
consecutivos. Isso quer dizer que o LOAD poderia até ser executado antes do STORE.
Como resultado, uma instrução ADD após o LOAD-STORE, por exemplo, é executada em 5 ciclos (STORE ->
define endereço -> LOAD-> espera load -> ADD), enquanto poderia ter sido executada em 3 ciclos (LOAD ->
STORE / espera load -> ADD).
Para solucionar o problema, a microarquitetura Core possui algoritmos que determinam com uma grande
probabilidade se um par de instruções STORE-LOAD está operando sobre os mesmos dados, sem a necessidade de
aguardar a definição dos endereços de memórias que as instruções estariam acessando.
Vamos verificar como exemplo da desambiguação de memória o que acontece para a seguinte seqüência de
instruções:
• 'STORE 13 REF' - Guardar o valor 13 na posição REF da memória.
• 'LOAD REF A' - Carregar o conteúdo da posição REF da memória no registrador A.
• 'ADD A, B, C' - Somar os registradores A e B, atribuindo o resultado ao registrador C.
Arquitetura Intel Core e Core 2 13
No exemplo existem duas posições de memória, uma representada pelo quadrado vermelho e outra representada pelo
quadrado azul. O sombreamento saindo dos quadrados indica que a instrução acessando aquele endereço de memória
ainda não finalizou. Cada linha cinza representa um ciclo de execução do processador.
• Caso A: Nesse caso o LOAD vai carregar no registrador A as informações salvas na posição de memória
vermelho pelo STORE, sendo assim ele fica impedido de iniciar sua execução até que o STORE seja finalizado.
•• Caso B: Nesse caso o LOAD e o STORE estão trabalhando com posições de memória diferentes. Como esta
independência só é descoberta após o ciclo de decodificação do STORE, a única alternativa possível é iniciar a
execução do LOAD após o ciclo de decodificação do STORE. Este é o funcionamento das arquiteturas Intel
anteriores à arquitetura Core.
• Caso C: Este caso ilustra o funcionamento da Desambiguação de Memória da arquitetura Core para a situação
descrita no Caso B. O LOAD e o STORE estão trabalhando com posições de memória diferentes, mas através dos
algoritmos de Desambiguação de Memória a independência é descoberta antes do STORE iniciar sua execução.
Sendo assim, existe a alternativa de executar o LOAD antes do STORE. Nesse caso o LOAD termina sua
execução mais cedo, permitindo que o ADD dependente do LOAD (ambos acessam o registrador A) também seja
executado antes.
Intel Advanced Digital Media Boost
O Intel Advanced Digital Media Boost é um recurso que melhora significativamente a performance quando executa
instruções SSE. Tanto as operações de ponto de flutuação com dupla precisão da SIMD em 128-bits como as
operações aritméticas de inteiros SIMD em 128-bits reduzem o número total de instruções necessárias para executar
uma determinada tarefa do programa, e como resultado pode contribuir para um aumento total da performance. Eles
aceleram uma grande quantidade de aplicações, incluindo vídeo, som, imagem, processamento de fotos, encriptação,
financeiras, científicas e de engenharia. As instruções de SSE intensificam a arquitetura da Intel ao permitir que os
programadores desenvolvam algoritmos que podem misturar pacotes de pontos de flutuação de precisão individual
com inteiros, usando tanto as instruções SSE como as instruçõesMMX, respectivamente.
Em várias das antigas gerações de processadores, as instruções SSE, SSE2 e SSE3 em 128 bits eram executadas em 
um nível sustentado de uma instrução completa a cada dois ciclos de relógio—por exemplo, a mais baixa em 64 bits 
em um ciclo e a mais alta em 64 bits no próximo ciclo. O recurso Intel Advanced Digital Media Boost permite que 
estas instruções em 128-bits sejam completamente executadas em um nível de rendimento de uma por ciclo de 
relógio, efetivamente dobrando a velocidade da execução para estas instruções. Isto aumenta ainda mais a eficiência 
total da Microarquitetura Intel® Core™ através do aumento do número de instruções controladas por ciclo. O 
recurso Intel Advanced Digital Media Boost é particularmente útil para a execução de importantes operações de
Arquitetura Intel Core e Core 2 14
multimídia envolvendo gráficos, vídeo e áudio e para o processamento de outros conjuntos de dados ricos que
utilizam instruções SSE, SSE2, e SSE3.
Referências
[1] Do Estrangeirismo Out of order execution - OOO
[2] Também conhecido pelo estrangeirismo performance
[3] Também conhecido pelo estrangeirismo prefetch
[4] Também conhecido pelo estrangeirismo Memory disambiguation
[5] Também conhecido pelo estrangeirismo prefetch
[6] Também conhecido pelo estrangeirismo branch
[7] Também conhecidos pelo estrangeirismo branch predictors
[8][8] S. Sethumadhavan, et al. Scalable Hardware Memory Disambiguation for High ILP Processors. In 36th Annual International Symposium on
Microarchitecture, 2003.
• Inside Intel® Core™ Microarchitecture. Melhor texto introdutório sobre a Arquitetura (http:/ / download. intel.
com/ technology/ architecture/ new_architecture_06. pdf)
• Página da Intel sobre multicore. Um bom tópico introdutório (http:/ / www. intel. com/ multi-core/ index. htm)
• Uma intrudução ao multicore Intel. Clube do Hardware (http:/ / www. clubedohardware. com. br/ artigos/ 1203/
1)
• Uma excelente apresentação com animações e textos explicativos da Intel. ( Em Ingles) (http:/ / www. intel. com/
technology/ computing/ dual-core/ demo/ popup/ demo. htm)
• Intel vs. AMD Gaming Benchmarks (http:/ / www. extremetech. com/ article2/ 0,1697,1997469,00. asp)
• Um bom texto sobre a arquitetura Multicore Intel e do Athlon X2 (http:/ / mega. ist. utl. pt/ ~ic-micro/ relatorios/
g11. pdf)
Arquitetura Intel Core e Core 2 15
• Benchmarks Avaliados pelo Tom's Hardware (http:/ / www23. tomshardware. com/ cpu_mobile.
html?model1=701& model2=704& chart=261)
• Novas Instruções Intel (http:/ / download. intel. com/ technology/ architecture/ new-instructions-paper. pdf)
• Intel Core WhitePaper (http:/ / www. intel. com/ technology/ architecture-silicon/ intel64/
45nm-core2_whitepaper. pdf)
• Making the Move to Quad-Core and Beyond (http:/ / www. intel. com/ technology/ architecture/ downloads/
quad-core-06. pdf)
• Inside Intel® Core Microarchitecture and Smart Memory Access (http:/ / download. intel. com/ technology/
architecture/ sma. pdf)
• Setting New Standards for Energy-Efficient Performance (http:/ / download. intel. com/ technology/ architecture/
new_architecture_06. pdf)
Referências por tópicos
1.1. INTRODUÇÃO
• Inside Intel® Core™ Microarchitecture. Melhor texto introdutório sobre a Arquitetura (http:/ / download. intel.
com/ technology/ architecture/ new_architecture_06. pdf)
2.2. Intel Wide Dynamic Execution
• Por Dentro da Microarquitetura Intel Core Unidades de Execução (http:/ / www. clubedohardware. com. br/
artigos/ 1203/ 4)
• Evolution of the multi-core processor architecture Intel Core: Conroe, Kentsfield... (http:/ / www. digital-daily.
com/ cpu/ new_core_conroe/ index02. htm)
3.3. Intel Intelligent Power Capability
• Energy-Efficient Performance (http:/ / www. intel. com/ technology/ eep/ index.
htm?iid=technology_eepdescription+ tabs_overview)
• (http:/ / www. xbitlabs. com/ articles/ cpu/ display/ core2duo-preview_8. htm)
4.4. Intel Advanced Smart Cache
• Dentro da Microarquitetura Intel® Core (http:/ / www. intel. com/ portugues/ technology/ magazine/ archive/
2006/ apr/ revista0406_1. pdf)
• Cache de Memória e Unidade de Busca (http:/ / www. clubedohardware. com. br/ artigos/ 1203/ 2)
• Getting Ready to Meet Intel Core 2 Duo: Página 6 (http:/ / www. xbitlabs. com/ articles/ cpu/ display/
core2duo-preview_6. html)
5.5. Smart Memory Access
• Cache de Memória e Unidade de Busca (http:/ / www. clubedohardware. com. br/ artigos/ 1203/ 2)
• Inside Intel® Core™ Microarchitecture and Smart Memory Access (http:/ / download. intel. com/ technology/
architecture/ sma. pdf)
• Cache de Memória e Unidade de Busca (http:/ / www. clubedohardware. com. br/ artigos/ 1203/ 2)
• Getting Ready to Meet Intel Core 2 Duo: Página 7 (http:/ / www. xbitlabs. com/ articles/ cpu/ display/
core2duo-preview_7. html)
6.6. Intel Advanced Digital Media Boost
• Extending the World’s Most Popular Processor Architecture (http:/ / download. intel. com/ technology/
architecture/ new-instructions-paper. pdf)
• Caminho Interno de Dados de 128 bits (http:/ / www. clubedohardware. com. br/ artigos/ 1203/ 5)
• Getting Ready to Meet Intel Core 2 Duo: Página 5 (http:/ / www. xbitlabs. com/ articles/ cpu/ display/
core2duo-preview_5. html)
7.7. Intel(r) Integrated Performance Primitives (Intel(r) IPP)
Arquitetura Intel Core e Core 2 16
• - Exemplos de Códigos em vários modelos de programações OpenMP, Pthreads, TBB. Multi-thread apps for
Multi-core (http:/ / softwarecommunity. intel. com/ Wiki/ Threading/ 4. htm)
• Intel Technology Magazine: Preparção de Aplicações para a Arquitetura Intel Core (http:/ / www. intel. com/
technology/ magazine/ computing/ core-programming-0606. pdf)
8.8. Benchmarks
• Intel Core 2 Extreme QX6700, uma avaliação do site bit-tech (http:/ / www. bit-tech. net/ hardware/ 2006/ 11/
02/ intel_core_2_extreme_qx6700/ 1. html)
• Defesa de Mestrado da Universidade da Lousiana Performance Analysis of Intel Core 2 Duo Processor (http:/
/ etd. lsu. edu/ docs/ available/ etd-06122007-093459)
• Consumo máximo de vários processadores (http:/ / users. erols. com/ chare/ elec. htm)
Arquitetura Sun Niagara e Niagara II
A arquitetura Niagara e Niagara II foi projetada para prover uma solução de alto desempenho para servidores de
aplicações comerciais. Ela suporta 32 threads e explora o paralelismo a nível de threads inerente às aplicações de
servidor combinado a baixos níveis de consumo de energia.
O texto abaixo apresenta essa nova abordagem e seus principais recursos. Primeiro é apresentado uma introdução
justificando a abordagem adotada no projeto do Niagara. Depois será apresentado os detalhes técnicos da arquitetura
Niagara, as suas limitações e as melhorias do Niagara 2. Na próxima seção será apresentado as aplicações, sistemas
operacionais, linguagens e modelos de programação compatíveis com essa arquitetura. Por últimos, as conclusões e
um pouco sobre o futuro do Niagara.
Introdução
Ao longo das duas últimas décadas, os projetistas de microprocessadores têm focado na melhoria do desempenho de
uma única thread, aumentando a freqüência e explorando paralelismo a nível de instrução (ILP), utilizando técnicas
tais como execução de várias instruções, execução fora de ordem e previsão de branches. A ênfase na melhoria do
desempenho de uma única thread tem apresentado cada vez menos resultados devido às limitações em termos de
latência de memória principal e as inerentes aplições com baixo ILP. Isto levou a uma explosão de complexidade nos
projetos dos microprocessadores e tornou a dissipação de calor uma grande preocupação.
Arquitetura Sun Niagara e Niagara II 17
Por estas razões, o processador Niagara da Sun Microsystems apresenta uma abordagem radicalmente diferente para
o projeto de um novo micropocessador.Ao invés de focar sobre o desempenho de uma única ou duas threads, a Sun
otimizou o Niagara para um obter desempenho em servidores comerciais multithread. Essa abordagem aumenta o
desempenho da aplicação melhorando o throughput. Isso é especialmente eficiente em servidores comerciais de
aplicações como banco de dados e serviços Web, no qual tendem ter cargas de trabalho contendo grande quantidade
de paralelismo a nível de threads (TLP).
O Niagara é uma implementação totalmente nova da arquitetura do Sparc V9, que explora uma grande quantidade de
paralelismo on-chip para prover um alto throughput. O Niagara suporta 32 threads de hardware combinando idéias
de multiprocessor chips e multithreading. Vários estudo vem indicando um significante ganho de desempenho
utilizando essa abordagem cargas de trabalho multithread.
A execução eficiente de várias threads esconde a latência da memória. Entretanto, ter 32 threads exigem do sistema
de memória a necessidade de uma alta largura de banda. Quatro controladores de memória independentes dentro do
Niagara conseguem prover cerca de 20 Gbytes/s de largura de banda para a memória.
A utilização de TLP tambem permite aumentar significantemente o desempenho sem precisar melhorar a frequência
do clock da CPU. Isso e a utilização de pipelines entre múltiplas threads permitem um projeto eficiente em termos de
área e de consumo de energia. Os projetistas calculam que o Niagaram dissipa cerca de 60 W de energia, tornando-o
muito atrativo para ambientes com alta densidade de computação. Nos date centers, por exemplo, os custos com o
consumo de energia e ar condicionado estão se tornando muito significantes.
A métrica de desempenho chave para servidores comerciais, como os servidores Web, é a quantidade de requisições
atendidas em um intervalo de tempo. Mas outros requisitos, como consumo de energia e ar condicionado, devem ser
levados em conta. A utilização de processadores ILP em clusters de servidores funcionando a clocks menores pode
ser uma solução. No entanto, o desempenho é diretamente proporcional à frequência do clock e isso faz com que
esses processadores apresentem uma perda proporcional no desempenho, tornando essa solução menos desejada.
Essa situação motiva a outros requisitos para melhorar o desempenho por Watt. Esses requisitos não são atendidos
eficientemente utilizando máquinas otimizadas para o desempenho de uma única thread.
Aplicações para servidores comerciais tendem a ter um baixo ILP porque eles tem grandes conjuntos de trabalhos e
pouca localidade de referência no acesso a memória; todos os dois contribuem para altas taxas de cache miss. Além
disso, branches com dados dependentes são difíceis de prever, assim o processador tem que discartar o trabalho feito
na direção errada. A combinação de um baixo ILP disponível e uma alta taxa de cache miss faz com que o acesso a
memória seja uma limitação para o desempenho.
As aplicações de servidores tendem a ter grande quantidade de TLP. As máquinas de memória compartilhada com
processadores de uma thread interconectados possuem um bom desempenho justamente porque exploram o TLP.
Entretanto, a utilização de SMP junto composto de vários processadores de uma thread não possuem uma relação
custo-benefício tanto para o consumo de energia quanto em termos de custo. Uma abordagem mais eficiente é
construir uma máquina composta de cores simples agregados em um único die, com uma cache compartilhada e alta
largura de banda com a memória, ou seja, produzindo um SMP server dentro de um chip.
O Niagara I representa o primeiro de uma série de microprocessadores que a Sun desenvolverá com várias threads de
hardware para prover alto throughput e alto desempenho por Watt em aplicações de servidores comerciais. A
disponibilidade de uma arquitetura rica em threads abre novas oportunidades para os desenvolvedores aumentarem o
desempenho das suas aplicações. Essa arquitetura é uma mudança de paradigma no projeto de microprocessadores.
Após o lançamento do Niagara, a Sun conseguiu sair do vermelho e está faturando alto com as vendas do Sparc T1
(nome comercial da máquina que utiliza o Niagara).
Arquitetura Sun Niagara e Niagara II 18
Arquitetura
O processador Niagara SPARC é projetado para um baixo cosumo de energia e a alto throughput para servidores
comerciais de aplicações, onde o consumo de energia, o resfriamento e o espaço são as principais preocupações. A
arquitetura de multithreaded chip (CMT) alcança altos throughput enquanto otimiza o desempenho por watt. A
execução concorrente de 32 threads é implementada através de 8 4-way multithreaded cores simétricos, associados a
um sistema de cache/memória de baixa latência e alta largura de banda.
A firgura abaixo apresenta o pipeline do Niagara.
A abordagem do Niagara para aumentar o throughput nas aplicações de servidores comerciais envolve um grande
aumento no número de threads suportados pelo processador e subsistema de memória que deve suportar uma grande
largura de banda. O Niagara suporta 32 threads de execução em hardware. A arquitetura organiza cada quatro
threads em um grupo de thredas. Esse grupo compartilha o mesmo pipeline de processamento, referenciado como
Sparc Pipe. O Niagara possui 8 grupos de threads na CPU. Cada Sparc Pipe possui uma cache L1 para instruções e
dados. O hardware esconde os stalls da memória e do pipeline de uma dada thread escalonando outras threads de um
mesmo grupo no Sparc pipe com uma penalidade de zero ciclos.
As 32 threads compartilham uma cache L2 de 3MB. Nos sistemas SMP convencionais que utilizam processadores
discretos com sistema de interconexão coerente, misses de coerência são frequentes sobre os barramentos de baixa
frequencia, além de ter altas latências. O Niagara possui uma cache interna ao chip que elimina tais misses e possui
uma baixa latência para comunicação entre as caches.
A interconexão via crossbar provê uma comunicação entre os Sparc pipes, bancos de cache L2 e outros recursos
compartilhados na CPU. Ele provê mais de 200 GB/s de largura de banda. O crossbar também provê uma porta para
a comunicação com o subsistema de E/S. A interface de memória é de quatro canais de DDR2 DRAM, suportando
uma largura de banda máxima de 20 GB/s e uma capacidade de 128 GB.
Formatos de Dados
A arquitetura Niagara reconhece os seguintes tipos de dados: inteiro com sinal (8, 16, 32 e 64 bits), inteiro sem sinal
(8, 16, 32 e 64 bits), SIMD (Uint8 de 32 bits, Int16 de 64 bits, Int32 de 64 bits) e ponto flutuante (32, 64 e 128 bits).
Acompanham esses tipos de dados, os seguintes comprimentos de palavras: byte (8 bits), meia-palavra (16 bits),
palavra (32 bits), palavra-marcada (valor de 30 bits e 2 bits de marcação), palavra dupla/extendida (64 bits) e palavra
quádrupla (128 bits). Os inteiros com sinal são escritos em complemento-de-dois, enquanto os inteiros sem sinal são
escritos usando-se toda sua extensão. Palavras-marcadas têm a marcação nos dois bits menos significativos. Pontos
flutuantes têm sua representação normal (IEEE Std 754-1985), alterando apenas os expoentes ({7;0}, {10;0} e
{14;0}) e frações ({22;0}, {52;32}+{31;0} e {111;96}+{95;64}+{63;32}+{31;0}), respectivamente para 32, 64 e
128 bits de representação, todas com um bit de sinal.
Registradores
São vários os tipos de registradores utilizados na arquitetura UltraSPARC:
•• uso geral: incluem os registradores de passagem de parâmetro, variáveis locais e globais. Podem ser
implementadas janelas de registradores, nas quais os registradores de entrada de uma janela correspondem aos de
saída de outra janela, interligando-as. De modo geral, podem haver de 72 a 640 registradores do tipo R em um
processador UltraSPARC, sendo que R[0] sempre mantém seu valor em zero, e o comando CALL escreve seu
próprio endereço em R[15];
•• ponto flutuante: são 64 registradores de 32 bits, que podem ser acessados como 16 de 128 bits para quádrupla
precisão (FQ[0], FQ[4],..., FQ[60]) ou 32 de64 bits para precisão dupla (FD[0, FD[2],...].,FD[62]) ou ainda 32 de
32 bits para precisão simples (FS[0], FS[1],...,FS[31]) e onde se utiliza apenas a primeira metade dos
registradores. Há também um registrador especial com grupos de bits para indicar estados especiais dos
Arquitetura Sun Niagara e Niagara II 19
registradores de ponto flutuante, como arredondamento e exceções;
•• auxiliares de estado: são registradores utilizados para indicar resultados como divisões ou multiplicações de 32
bits, códigos para operações com inteiros (condition codes), contador de ciclos (ticks), disparador de interrupção
ao atingir um determinado valor de ciclos (ticks), program counter, e outros. Há registradores especiais reservados
para implementações e cada processador virtual conta com seu próprio conjunto de registradores auxiliares, que
não são compartilhados;
•• estado de janelas de registradores: há um conjunto especial de registradores que controlam qual a janela ativa, se
podem ser salvas ou restauradas, se podem ser esvaziadas, etc. Os comandos que lidam com esses registradores
são de acesso privilegiado ou hiperprivilegiado. Há um outro conjunto semelhante que só pode ser visto por
processos privilegiados, e cada processador virtual conta com um conjunto próprio deles;
•• hiperprivilegiados: somente podem ser acessados por processos com esse nível, e contém registradores que
informam sobre os estados dos registradores, interrupções, traps e ciclos (ticks).
Instruções
As instruções da arquitetura Niagara são lidas individualmente pelos processadores virtuais e executadas (ou trapped
ou anuladas). Há um registrador chamado NPC (next program counter), que recebe o valor de PC+4 ou um outro
valor, caso haja um salto ou transferência de controle, de acordo com o que ocorrer com a instrução. Todas
instruções são divididas em 4 formatos e 11 categorias, totalizando 111 instruções.
Os 4 formatos são ajustados conforme os dois primeiros bits mais significativos: 00 para operações SETHI e
branches, 01 para loads e 10 e 11 para aritmética, lógica, traps, loads, stores e outros. As 11 categorias são acesso à
memória (usam 1 ou 2 registradores tipo R para calcular um endereço de memória de 64 bits de espaço e 8 bits de
comprimento, além de alinhamento), sincronização de memória (ordem em que são feitos loads/stores), aritmética de
inteiros e/ou lógica (shifts, multiplicações, divisões, etc.), transferência de controle (branches, traps, calls e jumps),
movimentos condicionais (mover valores de um registrador para outro com certas condições ou comparar
registradores, eliminando branches), gerenciamento de janelas de registradores (salvar, restaurar, etc.), acesso a
registradores auxiliares (escrita e leitura) e acesso a registradores privilegiados (também de escrita e leitura),
operações de ponto flutuante, instruções dependentes da implementação e instruções reservadas.
Memória
Com capacidade para executar 32 threads simultaneamente, uma interface rápida de acesso a memória é
extremamente importante para o Niagara. Para suprir a alta demanda de dados, o processador conta com quatro
controladores de memória DDR2 integrados. Ao integrar o controlador de memória com o processador, fazemos com
que ele funcione na mesma frequência do processador, recebendo informações da memória muito mais rapidamente.
ASI
Cada localidade da memória é referenciada por um adress space identifier (ASI) de 8 bits e um endereço de memória
de 64 bits. O ASI é utilizado para identificar em que tipo de espaço da memória um endereço se encontra (memória
principal, memória secundária, etc.). Além disto, ele fornece um atributo que é único para cada endereço, mapeia
registradores internos de um processador virtual e define o formato de acesso a dados (little ou big-endian).
Existem três categorias para um ASI, que definem como a MMU vai tratar o endereço de memória:
•• Virtual-Translating ASI: O endereço de memória é tratado como virtual e traduzido pela MMU em um endereço
físico.
•• Non-Translating ASI: O endereço não é modificado pela MMU. Este tipo de ASI é usado geralmente para acessar
registradores internos.
•• Real-Translating ASI: O endereço de memória é tratado como real e traduzido pela MMU em um endereço físico.
É utilizado por softwares com altos privilégios para acessar diretamente a memória utilizando endereços reais ou
físicos
Arquitetura Sun Niagara e Niagara II 20
Cache
Um dos principais limitadores à velocidade de processamento é o tempo de latência das memórias, que é o tempo
despendido desde a solicitação de dados pelo processador até o recebimento dos mesmos. Para diminuir os efeitos
deste problema, existem os caches: memórias pequenas e rápidas, em um nível mais próximo ao processador, que
servem para armazenar os dados e instruções com maior probabilidade de serem solicitados pelo processador. Cada
core do processador Sun Niagara possui um cache L1 de 24kB, dividido em um cache de instruções de 16kB, com
blocos de 32B e um cache de dados de 8kB, com blocos de 16B, ambos four-way set associative. O processador
conta ainda com um cache L2 de 3MB, twelve-way set associative, com blocos de 64B, que é compartilhado entre os
8 cores. Para manter a coerência de cache, é utilizada a técnica de write-through.
Se comparado com processadores atuais single-thread, estes caches são pequenos, porém para a arquitetura
multicore, multithread do Niagara eles são suficientes. Caches reduzidos também são necessários pelo espaço
limitado do die, devido aos múltiplos cores. Quando um processador single-core executa uma única thread e ocorre
um cache miss, é necessário esperar até que os dados requisitados sejam obtidos da memória principal. Uma das
soluções para este problema é a execução de instruções fora de ordem, mas isto leva a uma maior complexidade do
chip. No caso do Sun Niagara, no entanto, não há suporte a esta tecnologia, porém por se tratar de um processador
multithread, no caso de precisar buscar dados da memória podemos simplesmente mudar a thread que está sendo
executada para outra e aguardar até que os dados sejam obtidos, minimizando os efeitos de um cache miss. Como as
penalidades para cache miss são baixas, o processador não precisa depender tanto de técnicas de branch prediction,
que unido à falta de suporte à execução de instruções fora de ordem, colabora para tornar a arquitetura mais simples.
Crossbar
Para que mais de um core possa ter acesso ao cache L2 simultaneamente, ele é dividido em 4 banks. Interconectando
os banks do cache L2, os controladores de memória e a unidade de ponto flutuante aos cores, existe uma estrutura
chamada Crossbar Switch. O crossbar tem uma taxa de transferência altíssima, cerca de 200GB/s.
Sparc Pipe
Nesta seção será apresentado a implementação do Sparc pipe, que suporta quatro threads. Cada thread possui um
conjunto único de registradores, buffer de instruções e de dados. Cada grupo de threads compartilham a cache L1, a
TLB, unidades de execução e a maioria dos registradores do pipeline.
Foi implementado um pipeline de propósito único com seis estágios: fetch, thread select, decode, execute, memory e
write back). No estágio fetch, a cache de instrução e a TLB de instrução (ITLB) são acessados. O multiplexador de
seleção de threads escolhe o contador de programa (PC) de uma das threads, dentre os quatro disponíveis, que
executará o acesso. O pipeline busca duas instruções por ciclo. Um bit pré-codificado na cache indica as instruções
de latência alta.
No estágio de thread-select, o multiplexador de seleção de threads escolhe uma thread dentre as disponíveis para
executar uma instrução nos estágios seguintes. Esse estágio também mantém um buffer de instruções. As instruções
trazidas da cache na estágio fetch podem ser inseridas no buffer de instrução daquela thread se os estágios seguintes
estiverem ocupados. Os registradores do pipeline para os dois primeirosestágios são replicados para cada thread.
As instruções da thread selecionada vai para o estágio decode, no qual executa a decodificação da instrução e acessa
o register file. As unidades de execução suportadas incluem uma unidade de lógica aritimética (ALU), um shifter,
um multiplicador e um divisor. Uma unidade intermediária fica a cargo de passar os resultados para as instruções
dependentes ante de atualizar o register file. A instruções da ALU e do shifter possuem latência de um único ciclo e
geram os resultados no estágio execute. As operações de multiplicação e divisão possuem longa latência e causam a
troca de thread. A unidade de load-store contém a TLB de dados (DTLB), a cache de dados e buffers de
armazenamento. Os acessos a cache de dados e a DTLB são feitos no estágio de memória. As instruções de um único
ciclo (i.e. ADD) atualizam o register file no estágio write back.
Arquitetura Sun Niagara e Niagara II 21
A lógica de seleção de threads decide qual thread está ativa em um dado ciclo nos estágios de fetch e thread-select.
Consequentemente, se o estágio thread-select escolhe uma thread para executar um instrução no estágio de
decodificação, o estágio fetch tambem seleciona a mesma instrução para acessar a cache. A lógica de seleção de
threads utiliza informações de vários estágios de pipeline para decidir quando selecionar ou deselecionar uma thread.
Por exemplo, o estágio thread-select pode determinar o tipo da instrução utilizando um bit pré-decodificado na cache
de instrução, enquanto algumas traps somente podem ser detectadas em estágios mais avançados do pipeline.
Consequentemente, um tipo de instrução pode causar a deseleção de uma thread no estágio thread-select, enquanto
uma trap detectada no estágio memory necessita limpar todas as próximas instruções de uma thread e deselecionar
ela mesma duranto o processamento da trap.
Política de Seleção de Thread
A política de seleção de thread consiste em intercalar as threads disponíveis a cada ciclo, dando prioridade para a
thread menos recentemente usada. As threads podem ficar insdiponíveis por causa de instruções de latência longa
como loads, branches, multiplicação e divisão. Elas tambem ficam indisponíveis por causa de stall no pipeline
causados por cache misses, traps e concorrência por recursos.
O escalonador de threads assume que todos os load são cache hit and que, consequentemente, provêem um instrução
dependente para a execução na mesma thread de maneira especulativa. Entretanto, essa thread especulativa é
atribuída com uma prioridade menor na hora de apresentar uma nova instrução comparado com uma outra thread que
pode prover uma instrução não-especulativa.
Limitações
A arquitetura Niagara também apresenta as suas limitações, por isso a Sun já lançou o Niagara II e está em
desenvolvendo o projeto Rock [1] com o objetivo de melhorar aida mais o desempenho dessa arquitetura. A primeira
limitação é a integração da E/S dentro do processador, que impôs um throughput máximo. A seguir estão os
númerod do Niagara:
•• PCIe throughput = 2.0 GB/second
•• 10Gb Ethernet throughput = 1.25 GB/sec
O Throughput total do Niagara para E/S é igual a 2.0 mais 1.25, que totaliza 3.25 GB/sec. Enquanto isso os seus
concorrentes, IBM e HP, possuem um throughput máximo de 20 GB/s e 8.5 GB/s respectivamente.
Além disso, o Niagara, como já foi dito anteriormente, foi otimizado para aplicações que utilizam multithread e para
outros tipos de aplicações ele não adequado. Um outra limitação é que o Niagara possui somente uma unidade de
ponto flutuante para todos os cores. Assim, uma aplicação que possui muitas instruções que demandam essa unidade,
fazem com que a mesma se torne um gargalo. Por último, o Niagara apresenta somente sistemas com um
processador, limitando os ambientes empresariais a uma escalabilidade vertical.
Obviamente, que as limitações apresentadas dependem muito da carga de trabalho utilizada. Para sistemas
comerciais multithread e com baixa E/S, o Niagara fica muito além dos seus concorrentes. No entanto, ele não
atende aos outros tipos de aplicação.
Arquitetura Sun Niagara e Niagara II 22
Niagara 2
A segunda versão do Niagara possui uma série de aprimoramentos com o objetivo de diminuir as limitações
apresentadas anteriormente. As suas principais melhorias são:
•• o Sparc pipe foi modificado e agora consegue processar duas threads simultaneamente, o que totalizam 64 threads
de hardware;
•• possui 2 portas de 10Gbits incorporadas, o novo modelo permite acesso rápido e fácil comunicação entre os
servidores;
•• foram adicionadas oito unidades de aceleração criptográfica e um total de 10 funções independentes mapeiam
todas as necessidades de segurança, sem comprometer o desempenho do equipamento;
•• oito unidades de pontos flutuantes, uma unidade por core, maximizam os benefícios do CMT(Chip Multi Thread)
para computação de alta performance;
•• agora são oito vias de aplicações rápidas PCI Express como mídia streaming, escrita e leitura de banco de dados e
backup de informações;
•• o clock aumenteou de 1.4 GHz para 1.2 GHz;
•• a cache L2 aumentou de 3 para 4 MB;
•• o escalonamento de thread e o prefetching de instrução foram melhorados atingindo um desepenho melhor na
execução das threads;
•• utilização duas ALUs por core
•• quatro controladores de memória dual-channel FBDIMM;
•• feito utilizando o processo de 65nm.
Aplicações
A arquitetura Niagara é considerada ecológica por possuir um baixo consumo de energia em comparação com as
outras arquiteturas. Além disso, muitas empresas estão de olho nela, pois o custos por watt e de ar condicionado
estão cada vez maiores. Dado que o Niagara possui um ótimo desempenho como servidor Web e o número de
usuários de internet cresce cerca de 300 milhões ao ano, qualquer Watt econimizado em uma arquitetura de servidor
faz uma enorme diferença.
Para desenvolver aplicações para arquiteturas chip multithreads (CMT) várias bibliotecas podem ser utilizadas. A
Sun disponibilizou o documento Improving Application Efficiency Through Chip Multi-Threading [2]. Nele são
apresentadas as técnicas, bibliotecas e diretrizes para programar nesse tipo de arquitetura.
Podem ser utilizados Pthreads ou Solaris threads (disponível somente no sistema operacional Solaris). Além das
interface comum para threads como a utilização de mutexes, semaphores e outros, a Solaris apresenta algumas
opções interessantes. Dentre essas opções estão Scheduler Activation, que permite a thread comunicar com o
escalonados do sistema operacional; Rechoose Interval, que permite transferir as threads de um core para outro;
Memory Placement Optimization, que permite que garantir que os dados relacionados a uma thread estarão no core
mais próximo que ela se encontra. As threads para esse tipo de arquitetura são as mesmas com quais todos estão
acostumados a programar nos processadores single core. Assim, qualquer aplicação desenvolvida em pthreads, por
exemplo, para um single core funciona em um processador CMT. As aplicações típicas, como já foi dito, para esse
tipo de arquitetura são as aplicações de banco de dados, servidores web e roteadores.
Até o momento, somente o sistema operacional solaris suporta a arquitetura do Niagara. No entanto, existem
esforços para o Ubuntu [3] suportar o Niagara.
Arquitetura Sun Niagara e Niagara II 23
Futuro
A Sun já iniciou o desenvolvimento do Niagara 3. Ainda não existem muitas informações sobre o projeto, mas a
tendência de aumentar o número de cores, threads e largura de banda continuará. Outro projeto da família do Sparc
que está desenvolvimento é o Rock. [1]. A ideia é que o Rock seja escalável e utilizado em servidores para
aplicalções high-end. A primeira versão dele possui 16 cores e duas threads por core.
Sun ULTRASparc T1 e T2
Os Sun ULTRASparc T1 [4] e T2 [5] são codinomes comerciais para a arquitetura do Niagara. A arquitetura Niagara
somente é comercializadaatravés deles, em um pacote completo, que contém o gabinete da Sun, disco, placa mãe e
memória principal.
As especificações deles podem ser encontradas em:
• ULTRASparc T1 [6]
• ULTRASparc T2 [7]
Referências
[1] http:/ / en. wikipedia. org/ wiki/ Rock_processor
[2] http:/ / developers. sun. com/ solaris/ articles/ chip_multi_thread. html#2
[3] http:/ / www. ubuntu. com
[4] http:/ / en. wikipedia. org/ wiki/ UltraSPARC_T1
[5] http:/ / en. wikipedia. org/ wiki/ UltraSPARC_T2
[6] http:/ / www. sun. com/ processors/ UltraSPARC-T1/ specs. xml
[7] http:/ / www. sun. com/ processors/ UltraSPARC-T2/ specs. xml
• Niagara: A 32-Way Multithreaded Sparc Processor. (http:/ / ogun. stanford. edu/ ~kunle/ publications/
niagra_micro. pdf)
• A Power-Efficient High-Throughput 32-Thread SPARC Processor. (http:/ / www. opensparc. net/ pubs/ papers/
D05_01Aut2. pdf)
• The UltraSPARC T1 Processor - High Bandwidth For Throughput Computing. (http:/ / www. sun. com/
processors/ whitepapers/ UST1_bw_v1. 0. pdf)
• UltraSPARC Architecture 2005. (http:/ / opensparc-t1. sunsource. net/ specs/ UA2005-current-draft-P-EXT. pdf)
Programação em Pthreads 24
Programação em Pthreads
Introdução
Nesse capítulo serão discutidos alguns pontos fundamentais para se entender a programação em Pthreads, passando
pelas motivações, por definições e explicações de conceitos básicos e finalmente dando a diretiva inicial para o
assunto abordado, ou seja, a iniciação na programação paralela em Pthreads.
Necessidade de processamento massivo: o que acarreta?
As necessidades de processamento massivo nos dias de hoje são muitas: cálculos matemáticos, empíricos,
processamento de enormes quantidades de dados, números, arquivos, simulações de fenômenos naturais, aplicações
gráficas cada vez mais requintadas, aplicações médicas, químicas e científicas em geral. Enfim, há uma infinitude de
áreas que demandam a resolução de problemas cada vez mais complexos, com o envolvimento de uma enorme
quantidade de operações, instruções e dados, e cada vez mais são necessários computadores e formas de
processamento mais rápidas do que as atuais para tais aplicações.
Necessidade de paralelismo
Vários fatores explicam a necessidade do processamento paralelo. O principal deles trata da busca por maior
desempenho. As diversas áreas nas quais a computação se aplica, sejam científicas, industriais ou militares,
requerem cada vez mais poder computacional, em virtude dos algoritmos complexos que são utilizados e do tamanho
do conjunto de dados a ser processado.
Além disso, várias aplicações são inerentemente paralelas, e perde-se desempenho pela necessidade de torná-las
seqüenciais. O chamado "gargalo de von Neumann", segundo Almasi, tem diminuído a produtividade do
programador, daí a necessidade de novas maneiras de organização do processamento computacional.
Contudo, substituir uma filosofia computacional já firmemente estabelecida pelas várias décadas de existência da
computação, como é a filosofia de von Neumann, é algo que representa um obstáculo de dimensões muito grandes, e
que de certa maneira dificulta a difusão da computação paralela.
Necessidade de compartilhamento fácil de memória
A necessidade de processamento massivo e de paralelismo leva a uma outra questão, relativa ao compartilhamento
de memória em sistemas paralelos. Como os diversos processadores utilizam uma mesma memória física, tal tarefa
não é trivial e, em geral, limita a escalabilidade do sistema.
Neles, a comunicação é realizada em hardware mediante a troca de mensagens. Isso fica bem claro no nível da
aplicação quando o modelo de programação é orientado segundo essa lógica. Porém, embora tal linha de
comunicação seja bastante natural, ela pode certamente se mostrar extremamente complicadas em diversas situações,
como aquelas nas quais os padrões de interação e compartilhamento de dados são mais complexos e possuem escalas
maiores. Além disso, tal lógica exige um maior nível de treinamento por parte dos programadores, o quem nem
sempre acontece.
De fato, quando passamos para a dimensão do software paralelo, temos dois paradigmas clássicos de programação
paralela nesse sentido: o da troca de mensagens, mencionado anteriormente, e o compartilhamento de memória.
A programação no paradigma de memória compartilhada é considerada mais simples, pois evita que o programador
tenha que se preocupar com a comunicação entre processos, através da troca explícita de mensagens. Para realizar
comunicação, um processo apenas escreve dados na memória para serem lidos por todos os outros. Para
sincronização, seções críticas podem ser usadas, com a utilização de semáforos ou monitores para garantir exclusão
mútua.
Programação em Pthreads 25
No paradigma de troca de mensagens a comunicação é realizada através de primitivas que explicitamente controlam
o deslocamento dos dados. Troca de mensagens apresenta várias dificuldades, entre elas controle de fluxo,
mensagens perdidas, controle do buffer (buffering) e bloqueio (blocking). Embora várias soluções tenham sido
propostas, programação com troca de mensagens permanece complicada.[1]
Em resumo, os multicomputadores são simples de construir, mas difíceis de programar, enquanto os
multiprocessadores são difíceis de construir mais simples de programar.[2] Além disso, com a grande demanda por
sistemas paralelos com capacidade de suportar grandes volumes de dados, torna-se evidente a necessidade de
maneiras de tornar essa tarefa o mais simples possível para o programador.
O que são threads?
Um thread, algumas vezes chamada um processo peso leve, é um fluxo seqüencial de controle dentro de um
programa. Basicamente, consiste em uma unidade básica de utilização da CPU, compreendendo um ID, um contador
de programa, um conjunto de registradores e uma pilha. Um processo tradicional tem um único thread de controle.
Se o processo possui múltiplos threads de controle, ele pode realizar mais do que uma tarefa a cada momento. Essa
possibilidade abre portas para um novo modelo de programação.
Threads são diferentes de processos nos seguintes pontos[3]: Um processo é criado pelo sistema operacional como
um conjunto de recursos físicos e lógicos para executar um programa. Um processo inclui:
•• Memória de heap, estática e de código;
•• Registradores para lidar com a execução do código;
•• Uma pilha;
•• Informação do ambiente, incluindo um diretório de trabalho e descritores de arquivos;
•• IDs de processos, de grupos e de usuários;
•• Ferramentas de comunicação entre processos e bibliotecas compartilhadas.
Uma thread é o estado de execução de uma instância do programa, chamada algumas vezes de fluxo independente de
controle. A thread é uma entidade escalonável. Ela tem propriedades que permitem que ela execute
independentemente:
•• Registradores para lidar com a execução do código;
•• Uma pilha;
•• Propriedades de escalonamento (como prioridade);
•• Seu próprio conjunto de sinais;
•• Algumas informações específicas de threads.
Definições
Introduzem-se aqui termos e conceitos utilizados na programação multi-threaded.
• Escalonamento: normalmente feito pelo sistema operacional, ele determina quais threads executam em
determinado momento.
• Sincronização: quando um programa pára em um ponto, esperando que determinadas threads terminem seu
trabalho, diz-se que houve a sincronização entre as threads.
• Granularidade: é o tamanho do trabalho atribuído a cada thread antes que elas se sincronizem. Um programa que
seja dividido em partes pequenas entre as threads tem granularidade fina; um programa que faz com que suas
threads tenham muito trabalho antes de se sincronizarem tem granularidade grossa.
• Zona crítica: uma parte do código que tem comportamento indeterminado caso seja executada por mais de uma
thread ao mesmo tempo é chamada de zona crítica.
Um exemplo é quando duas threads tentam realizar,

Outros materiais