Você está na página 1de 731

Arquitetura de Computadores:

Uma Abordagem Quantitativa


Quinta Edio
David A. Patterson
John L. Hennessy

ARQU TETURA DE
COMPUTADORES
UMA ABORDAGEM QUANTITATIVA
Tradugao da sa Edigao

Tradugao: Eduardo Kraslcluk


Revisao Tecnica: Ricardo Pannain

(2
ELSEVIER CAMPUS
Do original: Computer Architecture: A Quantitative Approach
Traduo autorizada do idioma ingls da edio publicada por Morgan Kaufmann,
an imprint of Elsevier, Inc.
Copyright 2012 Elsevier Inc.
2014, Elsevier Editora Ltda.
Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998.
Nenhuma parte deste livro, sem autorizao prvia por escrito da editora, poder ser re-
produzida ou transmitida sejam quais forem os meios empregados: eletrnicos, mecnicos,
fotogrficos, gravao ou quaisquer outros.
Copidesque: Andra Vidal
Reviso Grfica: Adriana Maria Patrcio Takaki / Marco Antonio Corra / Roberto Mauro
dos Santos Facce:
Editorao Eletrnica: Thomson Digital
Elsevier Editora Ltda.
Conhecimento sem Fronteiras
Rua Sete de Setembro, 111 16o andar
20050-006 Centro - Rio de Janeiro RJ - Brasil
Rua Quintana, 753/8o andar
04569-011 Brooklin - So Paulo - SP - Brasil
Servio de Atendimento ao Cliente
O800-0265340
Atendimento1@elsevier.com
ISBN: 978-85-352-6122-6
ISBN (verso digital): 978-85-352-6411-1
Edio original: ISBN 978-0-12-383872-8
Nota: Muito zelo e tcnica foram empregados na edio desta obra. No entanto, podem
ocorrer erros de digitao, impresso ou dvida conceitual. Em qualquer das hipteses,
solicitamos a comunicao ao nosso Servio de Atendimento ao Cliente, para que pos-
samos esclarecer ou encaminhar a questo.
Nem a editora nem o autor assumem qualquer responsabilidade por eventuais danos
ou perdas a pessoas ou bens, ou bens, originados do uso desta publicao.

CIP-BRASIL. CATALOGAO NA PUBLICAO


SINDICATO NACIONAL DOS EDITORES DE LIVROS, RJ

H436a
Hennessy, John L.
Arquitetura de computadores : uma abordagem quantitativa / John L. Hennessy,
David A. Petterson ; traduo Eduardo Kraszczuk. - [5. ed.] - Rio de Janeiro : Elsevier,
2014.
744 p. : il. ; 28 cm.
Traduo de: Computer architecture, 5th ed. : a quantitative approach
Inclui apndice
ISBN 978-85-352-6122-6
1. Arquitetura de computador. I. Patterson, David A. II. Ttulo.
13-05666 CDD: 004.22
CDU: 004.2
Sobre os Autores

John L. Hennessy o dcimo presidente da Universidade de Stanford, onde membro


do corpo docente desde 1977, nos departamentos de Engenharia Eltrica e Cincia da
Computao. Hennessy membro do IEEE e ACM, membro da Academia Nacional de
Engenharia e da Sociedade Americana de Filosofia e membro da Academia Americana
de Artes e Cincias. Entre seus muitos prmios esto o Prmio Eckert-Mauchly de 2001,
por suas contribuies para a tecnologia RISC, o Prmio Seymour Cray de Engenharia da
Computao de 2001 e o Prmio John von Neumann de 2000, que ele dividiu com David
Patterson. Ele tambm recebeu sete doutorados honorrios.
Em 1981, ele iniciou o Projeto MIPS, em Stanford, com um grupo de estudantes de
ps-graduao. Depois de completar o projeto em 1984, tirou licena da universidade
para co-fundar a MIPS Computer Systems (hoje MIPS Technologies), que desenvolveu
um dos primeiros microprocessadores RISC comerciais. Em 2006, mais de 2 bilhes de
microprocessadores MIPS foram vendidos em dispositivos, variando de video games e
computadores palmtop a impressoras laser e switches de rede. Em seguida, Hennessy
liderou o projeto DASH (Director Architeture for Shared Memory Arquitetura Diretora
para Memria Compartilhada), que criou o prottipo do primeiro microprocessador
com cache coerente escalvel. Muitas das ideias-chave desse projeto foram adotadas em
multiprocessadores modernos. Alm de suas atividades tcnicas e responsabilidades na
universidade, ele continuou a trabalhar com diversas empresas startup como conselheiro
nos estgios iniciais e como investidor.
David A. Patterson ensina arquitetura de computadores na Universidade da Califrnia,
em Berkeley, desde que se juntou ao corpo docente em 1977, onde ele ocupa a Cadeira
Pardee de Cincia da Computao. Sua docncia foi honrada com o Prmio de Ensino
Notvel da Universidade da Califrnia, o Prmio Karlstrom da ACM, a Medalha Mulligan
de Educao e o Prmio de Ensino Universitrio do IEEE. Patterson recebeu o Prmio de
Realizao Tcnica do IEEE e o Prmio Eckert-Mauchly por contribuies para o RISC e
dividiu o Prmio Johnson de Armazenamento de Informaes por contribuies para o
RAID. Ele tambm dividiu a Medalha John von Neumann do IEEE e o Prmio C&C com
John Hennessy. Como seu coautor, Patterson membro da Academia Americana de Artes
e Cincias, do Museu da Histria dos Computadores, ACM e IEEE, e foi eleito para a Aca-
demia Nacional de Engenharia, Academia Nacional de Cincias e para o Hall da Fama da
Engenharia do Vale do Silcio. Ele atuou no Comit Consultivo de Tecnologia da Informa-
o do presidente dos Estados Unidos, como presidente da diviso de CS no departamento
EECS em Berkeley, como presidente da Associao de Pesquisa em Computao e como
Presidente da ACM. Este histrico levou a prmios de Servio Destacado da ACM e CRA.
Em Berkeley, Patterson liderou o projeto e a implementao do RISC I, provavelmente o
primeiro computador com conjunto reduzido de instrues VLSI, e a fundao da arqui-
tetura comercial SPARC. Ele foi lder do projeto Arrays Redundantes de Discos Baratos
(Redundant Array of Inexpensive Disks RAID), que levou a sistemas de armazenamento v
vi Sobre os Autores

confiveis para muitas empresas. Ele tambm se envolveu no projeto Rede de Works-
tations (Network of Workstations NOW), que levou tecnologia de clusters usada
pelas empresas de Internet e, mais tarde, computao em nuvem. Esses projetos valeram
trs prmios de dissertao da ACM. Seus projetos de pesquisa atuais so o Laboratrio
Algoritmo-Mquina-Pessoas e o Laboratrio de Computao Paralela, onde ele o diretor.
O objetivo do Laboratrio AMP desenvolver algoritmos de aprendizado de mquina es-
calveis, modelos de programao amigveis para computadores em escala de depsito e
ferramentas de crowd-sourcing para obter rapidamente insights valiosos de muitos dados
na nuvem. O objetivo do laboratrio Par desenvolver tecnologias para entregar softwares
escalveis, portveis, eficientes e produtivos para dispositivos pessoais mveis paralelos.
Para Andrea, Linda, e nossos quatro filhos
Elogios para Arquitetura de Computadores: Uma Abordagem Quantitativa
Quinta Edio

A 5a edio de Arquitetura de Computadores: Uma Abordagem Quantitativa continua o


legado, fornecendo aos estudantes de arquitetura de computadores as informaes mais
atualizadas sobre as plataformas computacionais atuais e insights arquitetnicos para ajud-
los a projetar sistemas futuros. Um destaque da nova edio o captulo significativamente
revisado sobre paralelismo em nvel de dados, que desmistifica as arquiteturas de GPU
com explicaes claras, usando terminologia tradicional de arquitetura de computadores.

Krste Asanovic, Universidade da Califrnia, Berkeley

Arquitetura de Computadores: Uma Abordagem Quantitativa um clssico que, como


um bom vinho, fica cada vez melhor. Eu comprei meu primeiro exemplar quando estava
terminando a graduao e ele continua sendo um dos volumes que eu consulto com mais
frequncia. Quando a quarta edio saiu, havia tanto contedo novo que eu precisava
compr-la para continuar atualizado. E, enquanto eu revisava a quinta edio, percebi que
Hennessy e Patterson tiveram sucesso de novo. Todo o contedo foi bastante atualizado
e s o Captulo 6 j torna esta nova edio uma leitura necessria para aqueles que realmente
querem entender a computao em nuvem e em escala de depsito. Somente Hennessy
e Patterson tm acesso ao pessoal do Google, Amazon, Microsoft e outros provedores de
computao em nuvem e de aplicaes em escala de Internet, e no existe melhor cobertura
dessa importante rea em outro lugar da indstria.

James Hamilton, Amazon Web Services

Hennessy e Patterson escreveram a primeira edio deste livro quando os estudantes de


ps-graduao construam computadores com 50.000 transistores. Hoje, computadores
em escala de depsito contm esse mesmo nmero de servidores, cada qual consistindo
de dzias de processadores independentes e bilhes de transistores. A evoluo
da arquitetura de computadores tem sido rpida e incansvel, mas Arquitetura de
Computadores: Uma Abordagem Quantitativa acompanhou o processo com cada edio
explicando e analisando com preciso as importantes novas ideias que tornam esse
campo to excitante.

James Larus, Microsoft Research

Esta nova adio adiciona um soberbo novo captulo sobre paralelismo em nvel de dados em
SIMD de vetor e arquiteturas de GPU. Ele explica conceitos-chave de arquitetura no interior
das GPUs de mercado de massa, mapeando-os para termos tradicionais e comparando-os
com arquiteturas de vetor e SIMD. Ele chega no momento certo e relevante mudana
generalizada para a computao por GPU paralela. Arquitetura de Computadores: Uma
Abordagem Quantitativa continua sendo o primeiro a apresentar uma cobertura completa
da arquitetura de importantes novos desenvolvimentos!

John Nickolls, NVIDIA

A nova edio deste livro hoje um clssico destaca a ascendncia do paralelismo


explcito (dados, thread, requisio) dedicando um captulo inteiro a cada tipo. O captulo
sobre paralelismo de dados particularmente esclarecedor: a comparao e o contraste
entre SIMD de vetor, SIMD em nvel de instruo e GPU ultrapassam o jargo associado a
cada arquitetura e expem as similaridades e diferenas entre elas.

Kunle Olukotun, Universidade de Stanford

A 5a edio de Arquitetura de Computadores: Uma Abordagem Quantitativa explora


os diversos conceitos paralelos e seus respectivos trade-offs. Assim como as edies
anteriores, esta nova edio cobre as mais recentes tendncias tecnolgicas. Um destaque
o grande crescimento dos dispositivos pessoais mveis (Personal Mobile Devices PMD) e
da computao em escala de depsito (Warehouse-Scale Computing WSC), cujo foco
mudou para um equilbrio mais sofisticado entre desempenho e eficincia energtica em
comparao com o desempenho bruto. Essas tendncias esto alimentando nossa demanda
por mais capacidade de processamento, que, por sua vez, est nos levando mais longe no
caminho paralelo.

Andrew N. Sloss, Engenheiro consultor, ARM


Autor de ARM System Developer's Guide
Agradecimentos

Embora este livro ainda esteja na quinta edio, criamos dez verses diferentes do
contedo: trs verses da primeira edio (alfa, beta e final) e duas verses da segunda,
da terceira e da quarta edies (beta e final). Nesse percurso, recebemos a ajuda de
centenas de revisores e usurios. Cada um deles ajudou a tornar este livro melhor. Por
isso, decidimos fazer uma lista de todas as pessoas que colaboraram em alguma verso
deste livro.

COLABORADORES DA QUINTA EDIO


Assim como nas edies anteriores, este um esforo comunitrio que envolve diversos
voluntrios. Sem a ajuda deles, esta edio no estaria to bem acabada.

Revisores
Jason D. Bakos, University of South Carolina; Diana Franklin, The University of California,
Santa Barbara; Norman P. Jouppi, HP Labs; Gregory Peterson, University of Tennessee;
Parthasarathy Ranganathan, HP Labs; Mark Smotherman, Clemson University; Gurindar
Sohi, University of WisconsinMadison; Mateo Valero, Universidad Politcnica de Cata-
lua; Sotirios G. Ziavras, New Jersey Institute of Technology.
Membros do Laboratrio Par e Laboratrio RAD da University of CaliforniaBerkeley, que
fizeram frequentes revises dos Captulos1,4 e6, moldando a explicao sobre GPUs
e WSCs: Krste Asanovic, Michael Armbrust, Scott Beamer, Sarah Bird, Bryan Catanzaro,
Jike Chong, Henry Cook, Derrick Coetzee, Randy Katz, Yun-sup Lee, Leo Meyervich, Mark
Murphy, Zhangxi Tan, Vasily Volkov e Andrew Waterman.

Painel consultivo
Luiz Andr Barroso, Google Inc.; Robert P. Colwell, R&E Colwell & Assoc. Inc.; Krisztian
Flautner, VP de R&D na ARM Ltd.; Mary Jane Irwin, Penn State; David Kirk, NVIDIA; Grant
Martin, cientista-chefe, Tensilica; Gurindar Sohi, University of WisconsinMadison; Mateo
Valero, Universidad Politcnica de Catalua.

Apndices
Krste Asanovic, University of CaliforniaBerkeley (Apndice G); Thomas M. Conte, North
Carolina State University (Apndice E); Jos Duato, Universitat Politcnica de Valncia and
Simula (Apndice F); David Goldberg, Xerox PARC (Apndice J); Timothy M. Pinkston,
University of Southern California (Apndice F).
Jos Flich, da Universidad Politcnica de Valencia, deu contribuies significativas para a
atualizao do Apndice F.

xi
xii Agradecimentos

Estudos de caso e exerccios


Jason D. Bakos, University of South Carolina (Captulos3 e4); Diana Franklin, University
of California, Santa Barbara (Captulo1 e Apndice C); Norman P. Jouppi, HP Labs
(Captulo2); Naveen Muralimanohar, HP Labs (Captulo2); Gregory Peterson, University
of Tennessee (Apndice A); Parthasarathy Ranganathan, HP Labs (Captulo6); Amr Zaky,
University of Santa Clara (Captulo5 e Apndice B).
Jichuan Chang, Kevin Lim e Justin Meza auxiliaram no desenvolvimento de testes dos
estudos de caso e exerccios do Captulo6.

Material adicional
John Nickolls, Steve Keckler e Michael Toksvig da NVIDIA (Captulo4, NVIDIA GPUs);
Victor Lee, Intel (Captulo4, comparao do Core i7 e GPU); John Shalf, LBNL (Captulo4,
arquiteturas recentes de vetor); Sam Williams, LBNL (modelo roofline para computadores
no Captulo4); Steve Blackburn, da Australian National University, e Kathryn McKinley,
da University of Texas, em Austin (Desempenho e medies de energia da Intel, no
Captulo5); Luiz Barroso, Urs Hlzle, Jimmy Clidaris, Bob Felderman e Chris Johnson
do Google (Google WSC, no Captulo6); James Hamilton, da Amazon Web Services (Dis-
tribuio de energia e modelo de custos, no Captulo6).
Jason D. Bakos. da University of South Carolina, desenvolveu os novos slides de aula para
esta edio.
Mais uma vez, nosso agradecimento especial a Mark Smotherman, da Clemson University,
que fez a leitura tcnica final do nosso manuscrito. Mark encontrou diversos erros e
ambiguidades, e, em consequncia disso, o livro ficou muito mais limpo.
Este livro no poderia ter sido publicado sem uma editora, claro. Queremos agradecer
a toda a equipe da Morgan Kaufmann/Elsevier por seus esforos e suporte. Pelo trabalho
nesta edio, particularmente, queremos agradecer aos nossos editores Nate McFadden e
Todd Green, que coordenaram o painel consultivo, o desenvolvimento dos estudos de caso
e exerccios, os grupos de foco, as revises dos manuscritos e a atualizao dos apndices.
Tambm temos de agradecer nossa equipe na universidade, Margaret Rowland e Roxana
Infante, pelas inmeras correspondncias enviadas e pela guarda do forte em Stanford
e Berkeley enquanto trabalhvamos no livro.
Nosso agradecimento final vai para nossas esposas, pelo sofrimento causado pelas leituras,
trocas de ideias e escrita realizadas cada vez mais cedo todos os dias.

COLABORADORES DAS EDIES ANTERIORES


Revisores
George Adams, Purdue University; Sarita Adve, University of Illinois, UrbanaChampaign; Jim
Archibald, Brigham Young University; Krste Asanovic, Massachusetts Institute of Technology;
Jean-Loup Baer, University of Washington; Paul Barr, Northeastern University; Rajendra V.
Boppana, University of Texas, San Antonio; Mark Brehob, University of Michigan; Doug
Burger, University of Texas, Austin; John Burger, SGI; Michael Butler; Thomas Casavant; Rohit
Chandra; Peter Chen, University of Michigan; as turmas de SUNY Stony Brook, Carnegie
Mellon, Stanford, Clemson e Wisconsin; Tim Coe, Vitesse Semiconductor; Robert P. Colwell;
David Cummings; Bill Dally; David Douglas; Jos Duato, Universitat Politcnica de Valncia
and Simula; Anthony Duben, Southeast Missouri State University; Susan Eggers, University of
Washington; Joel Emer; Barry Fagin, Dartmouth; Joel Ferguson, University of California, Santa
Agradecimentos xiii

Cruz; Carl Feynman; David Filo; Josh Fisher, Hewlett-Packard Laboratories; Rob Fowler, DIKU;
Mark Franklin, Washington University (St. Louis); Kourosh Gharachorloo; Nikolas Gloy,
Harvard University; David Goldberg, Xerox Palo Alto Research Center; Antonio Gonzlez,
Intel and Universitat Politcnica de Catalunya; James Goodman, University of Wisconsin
Madison; Sudhanva Gurumurthi, University of Virginia; David Harris, Harvey Mudd College;
John Heinlein; Mark Heinrich, Stanford; Daniel Helman, University of California, Santa
Cruz; Mark D. Hill, University of WisconsinMadison; Martin Hopkins, IBM; Jerry Huck,
Hewlett-Packard Laboratories; Wen-mei Hwu, University of Illinois at UrbanaChampaign;
Mary Jane Irwin, Pennsylvania State University; Truman Joe; Norm Jouppi; David Kaeli,
Northeastern University; Roger Kieckhafer, University of Nebraska; Lev G. Kirischian, Ryerson
University; Earl Killian; Allan Knies, Purdue University; Don Knuth; Jeff Kuskin, Stanford;
James R. Larus, Microsoft Research; Corinna Lee, University of Toronto; Hank Levy; Kai Li,
Princeton University; Lori Liebrock, University of Alaska, Fairbanks; Mikko Lipasti, University
of WisconsinMadison; Gyula A. Mago, University of North Carolina, Chapel Hill; Bryan
Martin; Norman Matloff; David Meyer; William Michalson, Worcester Polytechnic Institute;
James Mooney; Trevor Mudge, University of Michigan; Ramadass Nagarajan, University
of Texas at Austin; David Nagle, Carnegie Mellon University; Todd Narter; Victor Nelson;
Vojin Oklobdzija, University of California, Berkeley; Kunle Olukotun, Stanford University;
Bob Owens, Pennsylvania State University; Greg Papadapoulous, Sun Microsystems; Joseph
Pfeiffer; Keshav Pingali, Cornell University; Timothy M. Pinkston, University of Southern
California; Bruno Preiss, University of Waterloo; Steven Przybylski; Jim Quinlan; Andras
Radics; Kishore Ramachandran, Georgia Institute of Technology; Joseph Rameh, University
of Texas, Austin; Anthony Reeves, Cornell University; Richard Reid, Michigan State University;
Steve Reinhardt, University of Michigan; David Rennels, University of California, Los Angeles;
Arnold L. Rosenberg, University of Massachusetts, Amherst; Kaushik Roy, Purdue University;
Emilio Salgueiro, Unysis; Karthikeyan Sankaralingam, University of Texas at Austin; Peter
Schnorf; Margo Seltzer; Behrooz Shirazi, Southern Methodist University; Daniel Siewiorek,
Carnegie Mellon University; J. P. Singh, Princeton; Ashok Singhal; Jim Smith, University
of WisconsinMadison; Mike Smith, Harvard University; Mark Smotherman, Clemson
University; Gurindar Sohi, University of WisconsinMadison; Arun Somani, University of
Washington; Gene Tagliarin, Clemson University; Shyamkumar Thoziyoor, University of
Notre Dame; Evan Tick, University of Oregon; Akhilesh Tyagi, University of North Carolina,
Chapel Hill; Dan Upton, University of Virginia; Mateo Valero, Universidad Politcnica de
Catalua, Barcelona; Anujan Varma, University of California, Santa Cruz; Thorsten von
Eicken, Cornell University; Hank Walker, Texas A&M; Roy Want, Xerox Palo Alto Research
Center; David Weaver, Sun Microsystems; Shlomo Weiss, Tel Aviv University; David Wells;
Mike Westall, Clemson University; Maurice Wilkes; Eric Williams; Thomas Willis, Purdue
University; Malcolm Wing; Larry Wittie, SUNY Stony Brook; Ellen Witte Zegura, Georgia
Institute of Technology; Sotirios G. Ziavras, New Jersey Institute of Technology.

Apndices
O apndice sobre vetores foi revisado por Krste Asanovic, do Massachusetts Institute
of Technology. O apndice sobre ponto flutuante foi escrito originalmente por David
Goldberg, da Xerox PARC.

Exerccios
George Adams, Purdue University; Todd M. Bezenek, University of WisconsinMadison
(em memria de sua av, Ethel Eshom); Susan Eggers; Anoop Gupta; David Hayes; Mark
Hill; Allan Knies; Ethan L. Miller, University of California, Santa Cruz; Parthasarathy
Ranganathan, Compaq Western Research Laboratory; Brandon Schwartz, University of
xiv Agradecimentos

WisconsinMadison; Michael Scott; Dan Siewiorek; Mike Smith; Mark Smotherman; Evan
Tick; Thomas Willis

Estudos de caso e exerccios


Andrea C. Arpaci-Dusseau, University of WisconsinMadison; Remzi H. Arpaci Dusseau, Uni-
versity of WisconsinMadison; Robert P. Colwell, R&E Colwell & Assoc., Inc.; Diana Franklin,
California Polytechnic State University, San Luis Obispo; Wen-mei W. Hwu, University of
Illinois em UrbanaChampaign; Norman P. Jouppi, HP Labs; John W. Sias, University of
Illinois em UrbanaChampaign; David A. Wood, University of WisconsinMadison

Agradecimentos especiais
Duane Adams, Defense Advanced Research Projects Agency; Tom Adams; Sarita Adve,
University of Illinois, UrbanaChampaign; Anant Agarwal; Dave Albonesi, University
of Rochester; Mitch Alsup; Howard Alt; Dave Anderson; Peter Ashenden; David Bai-
ley; Bill Bandy, Defense Advanced Research Projects Agency; Luiz Barroso, Compaq's
Western Research Lab; Andy Bechtolsheim; C. Gordon Bell; Fred Berkowitz; John Best, IBM;
Dileep Bhandarkar; Jeff Bier, BDTI; Mark Birman; David Black; David Boggs; Jim Brady;
Forrest Brewer; Aaron Brown, University of California, Berkeley; E. Bugnion, Compaq's
Western Research Lab; Alper Buyuktosunoglu, University of Rochester; Mark Callaghan;
Jason F. Cantin; Paul Carrick; Chen-Chung Chang; Lei Chen, University of Rochester; Pete
Chen; Nhan Chu; Doug Clark, Princeton University; Bob Cmelik; John Crawford; Zarka
Cvetanovic; Mike Dahlin, University of Texas, Austin; Merrick Darley; the staff of the
DEC Western Research Laboratory; John DeRosa; Lloyd Dickman; J. Ding; Susan Eggers,
University of Washington; Wael El-Essawy, University of Rochester; Patty Enriquez, Mills;
Milos Ercegovac; Robert Garner; K. Gharachorloo, Compaq's Western Research Lab; Garth
Gibson; Ronald Greenberg; Ben Hao; John Henning, Compaq; Mark Hill, University of
WisconsinMadison; Danny Hillis; David Hodges; Urs Hlzle, Google; David Hough; Ed
Hudson; Chris Hughes, University of Illinois em UrbanaChampaign; Mark Johnson;
Lewis Jordan; Norm Jouppi; William Kahan; Randy Katz; Ed Kelly; Richard Kessler; Les
Kohn; John Kowaleski, Compaq Computer Corp; Dan Lambright; Gary Lauterbach,
Sun Microsystems; Corinna Lee; Ruby Lee; Don Lewine; Chao-Huang Lin; Paul Los-
leben, Defense Advanced Research Projects Agency; Yung-Hsiang Lu; Bob Lucas, Defense
Advanced Research Projects Agency; Ken Lutz; Alan Mainwaring, Intel Berkeley Research
Labs; Al Marston; Rich Martin, Rutgers; John Mashey; Luke McDowell; Sebastian Mirolo,
Trimedia Corporation; Ravi Murthy; Biswadeep Nag; Lisa Noordergraaf, Sun Microsystems;
Bob Parker, Defense Advanced Research Projects Agency; Vern Paxson, Center for Internet
Research; Lawrence Prince; Steven Przybylski; Mark Pullen, Defense Advanced Research
Projects Agency; Chris Rowen; Margaret Rowland; Greg Semeraro, University of Rochester;
Bill Shannon; Behrooz Shirazi; Robert Shomler; Jim Slager; Mark Smotherman, Clemson
University; o SMT research group, University of Washington; Steve Squires, Defense
Advanced Research Projects Agency; Ajay Sreekanth; Darren Staples; Charles Stapper; Jorge
Stolfi; Peter Stoll; os estudantes de Stanford e de Berkeley, que deram suporte s nossas
primeiras tentativas de escrever este livro; Bob Supnik; Steve Swanson; Paul Taysom;
Shreekant Thakkar; Alexander Thomasian, New Jersey Institute of Technology; John Toole,
Defense Advanced Research Projects Agency; Kees A. Vissers, Trimedia Corporation; Willa
Walker; David Weaver; Ric Wheeler, EMC; Maurice Wilkes; Richard Zimmerman.

John Hennessy, David Patterson


Introduo

Por Luiz Andr Barroso, Google Inc.


A primeira edio de Arquitetura de Computadores: Uma Abordagem Quantitativa, de
Hennessy e Patterson, foi lanada durante meu primeiro ano na universidade. Eu per-
teno, portanto, quela primeira leva de profissionais que aprenderam a disciplina usando
este livro como guia. Sendo a perspectiva um ingrediente fundamental para um prefcio
til, eu me encontro em desvantagem, dado o quanto dos meus prprios pontos de vista
foram coloridos pelas quatro edies anteriores deste livro. Outro obstculo para uma
perspectiva clara que a reverncia de estudante a esses dois superastros da Cincia da
Computao ainda no me abandonou, apesar de (ou talvez por causa de) eu ter tido
a chance de conhec-los nos anos seguintes. Essas desvantagens so mitigadas pelo fato
de eu ter exercido essa profisso continuamente desde a primeira edio deste livro, o que
me deu a chance de desfrutar sua evoluo e relevncia duradora.
A ltima edio veio apenas dois anos depois que a feroz corrida industrial por maior
frequncia de clock de CPU chegou oficialmente ao fim, com a Intel cancelando o de-
senvolvimento de seus ncleos nicos de 4GHz e abraando as CPUs multicore. Dois
anos foi tempo suficiente para John e Dave apresentarem essa histria no como uma
atualizao aleatria da linha de produto, mas como um ponto de inflexo definidor
da tecnologia da computao na ltima dcada. Aquela quarta edio teve nfase reduzida
no paralelismo em nvel de instruo (Instruction-Level Parallelism ILP) em favor de
um material adicional sobre paralelismo, algo em que a edio atual vai alm, dedicando
dois captulos ao paralelismo em nvel de thread e dados, enquanto limita a discusso
sobre ILP a um nico captulo. Os leitores que esto sendo apresentados aos novos engines
de processamento grfico vo se beneficiar especialmente do novo Captulo4, que se
concentra no paralelismo de dados, explicando as solues diferentes mas lentamente
convergentes oferecidas pelas extenses multimdia em processadores de uso geral e
unidades de processamento grfico cada vez mais programveis. De notvel relevncia
prtica: se voc j lutou com a terminologia CUDA, veja a Figura4.24 (teaser: a memria
compartilhada, na verdade, local, e a memria global se parece mais com o que voc
consideraria memria compartilhada).
Embora ainda estejamos no meio dessa mudana para a tecnologia multicore, esta edio
abarca o que parece ser a prxima grande mudana: computao em nuvem. Nesse caso,
a ubiquidade da conectividade Internet e a evoluo de servios Web atraentes esto
trazendo para o centro do palco dispositivos muito pequenos (smartphones, tablets) e
muito grandes (sistemas de computao em escala de depsito). O ARM Cortex A8, uma
CPU popular para smartphones, aparece na seo Juntando tudo do Captulo3, e um
Captulo6 totalmente novo dedicado ao paralelismo em nvel de requisio e dados
no contexto dos sistemas de computao em escala de depsito. Neste novo captulo,
John e Dave apresentam esses novos grandes clusters como uma nova classe distinta de
computadores um convite aberto para os arquitetos de computadores ajudarem a moldar xv
xvi Introduo

esse campo emergente. Os leitores vo apreciar o modo como essa rea evoluiu na ltima
dcada, comparando a arquitetura do cluster Google descrita na terceira edio com a
encanao mais moderna apresentada no Captulo6 desta verso.
Aqueles que esto retomando este livro vo poder apreciar novamente o trabalho de dois
destacados cientistas da computao que, ao longo de suas carreiras, aperfeioaram a
arte de combinar o tratamento das ideias com princpios acadmicos com uma profunda
compreenso dos produtos e tecnologias de ponta dessa indstria. O sucesso dos autores
nas interaes com a indstria no ser uma surpresa para aqueles que testemunharam
como Dave conduz seus retiros bianuais de projeto, foruns meticulosamente elaborados
para extrair o mximo das colaboraes acadmico-industriais. Aqueles que se lembram
do sucesso do empreendimento de John com o MIPS ou esbarraram com ele em um
corredor no Google (o que s vezes acontece comigo) tambm no vo se surpreender.
E talvez o mais importante: leitores novos e antigos vo obter aquilo por que pagaram.
O que fez deste livro um clssico duradouro foi o fato de que cada edio no uma
atualizao, mas uma extensa reviso que apresenta as informaes mais atuais e insights
incomparveis sobre esse campo fascinante e rapidamente mutvel. Para mim, depois
de vinte anos nessa profisso, ele tambm outra oportunidade de experimentar aquela
admirao de estudante por dois professores notveis.
Prefcio

Por que escrevemos este livro


Ao longo das cinco edies deste livro, nosso objetivo tem sido descrever os princpios
bsicos por detrs dos desenvolvimentos tecnolgicos futuros. Nosso entusiasmo com
relao s oportunidades em arquitetura de computadores no diminuiu, e repetimos o
que dissemos sobre essa rea na primeira edio: Essa no uma cincia melanclica de
mquinas de papel que nunca funcionaro. No! uma disciplina de interesse intelectual
incisivo, que exige o equilbrio entre as foras do mercado e o custo-desempenho-potncia,
levando a gloriosos fracassos e a alguns notveis sucessos.
O principal objetivo da escrita de nosso primeiro livro era mudar o modo como as pessoas
aprendiam e pensavam a respeito da arquitetura de computadores. Acreditamos que esse
objetivo ainda vlido e importante. Esse campo est mudando diariamente e precisa ser
estudado com exemplos e medidas reais sobre computadores reais, e no simplesmente
como uma coleo de definies e projetos que nunca precisaro ser compreendidos.
Damos boas-vindas entusiasmadas a todos os que nos acompanharam no passado e
tambm queles que esto se juntando a ns agora. De qualquer forma, prometemos o
mesmo enfoque quantitativo e a mesma anlise de sistemas reais.
Assim como nas verses anteriores, nos esforamos para elaborar uma nova edio que
continuasse a ser relevante tanto para os engenheiros e arquitetos profissionais quanto para
aqueles envolvidos em cursos avanados de arquitetura e projetos de computador. Assim
como os livros anteriores, esta edio visa desmistificar a arquitetura de computadores com
nfase nas escolhas de custo-benefcio-potncia e bom projeto de engenharia. Acreditamos
que o campo tenha continuado a amadurecer, seguindo para o alicerce quantitativo
rigoroso das disciplinas cientficas e de engenharia bem estabelecidas.

Esta edio
Declaramos que a quarta edio de Arquitetura de Computadores: Uma Abordagem Quantitativa
podia ser a mais significativa desde a primeira edio, devido mudana para chips
multicore. O feedback que recebemos dessa vez foi de que o livro havia perdido o foco
agudo da primeira edio, cobrindo tudo igualmente, mas sem nfase nem contexto.
Estamos bastante certos de que no se dir isso da quinta edio.
Ns acreditamos que a maior parte da agitao est nos extremos do tamanho da com-
putao, com os dispositivos pessoais mveis (Personal Mobile Devices PMDs), como
telefones celulares e tablets, como clientes e computadores em escala de depsito ofere-
cendo computao na nuvem como servidores. (Bons observadores devem ter notado
a dica sobre computao em nuvem na capa do livro.) Estamos impressionados com o
tema comum desses dois extremos em custo, desempenho e eficincia energtica, apesar
de sua diferena em tamanho. Como resultado, o contexto contnuo em cada captulo

xvii
xviii Prefcio

a computao para PMDs e para computadores em escala de depsito, e o Captulo6


totalmente novo com relao a esse tpico.
O outro tema o paralelismo em todas as suas formas. Primeiro identificamos os dois tipos
de paralelismo em nvel de aplicao no Captulo1, o paralelismo em nvel de dados (Data-Level
Parallelism DLP), que surge por existirem muitos itens de dados que podem ser operados
ao mesmo tempo, e o paralelismo em nvel de tarefa (Task-Level Parallelism TLP), que surge
porque so criadas tarefas que podem operar independentemente e, em grande parte, em
paralelo. Ento, explicamos os quatro estilos arquitetnicos que exploram DLP e TLP: paralelis-
mo em nvel de instruo (Instruction-Level Parallelism ILP) no Captulo3; arquiteturas de
vetor e unidades de processamento grfico (GPUs) no Captulo4, que foi escrito para esta edio;
paralelismo em nvel de thread no Captulo5; e paralelismo em nvel de requisio (Request-Level
Parallelism RLP), atravs de computadores em escala de depsito no Captulo6, que
tambm foi escrito para esta edio. Ns deslocamos a hierarquia de memria mais para o
incio do livro (Captulo2) e realocamos o captulo sobre sistemas de armazenamento no
Apndice D. Estamos particularmente orgulhosos do Captulo4, que contm a mais clara e
mais detalhada explicao j dada sobre GPUs, e do Captulo6, que a primeira publicao
dos detalhes mais recentes de um computador em escala de depsito do Google.
Como nas edies anteriores, os primeiros trs apndices do livro fornecem o conte-
do bsico sobre o conjunto de instrues MIPS, hierarquia de memria e pipelining
aos leitores que no leram livros como Computer Organization and Design. Para man-
ter os custos baixos e ainda assim fornecer material suplementar que seja do interesse
de alguns leitores, disponibilizamos mais nove apndices onlines em ingls na pgina
www.elsevier.com.br/hennessy. H mais pginas nesses apndices do que neste livro!
Esta edio d continuidade tradio de usar exemplos reais para demonstrar as ideias, e
as sees Juntando tudo so novas as desta edio incluem as organizaes de pipeline e
hierarquia de memria do processador ARM Cortex A8, o processador Intel Core i7, as GPUs
NVIDIA GTX-280 e GTX-480, alm de um dos computadores em escala de depsito do Google.

Seleo e organizao de tpicos


Como nas edies anteriores, usamos uma tcnica conservadora para selecionar os tpicos,
pois existem muito mais ideias interessantes em campo do que poderia ser abordado de
modo razovel em um tratamento de princpios bsicos. Ns nos afastamos de um es-
tudo abrangente de cada arquitetura, com que o leitor poderia se deparar por a. Nossa
apresentao enfoca os principais conceitos que podem ser encontrados em qualquer
mquina nova. O critrio principal continua sendo o da seleo de ideias que foram
examinadas e utilizadas com sucesso suficiente para permitir sua discusso em termos
quantitativos.
Nossa inteno sempre foi enfocar o material que no estava disponvel em formato
equivalente em outras fontes, por isso continuamos a enfatizar o contedo avanado
sempre que possvel. Na realidade, neste livro existem vrios sistemas cujas descries
no podem ser encontradas na literatura. (Os leitores interessados estritamente em uma
introduo mais bsica arquitetura de computadores devero ler Organizao e projeto
de computadores: a interface hardware/software.)

Viso geral do contedo


Nesta edio o Captulo1 foi aumentado: ele inclui frmulas para energia, potncia es-
ttica, potncia dinmica, custos de circuito integrado, confiabilidade e disponibilidade.
Esperamos que esses tpicos possam ser usados ao longo do livro. Alm dos princpios
Prefcio xix

quantitativos clssicos do projeto de computadores e medio de desempenho, a seo


PIAT foi atualizada para usar o novo benchmark SPECPower.
Nossa viso de que hoje a arquitetura do conjunto de instrues est desempenhando
um papel inferior ao de 1990, de modo que passamos esse material para o Apndice A. Ele
ainda usa a arquitetura MIPS64 (para uma rpida reviso, um breve resumo do ISA MIPS
pode ser encontrado no verso da contracapa). Para os fs de ISAs, o Apndice K aborda
10 arquiteturas RISC, o 80x86, o VAX da DEC e o 360/370da IBM.
Ento, prosseguimos com a hierarquia de memria no Captulo2, uma vez que fcil
aplicar os princpios de custo-desempenho-energia a esse material e que a memria
um recurso essencial para os demais captulos. Como na edio anterior, Apndice B
contm uma reviso introdutria dos princpios de cache, que est disponvel caso voc
precise dela. O Captulo2 discute 10 otimizaes avanadas dos caches. O captulo in-
clui mquinas virtuais, que oferecem vantagens em proteo, gerenciamento de software
e gerenciamento de hardware, e tem um papel importante na computao na nuvem.
Alm de abranger as tecnologias SRAM e DRAM, o captulo inclui material novo sobre a
memria Flash. Os exemplos PIAT so o ARM Cortex A8, que usado em PMDs, e o Intel
Core i7, usado em servidores.
O Captulo3 aborda a explorao do paralelismo em nvel de instruo nos processadores
de alto desempenho, incluindo execuo superescalar, previso de desvio, especulao,
escalonamento dinmico e multithreading. Como j mencionamos, o Apndice C uma
reviso do pipelining, caso voc precise dele. O Captulo3 tambm examina os limites do
ILP. Assim como no Captulo2, os exemplos PIAT so o ARM Cortex A8 e o Intel Core i7.
Como a terceira edio continha muito material sobre o Itanium e o VLIW, esse contedo
foi deslocado para o Apndice H, indicando nossa opinio de que essa arquitetura no
sobreviveu s primeiras pretenses.
A crescente importncia das aplicaes multimdia, como jogos e processamento de vdeo,
tambm aumentou a relevncia das arquiteturas que podem explorar o paralelismo em
nvel de dados. H um crescente interesse na computao usando unidades de proces-
samento grfico (Graphical Processing Units GPUs). Ainda assim, poucos arquitetos
entendem como as GPUs realmente funcionam. Decidimos escrever um novo captulo em
grande parte para desvendar esse novo estilo de arquitetura de computadores. O Captulo4
comea com uma introduo s arquiteturas de vetor, que serve de base para a construo
de explicaes sobre extenses de conjunto de instruo SIMD e GPUS (o Apndice G
traz mais detalhes sobre as arquiteturas de vetor). A seo sobre GPUs foi a mais difcil
de escrever foram feitas muitas tentativas para obter uma descrio precisa que fosse
tambm fcil de entender. Um desafio significativo foi a terminologia. Decidimos usar
nossos prprios termos e, ao traduzi-los, estabelecer uma relao entre eles e os termos
oficiais da NVIDIA (uma cpia dessa tabela pode ser encontrada no verso das capas).
Esse captulo apresenta o modelo roofline de desempenho, usando-o para comparar o
Intel Core i7 e as GPUs NVIDIA GTX 280 e GTX 480. O captulo tambm descreve a GPU
Tegra 2 para PMDs.
O Captulo5 descreve os processadores multicore. Ele explora as arquiteturas de memria
simtricas e distribudas, examinando os princpios organizacionais e o desempenho.
Os tpicos de sincronismo e modelos de consistncia de memria vm em seguida. O
exemplo o Intel Core i7.
Como j mencionado, o Captulo6 descreve o mais novo tpico em arquitetura de com-
putadores: os computadores em escala de depsito (Warehouse-Scale Computers WSCs).
Com base na ajuda de engenheiros da Amazon Web Services e Google, esse captulo integra
xx Prefcio

detalhes sobre projeto, custo e desempenho dos WSCs que poucos arquitetos conhecem.
Ele comea com o popular modelo de programao MapReduce antes de descrever a
arquitetura e implementao fsica dos WSCs, incluindo o custo. Os custos nos permitem
explicar a emergncia da computao em nuvem, porque pode ser mais barato usar WSCs
na nuvem do que em seu datacenter local. O exemplo PIAT uma descrio de um WSC
Google que inclui informaes publicadas pela primeira vez neste livro.
Isso nos leva aos Apndices A a L. O Apndice A aborda os princpios de ISAs, incluindo
MIPS64, e o Apndice K descreve as verses de 64 bits do Alpha, MIPS, PowerPC e SPARC,
alm de suas extenses de multimdia. Ele inclui tambm algumas arquiteturas clssicas
(80x86, VAX e IBM 360/370) e conjuntos de instrues embutidas populares (ARM,
Thumb, SuperH, MIPS16 e Mitsubishi M32R). O Apndice H est relacionado a esses
contedos, pois aborda arquiteturas e compiladores para ISAs VLIW.
Como j dissemos, os Apndices B e C so tutoriais sobre conceitos bsicos de pipelining
e caching. Os leitores relativamente iniciantes em caching devero ler o Apndice B antes
do Captulo2, e os novos em pipelining devero ler o Apndice C antes do Captulo3.
O Apndice D, Sistemas de Armazenamento, traz uma discusso maior sobre confiabi-
lidade e disponibilidade, um tutorial sobre RAID com uma descrio dos esquemas RAID
6, e estatsticas de falha de sistemas reais raramente encontradas. Ele continua a fornecer
uma introduo teoria das filas e benchmarks de desempenho de E/S. Ns avaliamos o
custo, o desempenho e a confiabilidade de um cluster real: o Internet Archive. O exemplo
Juntando tudo o arquivador NetApp FAS6000.
O Apndice E, elaborado por Thomas M. Conte, consolida o material embutido em um s lugar.
O Apndice F, sobre redes de interconexo, foi revisado por Timothy M. Pinkston e Jos Duato. O
Apndice G, escrito originalmente por Krste Asanovic, inclui uma descrio dos processadores
vetoriais. Esses dois apndices so parte do melhor material que conhecemos sobre cada tpico.
O Apndice H descreve VLIW e EPIC, a arquitetura do Itanium.
O Apndice I descreve as aplicaes de processamento paralelo e protocolos de coerncia
para o multiprocessamento de memria compartilhada em grande escala. O Apndice J,
de David Goldberg, descreve a aritmtica de computador.
O Apndice L agrupa as Perspectivas histricas e referncias de cada captulo em um
nico apndice. Ele tenta dar o crdito apropriado s ideias presentes em cada captulo
e o contexto histrico de cada inveno. Gostamos de pensar nisso como a apresentao
do drama humano do projeto de computador. Ele tambm d referncias que o aluno
de arquitetura pode querer pesquisar. Se voc tiver tempo, recomendamos a leitura de
alguns dos trabalhos clssicos dessa rea, que so mencionados nessas sees. agradvel
e educativo ouvir as ideias diretamente de seus criadores. Perspectivas histricas foi uma
das sees mais populares das edies anteriores.

Navegando pelo texto


No existe uma ordem melhor para estudar os captulos e os apndices, mas todos os
leitores devero comear pelo Captulo1. Se voc no quiser ler tudo, aqui esto algumas
sequncias sugeridas:
j Hierarquia de memria: Apndice B, Captulo2 e Apndice D
j Paralelismo em nvel de instruo: Apndice C, Captulo3, e Apndice H
j Paralelismo em nvel de dados: Captulos4 e6, Apndice G
j Paralelismo em nvel de thread: Captulo5, Apndices F e I
Prefcio xxi

j Paralelismo em nvel de requisio: Captulo6


j ISA: Apndices A e K
O Apndice E pode ser lido a qualquer momento, mas pode ser mais bem aproveitado se for
lido aps as sequncias de ISA e cache. O Apndice J pode ser lido sempre que a aritmtica
atra-lo. Voc deve ler a parte correspondente ao Apndice L depois de finalizar cada captulo.

Estrutura dos captulos


O material que selecionamos foi organizado em uma estrutura coerente, seguida em todos
os captulos. Comeamos explorando as ideias de um captulo. Essas ideias so seguidas
pela seo Questes cruzadas, que mostra como as ideias abordadas em um captulo
interagem com as dadas em outros captulos. Isso seguido pela Juntando tudo, que
une essas ideias, mostrando como elas so usadas em uma mquina real.
Na sequncia vem a seo Falcias e armadilhas, que permite aos leitores aprender com
os erros de outros. Mostramos exemplos de enganos comuns e armadilhas arquitetnicas
que so difceis de evitar, mesmo quando voc sabe que esto sua espera. Falcias e
armadilhas uma das sees mais populares do livro. Cada captulo termina com uma
seo de Comentrios finais.

Estudos de caso com exerccios


Cada captulo termina com estudos de caso e exerccios que os acompanham. Criados
por especialistas do setor e acadmicos, os estudos de caso exploram os principais
conceitos do captulo e verificam o conhecimento dos leitores por meio de exerccios
cada vez mais desafiadores. Provavelmente, os instrutores vo achar os estudos de caso
detalhados e robustos o bastante para permitir que os leitores criem seus prprios
exerccios adicionais.
A numerao de cada exerccio (<captulo.seo>) indica a seo de maior relevncia
para complet-lo. Esperamos que isso ajude os leitores a evitarem exerccios relacionados a
alguma seo que ainda no tenham lido, alm de fornecer a eles um trecho para reviso.
Os exerccios possuem uma classificao para dar aos leitores uma ideia do tempo neces-
srio para conclu-los:
[10] Menos de 5 minutos (para ler e entender)
[15] 5-15 minutos para dar uma resposta completa
[20] 15-20 minutos para dar uma resposta completa
[25] 1 hora para dar uma resposta completa por escrito
[30] Pequeno projeto de programao: menos de 1 dia inteiro de programao
[40] Projeto de programao significativo: 2 semanas
[Discusso] Tpico para discusso com outros

As solues para estudos de caso e exerccios estaro disponveis em ingls para os


instrutores que se registrarem na pgina do livro (www.elsevier.com.br/hennessy)

Material complementar
Uma variedade de recursos est disponvel online em www.elsevier.com.br/hennessy,
incluindo:
j apndices de referncia alguns com autoria de especialistas sobre o assunto,
convidados abordando diversos tpicos avanados;
j material de perspectivas histricas que explora o desenvolvimento das principais
ideias apresentadas em cada um dos captulos do texto;
xxii Prefcio

j slides para o instrutor em PowerPoint;


j figuras do livro nos formatos PDF, EPS e PPT;
j links para material relacionado na Web;
j lista de erratas.
Novos materiais e links para outros recursos disponveis na Web sero adicionados
regularmente.

Ajudando a melhorar este livro


Finalmente, possvel ganhar dinheiro lendo este livro (Isso que custo-desempenho!).
Se voc ler os Agradecimentos, a seguir, ver que nos esforamos muito para corrigir
os erros. Como um livro passa por muitas reimpresses, temos a oportunidade de fazer
vrias correes. Por isso, se voc descobrir qualquer bug extra, entre em contato com a
editora norte-americana pelo e-mail <ca5comments@mkp.com>.

Comentrios finais
Mais uma vez, este livro resultado de uma verdadeira coautoria: cada um de ns escreveu
metade dos captulos e uma parte igual dos apndices. No podemos imaginar quanto
tempo teria sido gasto sem algum fazendo metade do trabalho, servindo de inspirao
quando a tarefa parecia sem soluo, proporcionando um insight-chave para explicar um
conceito difcil, fazendo crticas aos captulos nos fins de semana e se compadecendo
quando o peso de nossas outras obrigaes tornava difcil continuar escrevendo (essas
obrigaes aumentaram exponencialmente com o nmero de edies, como mostra o
minicurriculum de cada um). Assim, mais uma vez, compartilhamos igualmente a res-
ponsabilidade pelo que voc est para ler.

John Hennessy & David Patterson


CAPTULO 1

Fundamentos do projeto e anlise quantitativos

Eu acho justo dizer que os computadores pessoais se tornaram a ferramenta


mais poderosa que j criamos. Eles so ferramentas de comunicao, so
ferramentas de criatividade e podem ser moldados por seu usurio.
Bill Gates, 24 de fevereiro de 2004

1.1 Introduo................................................................................................................................................1
1.2 Classes de computadores.......................................................................................................................4
1.3 Definio da arquitetura do computador...............................................................................................9
1.4 Tendncias na tecnologia.....................................................................................................................14
1.5 Tendncias na alimentao dos circuitos integrados.........................................................................19
1.6 Tendncias no custo..............................................................................................................................24
1.7 Dependncia...........................................................................................................................................30
1.8 Medio, relatrio e resumo do desempenho......................................................................................32
1.9 Princpios quantitativos do projeto de computadores........................................................................39
1.10 Juntando tudo: desempenho e preo-desempenho.........................................................................46
1.11 Falcias e armadilhas..........................................................................................................................48
1.12 Comentrios finais...............................................................................................................................52
1.13 Perspectivas histricas e referncias.................................................................................................54
Estudos de caso e exerccios por Diana Franklin.......................................................................................54

1.1INTRODUO
A tecnologia de computao fez um progresso incrvel no decorrer dos ltimos 65 anos,
desde que foi criado o primeiro computador eletrnico de uso geral. Hoje, por menos
de US$ 500 se compra um computador pessoal com mais desempenho, mais memria
principal e mais armazenamento em disco do que um computador comprado em 1985
por US$ 1 milho. Essa melhoria rpida vem tanto dos avanos na tecnologia usada para
montar computadores quanto da inovao no projeto de computadores.
Embora as melhorias tecnolgicas tenham sido bastante estveis, o progresso advindo de
arquiteturas de computador aperfeioadas tem sido muito menos consistente. Durante os
primeiros 25 anos de existncia dos computadores eletrnicos, ambas as foras fizeram
uma importante contribuio, promovendo a melhoria de desempenho de cerca de 25%
por ano. O final da dcada de 1970 viu o surgimento do microprocessador. A capacidade
do microprocessador de acompanhar as melhorias na tecnologia de circuito integrado 1
2 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

levou a uma taxa de melhoria mais alta aproximadamente 35% de crescimento por
ano, em desempenho.
Essa taxa de crescimento, combinada com as vantagens do custo de um microprocessador
produzido em massa, fez com que uma frao cada vez maior do setor de computao fosse
baseada nos microprocessadores. Alm disso, duas mudanas significativas no mercado
de computadores facilitaram, mais do que em qualquer outra poca, o sucesso comercial
com uma nova arquitetura: 1) a eliminao virtual da programao em linguagem Assem-
bly reduziu a necessidade de compatibilidade de cdigo-objeto; 2) a criao de sistemas
operacionais padronizados, independentes do fornecedor, como UNIX e seu clone, o
Linux, reduziu o custo e o risco de surgimento de uma nova arquitetura.
Essas mudanas tornaram possvel o desenvolvimento bem-sucedido de um novo conjunto
de arquiteturas com instrues mais simples, chamadas arquiteturas RISC (Reduced Ins-
truction Set Computer computador de conjunto de instrues reduzido), no incio da
dcada de 1980. As mquinas baseadas em RISC chamaram a ateno dos projetistas para
duas tcnicas crticas para o desempenho: a explorao do paralelismo em nvel de instruo
(inicialmente por meio do pipelining e depois pela emisso de mltiplas instrues) e o
uso de caches (inicialmente em formas simples e depois usando organizaes e otimizaes
mais sofisticadas).
Os computadores baseados em RISC maximizaram o padro de desempenho, forando
as arquiteturas anteriores a acompanhar esse padro ou a desaparecer. O Vax da Digital
Equipment no fez isso e, por essa razo, foi substitudo por uma arquitetura RISC. A
Intel acompanhou o desafio, principalmente traduzindo instrues 80x86 (ou IA-32)
para instrues tipo RISC, internamente, permitindo a adoo de muitas das inovaes
pioneiras nos projetos RISC. medida que a quantidade de transistores aumentava no
final dos anos 1990, o overhead do hardware para traduzir a arquitetura x86 mais com-
plexa tornava-se insignificante. Em aplicaes especficas, como telefones celulares, o custo
com relao potncia e rea de silcio relativo ao overhead da traduo do x86 ajudou
uma arquitetura RISC, a ARM, a se tornar dominante.
A Figura1.1 mostra que a combinao de melhorias na organizao e na arquitetura dos
computadores fez com que o crescimento do desempenho fosse constante durante 17 anos,
a uma taxa anual de mais de 50% ritmo sem precedentes no setor de computao.
Quatro foram os impactos dessa notvel taxa de crescimento no sculo XX. Primeiro, ela
melhorou consideravelmente a capacidade disponvel aos usurios de computador. Para
muitas aplicaes, os microprocessadores de desempenho mais alto de hoje ultrapassam
o supercomputador de menos de 10 anos atrs.
Em segundo lugar, essa melhoria drstica em custo/desempenho levou a novas classes de
computadores. Os computadores pessoais e workstations emergiram nos anos 1980 com a
disponibilidade do microprocessador. A ltima dcada viu o surgimento dos smartphones
e tablets, que muitas pessoas esto usando como plataformas primrias de computao
no lugar dos PCs. Esses dispositivos clientes mveis esto usando a internet cada vez
mais para acessar depsitos contendo dezenas de milhares de servidores, que esto sendo
projetados como se fossem um nico gigantesco computador.
Em terceiro lugar, a melhoria contnua da fabricao de semicondutores, como previsto
pela lei de Moore, levou dominncia de computadores baseados em microprocessadores
por toda a gama de projetos de computador. Os minicomputadores, que tradicionalmente
eram feitos a partir de lgica pronta ou de gate arrays, foram substitudos por servidores
montados com microprocessadores. Os mainframes foram praticamente substitudos por
1.1Introduo 3

FIGURA 1.1 Crescimento no desempenho do processador desde o fim da dcada de 1970.


Este grfico mostra o desempenho relativo ao VAX 11/780, medido pelos benchmarks SPECint (Seo1.8). Antes de meados da dcada de 1980,
o crescimento no desempenho do processador era, em grande parte, controlado pela tecnologia e, em mdia, era de 25% por ano. O aumento no
crescimento, para cerca de 52% desde ento, atribudo a ideias arquitetnicas e organizacionais mais avanadas. Em 2003, esse crescimento levou a
uma diferena no desempenho de cerca de um fator de 25 versus se tivssemos continuado com a taxa de 25%. O desempenho para clculos orientados
a ponto flutuante aumentou ainda mais rapidamente. Desde 2003, os limites de potncia, paralelismo disponvel em nvel de instruo e latncia longa da
memria reduziram o desempenho do uniprocessador para no mais de 22% por ano ou cerca de cinco vezes mais lento do que se tivssemos continuado
com 52% ao ano. (O desempenho SPEC mais rpido desde 2007 teve a paralelizao automtica ativada, com um nmero cada vez maior de ncleos por
chip a cada ano, ento a velocidade do uniprocessador difcil de medir. Esses resultados se limitam a sistemas de soquete nico para reduzir o impacto
da paralelizao automtica.) A Figura1.11, na pgina 22, mostra a melhoria nas taxas de clock para essas mesmas trs eras. Como o SPEC foi alterado
no decorrer dos anos, o desempenho das mquinas mais novas estimado por um fator de escala que relaciona o desempenho para duas verses
diferentes do SPEC (por exemplo, SPEC89, SPEC92, SPEC95, SPEC2000 e SPEC2006).

um pequeno nmero de microprocessadores encapsulados. At mesmo os supercompu-


tadores de ponta esto sendo montados com grupos de microprocessadores.
Essas inovaes de hardware levaram ao renascimento do projeto de computadores, que
enfatizou tanto a inovao arquitetnica quanto o uso eficiente das melhorias da tecno-
logia. Essa taxa de crescimento foi aumentada de modo que, em 2003, os microproces-
sadores de alto desempenho eram cerca de 7,5 vezes mais rpidos do que teriam alcanado
contando-se apenas com a tecnologia, incluindo a melhoria do projeto do circuito. Ou
seja, 52% ao ano versus 35% ao ano.
O renascimento do hardware levou ao quarto impacto sobre o desenvolvimento de soft-
ware. Essa melhoria de 25.000 vezes no desempenho desde 1978 (Fig.1.1) permitiu aos
programadores da atualidade trocar o desempenho pela produtividade. Em vez de utilizar
linguagens orientadas ao desempenho, como C e C++, hoje as programaes utilizam
mais as linguagens, como Java e C#, chamadas de managed programming languages. Alm
do mais, linguagens script, como Python e Ruby, que so ainda mais produtivas, esto
ganhando popularidade juntamente com frameworks de programao, como Ruby on
Rails. Para manter a produtividade e tentar eliminar o problema do desempenho, os inter-
pretadores com compiladores just-in-time e compilao trace-based esto substituindo os
4 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

compiladores e o linkers tradicionais do passado. A implementao de software tambm


est mudando, com o software como servio (Software as a Service SaaS) usado na in-
ternet, substituindo os softwares comprados em uma mdia (shirink-wrapped software),
que devem ser instalados e executados em um computador local.
A natureza das aplicaes tambm muda. Fala, som, imagens e vdeo esto tornando-se
cada vez mais importantes, juntamente com o tempo de resposta previsvel, to crtico para
o usurio. Um exemplo inspirador o Google Goggles. Esse aplicativo permite apontar a
cmera do telefone celular para um objeto e enviar a imagem pela internet sem fio para um
computador em escala wharehouse, que reconhece o objeto e d informaes interessantes
sobre ele. O aplicativo pode traduzir textos do objeto para outro idioma, ler o cdigo de
barras da capa de um livro e dizer se ele est disponvel on-line e qual o seu preo ou,
se fizer uma panormica com a cmera do celular, dizer quais empresas esto prximas
a voc, quais so seus sites, nmeros telefnicos e endereos.
Porm, a Figura1.1 tambm mostra que esse renascimento de 17 anos acabou. Desde 2003,
a melhoria de desempenho dos uniprocessadores nicos caiu para cerca de 22% por ano,
devido tanto dissipao mxima de potncia dos chips resfriados a ar como falta de
maior paralelismo no nvel de instruo que resta para ser explorado com eficincia. Na
realidade, em 2004, a Intel cancelou seus projetos de uniprocessadores de alto desempenho
e juntou-se a outras empresas ao mostrar que o caminho para um desempenho mais alto
seria atravs de vrios processadores por chip, e no de uniprocessadores mais rpidos.
Isso sinaliza uma passagem histrica, de contar unicamente com o paralelismo em nvel de
instruo (Instruction-Level Parallelism ILP), foco principal das trs primeiras edies
deste livro, para contar com o paralelismo em nvel de thread (Thread-Level Parallelism
TLP) e o paralelismo em nvel de dados (Data-Level Parallelism DLP), que so abordados
na quarta edio e expandidos nesta. Esta edio tambm inclui computadores em escala
wharehouse. Embora o compilador e o hardware conspirem para explorar o ILP impli-
citamente sem a ateno do programador, DLP, TLP e RLP so explicitamente paralelos,
exigindo a reestruturao do aplicativo para que ele possa explorar o paralelismo explcito.
Em alguns casos, isso fcil. Em muitos, uma nova grande carga para os programadores.
Este captulo focaliza as ideias arquitetnicas e as melhorias no compilador que as acompa-
nham e que possibilitaram a incrvel taxa de crescimento no sculo passado, alm dos
motivos para a surpreendente mudana e os desafios e enfoques promissores iniciais
para as ideias arquitetnicas e compiladores para o sculo XXI. No centro est o enfoque
quantitativo para o projeto e a anlise de compilador, que usa observaes empricas dos
programas, experimentao e simulao como ferramentas. Esse estilo e esse enfoque do
projeto de computador so refletidos neste livro. O objetivo, aqui, estabelecer a base
quantitativa na qual os captulos e apndices a seguir se baseiam.
Este livro foi escrito no apenas para explorar esse estilo de projeto, mas tambm para
estimul-lo a contribuir para esse progresso. Acreditamos que essa tcnica funcionar
para computadores explicitamente paralelos do futuro, assim como funcionou para os
computadores implicitamente paralelos do passado.

1.2 CLASSES DE COMPUTADORES


Essas alteraes prepararam o palco para uma mudana surpreendente no modo como
vemos a computao, nas aplicaes computacionais e nos mercados de computadores,
neste novo sculo. Nunca, desde a criao do computador pessoal, vimos mudanas to
notveis em como os computadores se parecem e como so usados. Essas mudanas no uso
1.2 Classes de computadores 5

FIGURA 1.2 Um resumo das cinco classes de computao principais e suas caractersticas de sistema.
As vendas em 2010 incluram cerca de 1,8 bilho de PMDs (90% deles em telefones celulares), 350 milhes de PCs desktop e 20 milhes de servidores.
O nmero total de processadores embarcados vendidos foi de quase 19 bilhes. No total, 6,1 bilhes de chips baseados em tecnologia ARM foram vendidos
em 2010. Observe a ampla faixa de preos de servidores e sistemas embarcados, que vo de pendrives USB a roteadores de rede. Para servidores,
essa faixa varia da necessidade de sistemas multiprocessadores com escala muito ampla ao processamento de transaes de alto nvel.

do computador geraram trs mercados de computador diferentes, cada qual caracterizado


por diferentes aplicaes, requisitos e tecnologias de computao. A Figura 1.2 resume
essas classes principais de ambientes de computador e suas caractersticas importantes.

Dispositivo pessoal mvel (PMD)


Dispositivo pessoal mvel (Personal Mobile Device PMD) o nome que aplicamos a uma
coleo de dispositivos sem fio com interfaces de usurio multimdia, como telefones
celulares, tablets, e assim por diante. O custo a principal preocupao, dado que o preo
para o consumidor de todo o produto de algumas centenas de dlares. Embora a nfase
na eficincia energtica seja frequentemente orientada pelo uso de baterias, a necessidade
de usar materiais menos caros plstico em vez de cermica e a ausncia de uma
ventoinha para resfriamento tambm limitam o consumo total de energia. Examinamos
a questo da energia e da potncia em detalhes na Seo1.5. Aplicativos para PMDs
muitas vezes so baseados na web e orientados para a mdia, como no exemplo acima
(Google Goggles). Os requisitos de energia e tamanho levam ao uso de memria Flash
para armazenamento (Cap.2) no lugar de discos magnticos.
A capacidade de resposta e previsibilidade so caractersticas-chave para aplicaes de
mdia. Um requisito de desempenho em tempo real significa que um segmento da aplicao
tem um tempo absoluto mximo de execuo. Por exemplo, ao se reproduzir vdeo em
um PMD, o tempo para processar cada quadro de vdeo limitado, pois o processador
precisa aceitar e processar o prximo quadro rapidamente. Em algumas aplicaes, existe
um requisito mais sutil: o tempo mdio para determinada tarefa restrito, tanto quanto o
nmero de ocorrncias quando um tempo mximo ultrapassado. Essas tcnicas, tambm
chamadas tempo real flexvel, so necessrias quando possvel perder, ocasionalmente, a
restrio de tempo em um evento, desde que no haja muita perda. O desempenho em
tempo real costuma ser altamente dependente da aplicao.
Outras caractersticas-chave em muitas aplicaes PMD so a necessidade de minimizar a
memria e a necessidade de minimizar o consumo de potncia. A eficincia energtica
orientada tanto pela potncia da bateria quanto pela dissipao de calor. A memria pode
ser uma parte substancial do custo do sistema, e importante otimizar o tamanho dessa
memria nesses casos. A importncia do tamanho da memria traduzida com nfase
no tamanho do cdigo, pois o tamanho dos dados ditado pela aplicao.
6 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

Computao de desktop
O primeiro e maior mercado em termos financeiros ainda o de computadores desktop.
A computao desktop varia desde sistemas inferiores, vendidos por menos de US$ 300,
at estaes de trabalho de ponta altamente configuradas, que podem custar US$ 2.500.
Desde 2008, mais da metade dos computadores desktops fabricados, por ano, corresponde
a computadores laptop alimentados por bateria.
Por todo esse intervalo de preo e capacidade, o mercado de desktop costuma ser orien-
tado a otimizar a relao preo-desempenho. Essa combinao de desempenho (medido
principalmente em termos de desempenho de clculo e desempenho de grficos) e preo
de um sistema o que mais importa para os clientes nesse mercado e, portanto, para os
projetistas de computadores. Como resultado, os microprocessadores mais novos, de
desempenho mais alto, e os microprocessadores de custo reduzido normalmente aparecem
primeiro nos sistemas de desktop (ver, na Seo1.6, uma anlise das questes que afetam
o custo dos computadores).
A computao de desktop tambm costuma ser razoavelmente bem caracterizada em
termos de aplicaes e benchmarking, embora o uso crescente de aplicaes centradas na
web, interativas, imponha novos desafios na avaliao do desempenho.

Servidores
Com a passagem para a computao desktop nos anos 1980, o papel dos servidores
cresceu para oferecer servios de arquivo e computao em maior escala e mais seguros.
Tais servidores se tornaram a espinha dorsal da computao empresarial de alta escala,
substituindo o mainframe tradicional.
Para os servidores, diferentes caractersticas so importantes. Primeiro, a disponibilidade
crtica (discutimos a dependncia na Seo1.7). Considere os servidores que suportam as
mquinas de caixa eletrnico para bancos ou os sistemas de reserva de linhas areas. As falhas
desses sistemas de servidor so muito mais catastrficas do que as falhas de um nico desktop,
pois esses servidores precisam operar sete dias por semana, 24 horas por dia. A Figura1.3
estima as perdas de receita em funo do tempo de paralisao para aplicaes de servidor.

FIGURA 1.3 Os custos arredondados para o milhar mais prximo de um sistema no disponvel so mostrados com uma anlise do custo
do tempo de paralisao (em termos de receita perdida imediatamente), considerando trs nveis de disponibilidade diferentes
e que o tempo de paralisao distribudo uniformemente.
Esses dados so de Kembel (2000) e foram coletados e analisados pela Contingency Planning Research.
1.2 Classes de computadores 7

Por fim, os servidores so projetados para um throughput eficiente. Ou seja, o desempe-


nho geral do servidor em termos de transaes por minuto ou pginas web atendidas
por segundo o fator crucial. A capacidade de resposta a uma solicitao individual
continua sendo importante, mas a eficincia geral e a eficincia de custo, determinadas
por quantas solicitaes podem ser tratadas em uma unidade de tempo, so as principais
mtricas para a maioria dos servidores. Retornamos questo de avaliar o desempenho
para diferentes tipos de ambientes de computao na Seo1.8.

Computadores clusters/escala wharehouse


O crescimento do software como servio (Software as a Service SaaS) para aplicaes
como busca, redes sociais, compartilhamento de vdeo, games multiplayer, compras on-line,
e assim por diante, levou ao crescimento de uma classe de computadores chamados clusters.
Clusters so colees de computadores desktop ou servidores conectados por redes locais
para funcionar como um nico grande computador. Cada n executa seu prximo sistema
operacional, e os ns se comunicam usando um protocolo de rede. Os maiores clusters so
chamados computadores de armazenamento em escala (Warehouse-Scale Computers WSCs),
uma vez que eles so projetados para que dezenas de milhares de servidores possam funcio-
nar como um s. O Captulo6 descreve essa classe de computadores extremamente grandes.
A relao preo-desempenho e o consumo de potncia so crticos para os WSCs, j que
eles so to grandes. Como o Captulo6 explica, 80% do custo de US$ 90 milhes de um
WSC associado potncia e ao resfriamento interior dos computadores. Os prprios
computadores e o equipamento de rede custam outros US$ 70 milhes e devem ser subs-
titudos aps alguns anos de uso. Ao comprar tanta computao, voc precisa fazer isso
com sabedoria, j que uma melhoria de 10% no desempenho de preo significa uma
economia de US$ 7 milhes (10% de 70 milhes).
Os WSCs esto relacionados com os servidores no sentido de que a disponibilidade
crtica. Por exemplo, a Amazon.com teve US$ 13 bilhes de vendas no quarto trimestre de
2010. Como em um trimestre h cerca de 2.200 horas, a receita mdia por hora foi de quase
US$ 6 milhes. Durante uma hora de pico de compras no Natal, a perda potencial seria
muitas vezes maior. Como explicado no Captulo6, a diferena em relao aos servidores
que os WSCs usam componentes redundantes baratos, como building blocks, confiando
em uma camada de software para capturar e isolar as muitas falhas que vo ocorrer com
a computao nessa escala. Note que a escalabilidade para um WSC tratada pela rede
LAN que conecta os computadores, e no por um hardware integrado de computador,
como no caso dos servidores.
Uma categoria relacionada comos WSCs a dos supercomputadores, que custam dezenas
de milhes de dlares, mas os supercomputadores so diferentes, pois enfatizam o
desempenho em ponto flutuante e, a cada vez, executam programas em lotes grandes,
com comunicao pesada, por semanas. Esse acoplamento rgido leva ao uso de redes
internas muito mais rpidas. Em contraste, os WSCs enfatizam aplicaes interativas,
armazenamento em grande escala, dependncia e grande largura de banda de internet.

Computadores embarcados
Os computadores embarcados so encontrados em mquinas do dia a dia: fornos de
micro-ondas, mquinas de lavar, a maioria das impressoras, switches de rede e todos os
carros contm microprocessadores embarcados simples.
Muitas vezes, os processadores em um PMD so considerados computadores embarcados,
mas os estamos colocando em uma categoria separada, porque os PMDs so plataformas
que podem executar softwares desenvolvidos externamente e compartilham muitas das
8 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

caractersticas dos computadores desktop. Outros dispositivos embarcados so mais limita-


dos em sofisticao de hardware e software. Ns usamos a capacidade de executar software
de terceiros como a linha divisria entre computadores embarcados e no embarcados.
Os computadores embarcados possuem a mais extensa gama de poder de processamento
e custo. Eles incluem processadores de 8 e 16 bits, que podem custar menos de 10 cen-
tavos de dlar, microprocessadores de 32 bits, que executam 100 milhes de instrues
por segundo e custam menos de US$ 5, e processadores de ponta para switches de rede
mais recentes, que custam US$ 100 e podem executar bilhes de instrues por segundo.
Embora a gama da capacidade de computao no mercado de computao embarcada
seja muito extensa, o preo um fator importante no projeto de computadores para esse
espao. Existem requisitos de desempenho, claro, mas o objetivo principal normalmente
atender a necessidade de desempenho a um preo mnimo, em vez de conseguir desempe-
nho mais alto a um preo mais alto.
A maior parte deste livro se aplica ao projeto, uso e desempenho de processadores embarca-
dos, sejam eles microprocessadores encapsulados, sejam ncleos de microprocessadores que
sero montados com outro hardware de uso especfico. Na realidade, a terceira edio deste
livro incluiu exemplos de computao embarcada para ilustrar as ideias em cada captulo.
Infelizmente, a maioria dos leitores considerou esses exemplos insatisfatrios, pois os
dados levam ao projeto quantitativo e avaliao de computadores desktop, e servidores
ainda no foram bem estendidos para a computao embarcada (ver os desafios com o
EEMBC, por exemplo, na Seo1.8). Portanto, por enquanto ficamos com as descries
qualitativas, que no se ajustam bem ao restante do livro. Como resultado, nesta edio,
consolidamos o material embarcado em um nico novo apndice. Acreditamos que o
Apndice E melhore o fluxo de ideias no texto, permitindo ainda que os leitores percebam
como os diferentes requisitos afetam a computao embarcada.

Classes de paralelismo e arquiteturas paralelas


Paralelismo em mltiplos nveis a fora impulsionadora do projeto de computadores
pelas quatro classes de computadores, tendo a energia e o custo como as principais res-
tries. Existem basicamente dois tipos de paralelismo em aplicaes:
1. Paralelismo em nvel de dados (Data-Level Parallelism DLP): surge porque existem
muitos itens de dados que podem ser operados ao mesmo tempo.
2. Paralelismo em nvel de tarefas (Task-Level Parallelism TLP): surge porque
so criadas tarefas que podem operar de modo independente e principalmente
em paralelo.
O hardware do computador pode explorar esses dois tipos de paralelismo de aplicao
de quatro modos principais:
1. O paralelismo em nvel de instrues explora o paralelismo em nvel de dados a nveis
modestos com auxlio do compilador, usando ideias como pipelining
e em nveis mdios usando ideias como execuo especulativa.
2. As arquiteturas vetoriais e as unidades de processador grfico (Graphic Processor Units
GPUs) exploram o paralelismo em nvel de dados aplicando uma nica instruo
a uma coleo de dados em paralelo.
3. O paralelismo em nvel de thread explora o paralelismo em nvel de dados
ou o paralelismo em nvel de tarefas em um modelo de hardware fortemente
acoplado, que permite a interao entre threads paralelos.
4. O paralelismo em nvel de requisio explora o paralelismo entre tarefas muito
desacopladas especificadas pelo programador ou pelo sistema operacional.
1.3 Definio da arquitetura do computador 9

Esses quatro modos de o hardware suportar o paralelismo em nvel de dados e o paralelis-


mo em nvel de tarefas tm 50 anos. Quando Michael Flynn (1966) estudou os esforos de
computao paralela nos anos 1960, encontrou uma classificao simples cujas abreviaes
ainda usamos hoje. Ele examinou o paralelismo nos fluxos de instruo e dados chamados
pelas instrues no componente mais restrito do multiprocessador, colocando todos os
computadores em uma de quatro categorias:
1. Fluxo simples de instruo, fluxo simples de dados (Single Instruction Stream, Single
Data Stream SISD). Essa categoria o uniprocessador. O programador pensa
nela como o computador sequencial padro, mas ele pode explorar o paralelismo
em nvel de instruo. O Captulo3 cobre as arquiteturas SISD que usam tcnicas
ILP, como a execuo superescalar e a execuo especulativa.
2. Fluxo simples de instruo, fluxos mltiplos de dados (Single Instruction Stream,
Multiple Data Streams SIMD). A mesma instruo executada por mltiplos
processadores usando diferentes fluxos de dados. Computadores SIMD exploram
o paralelismo em nvel de dados ao aplicar as mesmas operaes a mltiplos itens
em paralelo. Cada processador tem sua prpria memria de dados (da o MD
de SIMD), mas existe uma nica memria de instrues e um nico processadorde
controle, que busca e envia instrues. O Captulo4 cobre o DLP e trs diferentes
arquiteturas que o exploram: arquiteturas vetoriais, extenses multimdia
a conjuntos de instrues-padro e GPUs.
3. Fluxos de mltiplas instrues, fluxo simples de dados (Multiple Instruction Stream,
Single Data Stream MISD). Nenhum microprocessador comercial desse
tipo foi construdo at hoje, mas ele completa essa classificao simples.
4. Fluxos mltiplos de instrues, fluxos mltiplos de dados (Multiple Instruction Streams,
Multiple Data Streams MIMD). Cada processador busca suas prprias instrues
e opera seus prprios dados, buscando o paralelismo em nvel de tarefa. Em geral,
o MIMD mais flexvel do que o SIMD e, por isso, em geral mais aplicvel,
mas inerentemente mais caro do que o SIMD. Por exemplo, computadores MIMD
podem tambm explorar o paralelismo em nvel de dados, embora o overhead
provavelmente seja maior do que seria visto em um computador SIMD.
Esse overhead significa que o tamanho do gro deve ser suficientemente grande
para explorar o paralelismo com eficincia. O Captulo5 cobre arquiteturas MIMD
fortemente acopladas que exploram o paralelismo em nvel de thread,
uma vez que mltiplos threads em cooperao operam em paralelo. O Captulo6
cobre arquiteturas MIMD fracamente acopladas especificamente, clusters
e computadores em escala que exploram o paralelismo em nvel de requisio,
em que muitas tarefas independentes podem ocorrer naturalmente em paralelo,
com pouca necessidade de comunicao ou sincronizao.
Essa taxonomia um modelo grosseiro, j que muitos processadores paralelos so hbridos
das classes SISD, SIMD e MIMD. Mesmo assim, til colocar um framework no espao
de projeto para os computadores que veremos neste livro.

1.3 DEFINIO DA ARQUITETURA DO COMPUTADOR


A tarefa que o projetista de computador desempenha complexa: determinar quais
atributos so importantes para um novo computador, depois projetar um computador
para maximizar o desempenho enquanto permanece dentro das restries de custo,
potncia e disponibilidade. Essa tarefa possui muitos aspectos, incluindo o projeto do
conjunto de instrues, a organizao funcional, o projeto lgico e a implementao. A
implementao pode abranger o projeto do circuito integrado, o acondicionamento, a
10 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

potncia e o resfriamento. A otimizao do projeto requer familiaridade com uma gama


de tecnologias muito extensa, desde compiladores e sistemas operacionais at o projeto
lgico e o o acondicionamento.
No passado, o nome arquitetura de computadores normalmente se referia apenas ao projeto
do conjunto de instrues. Outros aspectos do projeto de computadores eram chamados
de implementao, normalmente insinuando que a implementao no interessante ou
menos desafiadora.
Acreditamos que essa viso seja incorreta. A tarefa do arquiteto ou do projetista muito
mais do que projetar o conjunto de instrues, e os obstculos tcnicos nos outros aspectos
do projeto provavelmente so mais desafiadores do que aqueles encontrados no projetodo
conjunto de instrues. Veremos rapidamente a arquitetura do conjunto de instrues
antes de descrever os desafios maiores para o arquiteto de computador.

Arquitetura do conjunto de instrues


Neste livro, usamos o nome arquitetura do conjunto de instrues (Instruction Set Architecture
ISA) para nos referir ao conjunto de instrues visveis pelo programador. A arquite-
turado conjunto de instrues serve como interface entre o software e o hardware. Essa
reviso rpida da arquitetura do conjunto de instrues usar exemplos do 80x86, do ARM
e do MIPS para ilustrar as sete dimenses de uma arquitetura do conjunto de instrues. Os
Apndices A e K oferecem mais detalhes sobre as trs arquiteturas de conjunto de instrues.
1. Classes de ISA. Hoje, quase todas as arquiteturas de conjunto de instrues so
classificadas como arquiteturas de registradores de propsito geral (GPRs),
em que os operandos so registradores ou locais de memria. O 80x86 contm
16 registradores de propsito geral e 16 que podem manter dados de ponto
flutuante (FPRs), enquanto o MIPS contm 32 registradores de propsito geral
e 32 de ponto flutuante (Fig.1.4). As duas verses populares dessa classe so
arquiteturas de conjunto de instrues registrador-memria, como o 80x86,

FIGURA 1.4 Registradores do MIPS e convenes de uso.


Alm dos 32 registradores de propsito geral (R0-R31), o MIPS contm 32 registradores de ponto flutuante (F0-F31)
que podem manter um nmero de preciso simples de 32 bits ou um nmero de preciso dupla de 64 bits.
1.3 Definio da arquitetura do computador 11

que podem acessar a memria como parte de muitas instrues, e arquiteturas


de conjunto de instrues load-store, como o MIPS, que s podem acessar a memria
com instrues load ou store. Todas as arquiteturas de conjunto de instrues
recentes so load-store.
2. Endereamento de memria. Praticamente todos os computadores desktop
e servidores, incluindo o 80x86 e o MIPS, utilizam endereamento de byte
para acessar operandos da memria. Algumas arquiteturas, como ARM e MIPS,
exigem que os objetos estejam alinhados. Um acesso a um objeto com tamanho
de s bytes no endereo de byte A est alinhado se A mod s=0 (Fig. A.5 na
pgina A-7.) O 80x86 no exige alinhamento, mas os acessos geralmente so mais
rpidos se os operandos estiverem alinhados.
3. Modos de endereamento. Alm de especificar registradores e operandos constantes,
os modos de endereamento especificam o endereo de um objeto na memria.
Os modos de endereamento do MIPS so registrador, imediato (para constantes)
e deslocamento, em que um deslocamento constante acrescentado a um registrador
para formar o endereo da memria. O 80x86 suporta esses trs modos
de endereamento e mais trs variaes de deslocamento: nenhum registrador
(absoluto), dois registradores (indexados pela base com deslocamento) e dois
registradores em que um registrador multiplicado pelo tamanho do operando
em bytes (base com ndice em escala e deslocamento). Ele contm mais dos trs ltimos,
sem o campo de deslocamento, mais o indireto por registrador, indexado
e base com ndice em escala. O ARM tem os trs modos de endereamento MIPS mais
o endereamento relativo a PC, a soma de dois registradores e a soma de dois registradores
em que um registrador multiplicado pelo tamanho do operando em bytes. Ele tambm
tem endereamento por autoincremento e autodecremento, em que o endereo calculado
substitui o contedo de um dos registradores usados para formar o endereo.
4. Tipos e tamanhos de operandos. Assim como a maioria das arquiteturas de conjunto
de instrues, o MIPS, o ARM e o 80x86 admitem tamanhos de operando
de 8 bits (caractere ASCII), 16 bits (caractere Unicode ou meia palavra), 32 bits
(inteiro ou palavra), 64 bits (dupla palavra ou inteiro longo) e ponto flutuante
IEEE 754 com 32 bits (preciso simples) e 64 bits (preciso dupla). O 80x86
tambm admite ponto flutuante de 80 bits (preciso dupla estendida).
5. Operaes. As categorias gerais de operaes so transferncia de dados, lgica
e aritmtica, controle (analisado em seguida) e ponto flutuante. O MIPS
uma arquitetura de conjunto de instrues simples e fceis de executar
em um pipeline, representando as arquiteturas RISC usadas em 2011. A Figura1.5
resume a arquitetura do conjunto de instrues do MIPS. O 80x86 possui
um conjunto de operaes maior e muito mais rico (Apndice K).
6. Instrues de fluxo de controle. Praticamente todas as arquiteuras de conjunto de
instrues, incluindo essas trs, admitem desvios condicionais, saltos incondicionais,
chamadas e retornos de procedimento. As trs usam endereamento relativo ao
PC, no qual o endereo de desvio especificado por um campo de endereo que
somado ao PC. Existem algumas pequenas diferenas. Desvios condicionais do MIPS
(BE, BNE etc.) testam o contedo dos registradores, enquanto os desvios do 80x86
e ARM testam o conjunto de bits de cdigo de condio como efeitos colaterais
das operaes aritmticas/lgicas. As chamadas de procedimento do ARM e MIPS
colocam o endereo de retorno em um registrador, enquanto a chamada do 80x86
(CALLF) coloca o endereo de retorno em uma pilha na memria.
7. Codificando uma arquitetura de conjunto de instrues. Existem duas opes bsicas
na codificao: tamanho fixo e tamanho varivel. Todas as instrues do ARM e MIPS
possuem 32 bits de extenso, o que simplifica a decodificao da instruo.
12 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

FIGURA 1.5 Subconjunto das instrues no MIPS64.


SP=single precision (preciso simples), DP=double precision (preciso dupla). O Apndice A contm detalhes sobre o MIPS64. Para os dados, o nmero
do bit mais significativo 0; o menos significativo 63.
1.3 Definio da arquitetura do computador 13

FIGURA 1.6 Formatos de arquitetura do conjunto de instrues MIPS64.


Todas as instrues possuem 32 bits de extenso. O formato R para operaes registrador para registrador inteiro,
como DADDU, DSUBU, e assim por diante. O formato I para transferncias de dados, desvios e instrues imediatas,
como LD, SD, BEQZ e DADDIs. O formato J para saltos, o formato FR para operaes de ponto flutuante, e o
formato FI para desvios em ponto flutuante.

A Figura1.6 mostra os formatos de instrues do MIPS. A codificao do 80x86 tem


tamanho varivel de 1-18 bytes. As instrues de tamanho varivel podem ocupar
menos espao que as instrues de tamanho fixo, de modo que um programa
compilado para o 80x86 normalmente menor que o mesmo programa compilado
para MIPS. Observe que as opes mencionadas anteriormente afetaro o modo
como as instrues so codificadas em uma representao binria. Por exemplo,
o nmero de registradores e o nmero de modos de endereamento possuem
impacto significativo sobre o tamanho das instrues, pois o campo de registrador
e o campo de modo de endereamento podem aparecer muitas vezes em uma nica
instruo. (Observe que o ARM e o MIPS, mais tarde, ofereceram extenses para
fornecer instrues com 16 bits de extenso para reduzir o tamanho do programa,
chamado Thumb ou Thumb-2 e MIPS16, respectivamente.)
No presente, os outros desafios enfrentados pelo arquiteto de computador, alm do
projeto da arquitetura do conjunto de instrues, so particularmente crticos quando
as diferenas entre os conjuntos de instrues so pequenas e existem reas de aplicao
distintas. Portanto, a partir da ltima edio, o ncleo do material do conjunto de ins-
trues, alm dessa reviso rpida, pode ser encontrado nos apndices (Apndices A e K).
Neste livro, usamos um subconjunto do MIPS64 como exemplo de arquitetura do conjunto
de instrues porque ele tanto dominante para redes quanto um exemplo elegante das
arquiteturas RISC mencionadas, das quais o ARM (Advanced RISC Machine) o exemplo
mais popular. Os processadores ARM estavam em 6,1 bilhes de chips fabricados em 2010,
ou aproximadamente 20 vezes o nmero de chips produzidos de processadores 80x86.

Arquitetura genuna de computador: projetando a organizao


e o hardware para atender objetivos e requisitos funcionais
A implementao de um computador possui dois componentes: organizao e hardware.
O termo organizao inclui os aspectos de alto nvel do projeto de um computador, como o
sistema de memria, a interconexo de memria e o projeto do processador interno ou
CPU (unidade central de processamento, na qual so implementados a aritmtica, a
14 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

lgica, os desvios e as transferncias de dados). O termo microarquitetura tambm usado


no lugar de organizao. Por exemplo, dois processadores com as mesmas arquiteturas de
conjunto de instrues, mas com organizaes diferentes, so o AMD Opteron e o Intel
Core i7. Ambos implementam o conjunto de instrues x86, mas possuem organizaes
de pipeline e cache muito diferentes.
A mudana para os processadores mltiplos de microprocessadores levou ao termo core
usado tambm para processador. Em vez de se dizer microprocessador multiprocessador, o
termo multicore foi adotado. Dado que quase todos os chips tm mltiplos processadores,
o nome unidade central de processamento, ou CPU, est tornando-se popular.
Hardware refere-se aos detalhes especficos de um computador, incluindo o projeto lgico
detalhado e a tecnologia de encapsulamento. Normalmente, uma linha de computadores
contm mquinas com arquiteturas de conjunto de instrues idnticas e organizaes
quase idnticas, diferindo na implementao detalhada do hardware. Por exemplo, o Intel
Core i7 (Cap.3) e o Intel Xeon 7560 (Cap.5) so praticamente idnticos, mas oferecem
taxas de clock e sistemas de memria diferentes, tornando o Xeon 7560 mais eficiente
para computadores mais inferiores.
Neste livro, a palavra arquitetura abrange os trs aspectos do projeto de computadores:
arquitetura do conjunto de instrues, organizao e hardware.
Os arquitetos dessa rea precisam projetar um computador para atender aos requisitos fun-
cionais e tambm aos objetivos relacionados com preo, potncia, desempenho e disponibi-
lidade. A Figura1.7 resume os requisitos a considerar no projeto de um novo computador.
Normalmente, os arquitetos tambm precisam determinar quais so os requisitos funcionais,
o que pode ser uma grande tarefa. Os requisitos podem ser recursos especficos inspirados
pelo mercado. O software de aplicao normalmente controla a escolha de certos requisitos
funcionais, determinando como o computador ser usado. Se houver um grande conjunto
de software para certa arquitetura de conjunto de instrues, o arquiteto poder decidir
que o novo computador deve implementar um dado conjunto de instrues. A presena de
um grande mercado para determinada classe de aplicaes pode encorajar os projetistas a
incorporarem requisitos que tornariam o computador competitivo nesse mercado. Muitos
desses requisitos e recursos so examinados em profundidade nos prximos captulos.
Os arquitetos precisam estar conscientes das tendncias importantes, tanto na tecnologia
como na utilizao dos computadores, j que elas afetam no somente os custos no futuro
como tambm a longevidade de uma arquitetura.

1.4 TENDNCIAS NA TECNOLOGIA


Para ser bem-sucedida, uma arquitetura de conjunto de instrues precisa ser projetada
para sobreviver s rpidas mudanas na tecnologia dos computadores. Afinal, uma nova
arquitetura de conjunto de instrues bem-sucedida pode durar dcadas por exem-
plo, o ncleo do mainframe IBM est em uso h quase 50 anos. Um arquiteto precisa
planejar visando s mudanas de tecnologia que possam aumentar o tempo de vida de
um computador bem-sucedido.
Para planejar a evoluo de um computador, o projetista precisa estar ciente das rpidas
mudanas na tecnologia de implementao. Quatro dessas tecnologias, que mudam em
ritmo notvel, so fundamentais para as implementaes modernas:
j Tecnologia do circuito lgico integrado. A densidade de transistores aumenta em cerca
de 35% ao ano, quadruplicando em pouco mais de quatro anos. Os aumentos no
1.4 Tendncias na tecnologia 15

FIGURA 1.7 Resumo de alguns dos requisitos funcionais mais importantes com os quais um arquiteto se depara.
A coluna da esquerda descreve a classe de requisitos, enquanto a coluna da direita oferece exemplos especficos. A coluna da direita tambm contm
referncias a captulos e apndices que lidam com os requisitos especficos.

tamanho do die so menos previsveis e mais lentos, variando de 10-20%


por ano. O efeito combinado o crescimento na contagem de transistores
de um chip em cerca de 40-55% por ano, ou dobrando a cada 18-24 meses.
Essa tendncia conhecida popularmente como lei de Moore. A velocidade
do dispositivo aumenta mais lentamente, conforme mencionamos a seguir.
j DRAM semicondutora (memria dinmica de acesso aleatrio). Agora que
a maioria dos chips DRAM produzida principalmente em mdulos DIMM, mais
difcil rastrear a capacidade do chip, j que os fabricantes de DRAM costumam
oferecer produtos de diversas capacidades ao mesmo tempo, para combinar
com a capacidade do DIMM. A capacidade por chip DRAM tem aumentado
16 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

FIGURA 1.8 Mudana na taxa de melhoria na capacidade da DRAM ao longo do tempo.


As duas primeiras edies chamaram essa taxa de regra geral de crescimento da DRAM, uma vez que havia sido
bastante confivel desde 1977, com a DRAM de 16 kilobits, at 1996, com a DRAM de 64 megabits. Hoje, alguns
questionam se a capacidade da DRAM pode melhorar em 5- 7 anos, devido a dificuldades em fabricar uma clula
de DRAM cada vez mais tridimensional (Kim, 2005).

em cerca de 25-40% por ano, dobrando aproximadamente a cada 2-3 anos. Essa
tecnologia a base da memria principal e ser discutida no Captulo2. Observe que
a taxa de melhoria continuou a cair ao longo das edies deste livro, como mostra
a Figura1.8. Existe at mesmo uma preocupao: a taxa de crescimento vai parar
no meio desta dcada devido crescente dificuldade em produzir com eficincia
clulas DRAM ainda menores (Kim, 2005)? O Captulo2 menciona diversas outras
tecnologias que podem substituir o DRAM, se ele atingir o limite da capacidade.
j Flash semicondutor (memria somente para leitura eletricamente apagvel e programvel).
Essa memria semicondutora no voltil o dispositivo-padro de armazenamento
nos PMDs, e sua popularidade alavancou sua rpida taxa de crescimento
em capacidade. Recentemente, a capacidade por chip Flash vem aumentando em
cerca de 50-60% por ano, dobrando aproximadamente a cada dois anos. Em 2011,
a memria Flash era 15-20 vezes mais barata por bit do que a DRAM. O Captulo2
descreve a memria Flash.
j Tecnologia de disco magntico. Antes de 1990, a densidade aumentava em cerca
de 30% por ano, dobrando em trs anos. Ela aumentou para 60% por ano depois
disso e para 100% por ano em 1996. Desde 2004, caiu novamente para cerca
de 40% por ano ou dobrou a cada trs anos. Os discos so 15-25 vezes mais
baratos por bit do que a Flash. Dada a taxa de crescimento reduzido da DRAM,
hoje os discos so 300-500 vezes mais baratos por bit do que a DRAM. a principal
tecnologia para o armazenamento em servidores e em computadores em escala
warehouse (vamos discutir essas tendncias em detalhes no Apndice D).
j Tecnologia de rede. O desempenho da rede depende do desempenho dos switches
e do desempenho do sistema de transmisso (examinaremos as tendncias em redes
no Apndice F).

Essas tecnologias que mudam rapidamente modelam o projeto de um computador que, com
melhorias de velocidade e tecnologia, pode ter um tempo de vida de 3-5 anos. As principais
tecnologias, como DRAM, Flash e disco, mudam o suficiente para que o projetista precise
planejar essas alteraes. Na realidade, em geral, os projetistas projetam para a prxima tec-
nologia sabendo que, quando um produto comear a ser entregue em volume, essa tecnologia
pode ser a mais econmica ou apresentar vantagens de desempenho. Tradicionalmente, o
custo tem diminudo aproximadamente na mesma taxa em que a densidade tem aumentado.
Embora a tecnologia melhore continuamente, o impacto dessas melhorias pode ocorrer
em saltos discretos, medida que um novo patamar para uma capacidade seja alcanado.
Por exemplo, quando a tecnologia MOS atingiu um ponto, no incio da dcada de 1980,
1.4 Tendncias na tecnologia 17

quando cerca de 25.000-50.000 transistores poderiam caber em um nico chip, foi pos-
svel montar um microprocessador de nico chip de 32 bits. Ao final da mesma dcada,
as caches de primeiro nvel puderam ser inseridos no mesmo chip. Eliminando os cruza-
mentos do processador dentro do chip e entre o processador e a cache, foi possvel alcanar
uma melhoria incrvel no custo-desempenho e na potncia-desempenho. Esse projeto
era simplesmente invivel at que a tecnologia alcanasse determinado ponto. Com os
microprocessadores multicore e nmero de cores aumentando a cada gerao, mesmo os
computadores servidores esto se dirigindo para ter um nico chip para todos os proces-
sadores. Esses limites de tecnologia no so raros e possuem um impacto significativo
sobre grande variedade de decises de projeto.

Tendncias de desempenho: largura de banda sobre latncia


Como veremos na Seo1.8, largura de banda ou throughput a quantidade total de trabalho
feito em determinado tempo, como megabytes por segundo, para uma transferncia de
disco. Ao contrrio, latncia ou tempo de resposta o tempo entre o incio e o trminode um
evento, como milissegundos, para um acesso ao disco. A Figura1.9 representa a melhoria
relativa na largura de banda e a latncia para os marcos da tecnologia de microproces-
sadores, memria, redes e discos. A Figura1.10 descreve os exemplos e os marcos com
mais detalhes.
O desempenho o principal diferenciador para microprocessadores e redes, de modo
que eles tm visto os maiores ganhos: 10.000-20.000X em largura de banda e 30-80X em
latncia. A capacidade geralmente mais importante do que o desempenho para memria
e discos, de modo que a capacidade melhorou mais, embora seus avanos de largura de
banda de 300-1.200X ainda sejam muito maiores do que seus ganhos em latncia de 6-8X.

FIGURA 1.9 Representao simples dos marcos de largura de banda e latncia da Figura1.10 em relao
ao primeiro marco.
Observe que a latncia melhorou de 6X a 80X, enquanto a largura de banda melhorou cerca de 300X a 25.000X.
Atualizao de Patterson (2004).
18 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

FIGURA 1.10 Marcos de desempenho por 25-40 anos para microprocessadores, memria, redes e discos.
Os marcos do microprocessador so vrias geraes de processadores IA-32, variando desde um 80286 microcodificado com barramento
de 16 bits at um Core i7 multicor, com execuo fora de ordem, superpipelined. Os marcos de mdulo de memria vo da DRAM plana de 16 bits de
largura at a DRAM sncrona verso 3 com taxa de dados dupla com 64 bits de largura. As redes Ethernet avanaram de 10Mb/s at 100Gb/s.
Os marcos de disco so baseados na velocidade de rotao, melhorando de 3.600 RPM at 15.000 RPM. Cada caso a largura de banda
no melhor caso, e a latncia o tempo para uma operao simples, presumindo-se que no haja disputa. Atualizao
de Patterson (2004).
1.5 Tendncias na alimentao dos circuitos integrados 19

Claramente, a largura de banda ultrapassou a latncia por essas tecnologias e provavel-


mente continuar dessa forma. Uma regra prtica simples que a largura de banda cresce
ao menos pelo quadrado da melhoria na latncia. Os projetistas de computadores devem
levar isso em conta para o planejamento.

Escala de desempenho de transistores e fios


Os processos de circuito integrado so caracterizados pela caracterstica de tamanho, que
o tamanho mnimo de um transistor ou de um fio na dimenso x ou y. Os tamanhos
diminuram de 10m em 1971 para 0,0032m em 2011; na verdade, trocamos as unidades,
de modo que a produo em 2011 agora referenciada como 32 nanmetros, e chipsde
22 nanmetros esto a caminho. Como a contagem de transistores por milmetro qua-
drado de silcio determinada pela superfcie de um transistor, a densidade de transistores
quadruplica com uma diminuio linear no tamanho do recurso.
Porm, o aumento no desempenho do transistor mais complexo. medida que os
tamanhos diminuem, os dispositivos encolhem quadruplicadamente nas dimenses
horizontal e vertical. O encolhimento na dimenso vertical requer uma reduo na
voltagem de operao para manter a operao e a confiabilidade dos transistores correta.
Essa combinao de fatores de escala leva a um inter-relacionamento entre o desempenho
do transistor e a carecterstica de tamanho do processo. Para uma primeira aproximao,
o desempenho do transistor melhora linearmente com a diminuio de seu tamanho.
O fato de a contagem de transistores melhorar em quatro vezes, com uma melhoria linear
no desempenho do transistor, tanto o desafio quanto a oportunidade para a qual os
arquitetos de computadores foram criados! Nos primeiros dias dos microprocessadores, a
taxa de melhoria mais alta na densidade era usada para passar rapidamente de microproces-
sadores de 4 bits para 8 bits, para 16 bits, para 32 bits, para 64 bits. Mais recentemente,
as melhorias de densidade admitiram a introduo de mltiplos microprocessadores por
chip, unidades SIMD maiores, alm de muitas das inovaes em execuo especulativa e
em caches encontradas nos Captulos2,3,4 e5.
Embora os transistores geralmente melhorem em desempenho com a diminuio do
tamanho, os fios em um circuito integrado no melhoram. Em particular, o atraso de sinal
em um fio aumenta na proporo com o produto de sua resistncia e de sua capacitncia.
Naturalmente, medida que o tamanho diminui, os fios ficam mais curtos, mas a resis-
tncia e a capacitncia por tamanho unitrio pioram. Esse relacionamento complexo, pois
tanto a resistncia quanto a capacitncia dependem de aspectos detalhados do processo,
da geometria de um fio, da carga sobre um fio e at mesmo da adjacncia com outras es-
truturas. Existem aperfeioamentos ocasionais no processo, como a introduo de cobre,
que oferecem melhorias de uma nica vez no atraso do fio.
Porm, em geral, o atraso do fio no melhora muito em comparao com o desempenho
do transistor, criando desafios adicionais para o projetista. Nos ltimos anos, o atraso do
fio tornou-se uma limitao de projeto importante para grandes circuitos integrados e
normalmente mais crtico do que o atraso do chaveamento do transistor. Fraes cada vez
maiores de ciclo de clock tm sido consumidas pelo atraso de propagao dos sinais nos fios.

1.5 TENDNCIAS NA ALIMENTAO


DOS CIRCUITOS INTEGRADOS
Hoje, a energia o segundo maior desafio enfrentado pelo projetista de computadores
para praticamente todas as classes de computador. Primeiramente, a alimentao precisa
20 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

ser trazida e distribuda pelo chip, e os microprocessadores modernos utilizam centenas


de pinos e vrias camadas de interconexo apenas para alimentao e terra. Alm disso,
a energia dissipada como calor e precisa ser removida.

Potncia e energia: uma perspectiva de sistema


Como um arquiteto de sistema ou um usurio devem pensar sobre o desempenho, a
potncia e a energia? Do ponto de vista de um projetista de sistema, existem trs preocu-
paes principais.
Em primeiro lugar, qual a potncia mxima que um processador pode exigir? Atender a
essa demanda pode ser importante para garantir a operao correta. Por exemplo, se um
processador tenta obter mais potncia do que a fornecida por um sistema de alimentao
(obtendo mais corrente do que o sistema pode fornecer), em geral o resultado uma queda
de tenso que pode fazer o dispositivo falhar. Processadores modernos podem variar muito
em consumo de potncia com altos picos de corrente. Portanto, eles fornecem mtodos
de indexao de tenso que permitem ao processador ficar mais lento e regular a tenso
dentro de uma margem grande. Obviamente, fazer isso diminui o desempenho.
Em segundo lugar, qual o consumo de potncia sustentado? Essa mtrica amplamente
chamada projeto trmico de potncia (Thermal Design Power TDP), uma vez que determi-
na o requisito de resfriamento. O TDP no nem potncia de pico, em alguns momentos
cerca de 1,5 vez maior, nem a potncia mdia real que ser consumida durante um dado
clculo, que provavelmente ser ainda menor. Geralmente, uma fonte de alimentao tpica
projetada para atender ou exceder o TDP. No proporcionar resfriamento adequado vai
permitir temperatura de juno no processador exceder seu valor mximo, resultando
em uma falha no dispositivo, possivelmente com danos permanentes. Os processadores
modernos fornecem dois recursos para ajudar a gerenciar o calor, uma vez que a potncia
mxima (e, portanto, o calor e o aumento de temperatura) pode exceder, a longo prazo,
a mdia especificada pela TDP. Primeiro, conforme a temperatura se aproxima do limite
de temperatura de juno, os circuitos reduzem a taxa de clock, reduzindo tambm a
potncia. Se essa tcnica no tiver sucesso, um segundo protetor de sobrecarga ativado
para desativar o chip.
O terceiro fator que os projetistas e usurios devem considerar a energia e a eficincia
energtica. Lembre-se de que potncia simplesmente energia por unidade de tempo: 1
watt=1 joule por segundo. Qual a mtrica correta para comparar processadores: energia ou
potncia? Em geral, a energia sempre uma mtrica melhor, porque est ligada a uma tarefa
especfica e ao tempo necessrio para ela. Em particular, a energia para executar uma carga
de trabalho igual potncia mdia vezes o tempo de execuo para a carga de trabalho.
Assim, se quisermos saber qual dentre dois processadores mais eficiente para uma dada
tarefa, devemos comparar o consumo de energia (no a potncia) para realiz-la. Por
exemplo, o processador A pode ter um consumo de potncia mdio 20% maior do que
o processador B, mas se A executar a tarefa em apenas 70% do tempo necessrio para B,
seu consumo de energia ser 1,20,7=0,84, que obviamente melhor.
Pode-se argumentar que, em um grande servidor ou em uma nuvem, suficiente considerar
a potncia mdia, uma vez que muitas vezes se supe que a carga de trabalho seja infinita,
mas isso equivocado. Se nossa nuvem fosse ocupada por processadores B em vez de
processadores A, faria menos trabalho pela mesma quantidade de energia gasta. Usar a
energia para comparar as alternativas evita essa armadilha. Seja uma carga de trabalho
fixa, uma nuvem warehouse-scale, seja um smartphone, comparar a energia ser o modo
correto de comparar alternativas de processador, j que tanto a conta de eletricidade para
1.5 Tendncias na alimentao dos circuitos integrados 21

a nuvem quanto o tempo de vida da bateria para o smartphone so determinados pela


energia consumida.
Quando o consumo de potncia uma medida til? O uso primrio legtimo como
uma restrio; por exemplo, um chip pode ser limitado a 100 watts. Isso pode ser usado
como mtrica se a carga de trabalho for fixa, mas ento s uma variao da verdadeira
mtrica de energia por tarefa.

Energia e potncia dentro de um microprocessador


Para os chips de CMOS, o consumo de energia dominante tradicional tem ocorrido no
chaveamento de transistores, tambm chamada energia dinmica. A energia exigida por
transistor proporcional ao produto da capacitncia de carga do transistor ao quadrado
da voltagem:
Energiadinmica Carga capacitiva Voltagem 2

Essa equao a energia de pulso da transio lgica de 010 ou 101. A energia


de uma nica transio (01 ou 10) , ento:

Energiadinmica 1 / 2Carga capacitiva Voltagem 2

A potncia necessria por transistor somente o produto da energia de uma transio


multiplicada pela frequncia das transies:

Potnciadinmica 1 / 2Carga capacitiva Voltagem 2 Frequncia de chaveamento

Para uma tarefa fixa, reduzir a taxa de clock reduz a potncia, mas no a energia.
Obviamente, a potncia dinmica e a energia so muito reduzidas quando se reduz a
voltagem, por isso as voltagens caram de 5V para pouco menos de 1V em 20 anos. A carga
capacitiva uma funo do nmero de transistores conectados a uma sada e tecnologia,
que determina a capacitncia dos fios e transistores.

Exemplo Hoje, alguns microprocessadores so projetados para ter voltagem ajus-


tvel, de modo que uma reduo de 15% na voltagem pode resultar em uma
reduo de 15% na frequncia. Qual seria o impacto sobre a energia dinmica
e a potncia dinmica?
Resposta Como a capacitncia inalterada, a resposta para a energia a razo das
voltagens, uma vez que a capacitncia no muda:
Energianova (Voltagem 0,85)2
= 0,72 = 0,852 = 0,72
Energiavelha Voltagem 2

reduzindo assim a potncia para cerca de 72% da original. Para a potncia,


adicionamos a taxa das frequncias
Energianova (Frequncia dechaveamento 0,85)
= 0,72 = 0,61
Energiavelha Frequncia dechaveamento

reduzindo a potncia para cerca de 61% do original.

Ao passarmos de um processo para outro, o aumento no nmero de transistores chaveados


e a frequncia com que eles chaveiam dominam a diminuio na capacitncia de carga e
voltagem, levando a um crescimento geral no consumo de potncia e energia. Os primeiros
microprocessadores consumiam menos de 1 watt, e os primeiros microprocessadores de
32 bits (como o Intel 80386) usavam cerca de 2 watts, enquanto um Intel Core i7 de
3,3GHz consome 130 watts. Visto que esse calor precisa ser dissipado de um chip com cerca
de 1,5cm em um lado, estamos alcanando os limites do que pode ser resfriado pelo ar.
22 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

Dada a equao anterior, voc poderia esperar que o crescimento da frequncia de clock
diminusse se no pudssemos reduzir a voltagem ou aumentar a potncia por chip. A
Figura1.11 mostra que esse , de fato, o caso desde 2003, mesmo para os microproces-
sadores que tiveram os melhores desempenhos a cada ano. Observe que esse perodo de
taxas constantes de clock corresponde ao perodo de baixa melhoria de desempenho na
Figura1.1.
Distribuir a potncia, retirar o calor e impedir pontos quentes tm tornado-se desafios cada
vez mais difceis. A potncia agora a principal limitao para o uso de transistores; no
passado, era a rea bruta do silcio. Portanto, os microprocessadores modernos oferecem
muitas tcnicas para tentar melhorar a eficincia energtica, apesar das taxas de clock e
tenses de alimentao constantes:
1. No fazer nada bem. A maioria dos microprocessadores de hoje desliga o clock
de mdulos inativos para economizar energia e potncia dinmica. Por exemplo,
se nenhuma instruo de ponto flutuante estiver sendo executada, o clock
da unidade de ponto flutuante ser desativado. Se alguns ncleos estiverem inativos,
seus clocks sero interrompidos.
2. Escalamento dinmico de voltagem-frequncia (Dynamic Voltage-Frequency Scaling
DVFS). A segunda tcnica vem diretamente das frmulas anteriores. Dispositivos
pessoais mveis, laptops e, at mesmo, servidores tm perodos de baixa atividade,
em que no h necessidade de operar em frequncias de clock e voltagens mais
elevadas. Os microprocessadores modernos costumam oferecer algumas frequncias

FIGURA 1.11 Crescimento na taxa de clock dos microprocessadores na Figura1.1.


Entre 1978 e 1986, a taxa de clock aumentou menos de 15% por ano, enquanto o desempenho aumentou em 25%
por ano. Durante o perodo de renascimento de 52% de melhoria de desempenho por ano entre 1986 e 2003, as
taxas de clock aumentaram em quase 40% por ano. Desde ento, a taxa de clock tem sido praticamente a mesma,
crescendo menos de 1% por ano, enquanto o desempenho de processador nico melhorou menos de 22% por ano.
1.5 Tendncias na alimentao dos circuitos integrados 23

FIGURA 1.12 Economias de energia para um servidor usando um microprocessador AMD Opteron, 8 GB
de DRAM, e um disco ATA.
A 1,8GHz, o servidor s pode lidar at dois teros da carga de trabalho sem causar violaes de nvel de servio, e a
1,0GHz ele s pode lidar com a segurana de um tero da carga de trabalho (Figura5.11, em Barroso e Hlzle,2009).

de clock e voltagens que usam menor potncia e energia. A Figura1.12 mostra


as economias potenciais de potncia atravs de DVFS para um servidor, conforme
a carga de trabalho diminui para trs diferentes taxas de clock: 2,4GHz, 1,8GHz
e 1GHz. A economia geral de potncia no servidor de cerca de 10-15% para cada
um dos dois passos.
3. Projeto para um caso tpico. Dado que os PMDs e laptops muitas vezes esto inativos,
a memria e o armazenamento oferecem modos de baixa potncia para poupar
energia. Por exemplo, DRAMs tm uma srie de modos de potncia cada vez
menores para aumentar a vida da bateria em PMDs e laptops, e h propostas
de discos que tm um modo de girar a taxas menores quando inativos, para poupar
energia. Infelizmente, voc no pode acessar DRAMs ou discos nesses modos, ento
deve retornar a um modo totalmente ativo para ler ou gravar, no importa quo
baixa seja a taxa de acesso. Como mencionado, os microprocessadores
para PCs, ao contrrio, foram projetados para um caso mais tpico de uso pesado
a altas temperaturas de operao, dependendo dos sensores de temperatura
no chip para detectar quando a atividade deve ser automaticamente reduzida
para evitar sobreaquecimento. Essa reduo de velocidade de emergncia
permite aos fabricantes projetar para um caso mais tpico e, ento, depender desse
mecanismo de segurana se algum realmente executar programas que consumam
muito mais potncia do que tpico.
4. Overclocking. Em 2008, a Intel comeou a oferecer o modo Turbo, em que o chip
decide que seguro rodar a uma taxa maior de clock por um curto perodo,
possivelmente em alguns poucos ncleos, at que a temperatura comece a subir.
Por exemplo, o Core i7 de 3,3GHz pode rodar em exploses curtas a 3,6GHz.
De fato, todos os microprocessadores de maior desempenho a cada ano desde 2008,
indicados na Figura1.1, ofereceram overclocking temporrio de cerca de 10% acima
da taxa de clock nominal. Para cdigo de thread nico, esses microprocessadores
podem desligar todos os ncleos, com exceo de um, e rod-lo a uma taxa
de clock ainda maior. Observe que, enquanto o sistema operacional pode desligar
o modo Turbo, no h notificao, uma vez que ele seja habilitado. Assim,
os programadores podem se surpreender ao ver que seus programas variam
em desempenho devido temperatura ambiente!
24 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

Embora a potncia dinmica seja a principal fonte de dissipao de potncia na CMOS,


a potncia esttica est se tornando uma questo importante, pois a corrente de fuga flui
at mesmo quando um transistor est desligado:

Potnciaesttica Correnteesttica Voltagem

ou seja, a potncia esttica proporcional ao nmero de dispositivos.


Assim, aumentar o nmero de transistores aumenta a potncia, mesmo que eles estejam
inativos, e a corrente de fuga aumenta em processadores com transistores de menor
tamanho. Como resultado, sistemas com muito pouca potncia ainda esto passando a
voltagem para mdulos inativos, a fim de controlar a perda decorrente da fuga. Em 2011,
a meta para a fuga era de 25% do consumo total de energia, mas a fuga nos projetos de
alto desempenho muitas vezes ultrapassou bastante esse objetivo. A fuga pode ser de at
50% em tais chips, em parte por causa dos maiores caches de SRAM, que precisam de
potncia para manter os valores de armazenamento (o S em SRAM de esttico static).
A nica esperana de impedir a fuga desligar a alimentao de subconjuntos dos chips.
Por fim, como o processador s uma parte do custo total de energia de um sistema,
pode fazer sentido usar um que seja mais rpido e menos eficiente em termos de energia
para permitir ao restante do sistema entrar em modo sleep. Essa estratgia conhecida
como race-to-halt.
A importncia da potncia e da energia aumentou o cuidado na avaliao sobre a eficincia
de uma inovao, ento agora a avaliao primria inclui as tarefas por joule ou desempe-
nho por watt, ao contrrio do desempenho por mm2 de silcio. Essa nova mtrica afeta as
abordagens do paralelismo, como veremos nos Captulos4 e5.

1.6 TENDNCIAS NO CUSTO


Embora existam projetos de computador nos quais os custos costumam ser menos impor-
tantes especificamente, supercomputadores , projetos sensveis ao custo tornam-se
primordiais. Na realidade, nos ltimos 30 anos, o uso de melhorias tecnolgicas para
reduzir o custo, alm de aumentar o desempenho, tem sido um tema importante no setor
de computao.
Os livros-texto normalmente ignoram a parte custo do par custo-desempenho, porque os
custos mudam, tornando os livros desatualizados e porque essas questes so sutis, diferindo
entre os segmentos do setor. Mesmo assim, ter compreenso do custo e de seus fatores
essencial para os projetistas tomarem decises inteligentes quanto a um novo recurso ser ou
no includo nos projetos em que o custo importante (imagine os arquitetos projetando
prdios sem qualquer informao sobre os custos das vigas de ao e do concreto!).
Esta seo trata dos principais fatores que influenciam o custo de um computador e o
modo como esses fatores esto mudando com o tempo.

O impacto do tempo, volume e commodities


O custo de um componente de computador manufaturado diminui com o tempo, mes-
mo sem que haja grandes melhorias na tecnologia de implementao bsica. O princpio
bsico que faz os custos carem a curva de aprendizado os custos de manufatura dimi-
nuem com o tempo. A prpria curva de aprendizado mais bem medida pela mudana
no rendimento a porcentagem dos dispositivos manufaturados que sobrevivem ao
procedimento de teste. Seja um chip, uma placa, seja um sistema, os projetos que tm o
dobro de rendimento tero a metade do custo.
1.6 Tendncias no custo 25

Entender como a curva de aprendizado melhora o rendimento fundamental para proteger


os custos da vida de um produto. Um exemplo disso que, a longo prazo, o preo por
megabyte da DRAM tem cado. Como as DRAMs costumam ter seu preo relacionado com
o custo com exceo dos perodos de escassez ou de oferta em demasia , o preo e o
custo da DRAM andam lado a lado.
Os preos de microprocessadores tambm caem com o tempo, mas, por serem menos
padronizados que as DRAMs, o relacionamento entre preo e custo mais complexo.
Em um perodo de competitividade significativa, o preo costuma acompanhar o custo
mais de perto, embora seja provvel que os vendedores de microprocessador quase nunca
tenham perdas.
O volume o segundo fator importante na determinao do custo. Volumes cada vez
maiores afetam o custo de vrias maneiras. Em primeiro lugar, eles reduzem o tempo neces-
srio para diminuir a curva de aprendizado, que parcialmente proporcional ao nmero
de sistemas (ou chips) manufaturados. Em segundo lugar, o volume diminui o custo, pois
aumenta a eficincia de compras e manufatura. Alguns projetistas estimaram que o custo
diminui cerca de 10% para cada duplicao do volume. Alm do mais, o volume diminui
a quantidade de custo de desenvolvimento que precisa ser amortizada por computador,
permitindo que os preos de custo e de venda sejam mais prximos.
Commodities so produtos essencialmente idnticos vendidos por vrios fornecedores em
grandes volumes. Quase todos os produtos ofertados nas prateleiras de supermercados so
commodities, assim como DRAMs, memria Flash, discos, monitores e teclados comuns.
Nos ltimos 25 anos, grande parte da ponta inferior do negcio de computador tornou-se
um negcio de commodity, focalizando a montagem de computadores desktop e laptops
que rodam o Microsoft Windows.
Como muitos fornecedores entregam produtos quase idnticos, isso altamente com-
petitivo. natural que essa competio diminua a distncia entre preo de custo e preo
de venda, mas que tambm aumente o custo. As redues ocorrem porque um mercadode
commodity possui volume e clara definio de produto, de modo que vrios fornecedores
podem competir pela montagem dos componentes para o produto. Como resultado,
o custo geral desse produto mais baixo, devido competio entre os fornecedores
dos componentes e eficincia de volume que eles podem conseguir. Isso fez com que
o negcio de computador, de produtos finais, fosse capaz de alcanar melhor preo-
desempenho do que outros setores e resultou em maior crescimento, embora com lucros
limitados (como comum em qualquer negcio de commodity).

Custo de um circuito integrado


Por que um livro sobre arquitetura de computadores teria uma seo sobre custos de
circuito integrado? Em um mercado de computadores cada vez mais competitivo, no
qual partes-padro discos, memria Flash, DRAMs etc. esto tornando-se parte
significativa do custo de qualquer sistema, os custos de circuito integrado tornam-se uma
parte maiordo custo que varia entre os computadores, especialmente na parte de alto
volume do mercado, sensvel ao custo. De fato, com a dependncia cada vez maior dos
dispositivos pessoais mveis em relao a sistemas em um chip (Systems On a Chip SOC)
completos, o custo dos circuitos integrados representa grande parte do custo do PMD.
Assim, os projetistas de computadores precisam entender os custos dos chips para entender
os custos dos computadores atuais.
Embora os custos dos circuitos integrados tenham cado exponencialmente, o processo
bsico de manufatura do silcio no mudou: um wafer ainda testado e cortado em dies,
26 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

que so encapsulados (Figs.1.13,1.14 e1.15). Assim, o custo de um circuito integrado


finalizado :
Custo do die + Custo de testar o die + Custo de encapsulamento e teste final
Custo do c.i. =
Rendimento de teste final

FIGURA 1.13 Fotografia de um die de microprocessador Intel Core i7, que ser avaliado nos Captulos2 a5.
As dimenses so 18,9mm por 13,6mm (257 mm2) em um processo de 45nm (cortesia da Intel).

FIGURA 1.14 Diagrama do die do Core i7 na Figura1.13, esquerda, com close-up do diagrama do segundo ncleo, direita.
1.6 Tendncias no custo 27

FIGURA 1.15 Esse wafer de 300mm contm 280 dies Sandy Dridge, cada um com 20,7 por 10,5mm
em um processo de 32nm.
(O Sandy Bridge o sucessor da Intel para o Nehalem usado no Core i7.) Com 216 mm2, a frmula para dies por wafer
estima 282 (cortesia da Intel).

Nesta seo, focalizamos o custo dos dies, resumindo os principais problemas referentes
ao teste e ao encapsulamento no final.
Aprender a prever o nmero de chips bons por wafer exige aprender primeiro quantos
dies cabem em um wafer e, depois, como prever a porcentagem deles que funcionar. A
partir disso, simples prever o custo:
Custo do wafer
Custo do die =
Dies por wafer Rendimento do die

O recurso mais interessante desse primeiro termo da equao de custo do chip sua
sensibilidade ao tamanho do die, como veremos a seguir.
O nmero de dies por wafer aproximadamente a rea do wafer dividida pela rea do
die. Ela pode ser estimada com mais preciso por

(Dimetro do wafer / 2)2 Dimetro do wafer


Dies por wafer =
rea do die 2 rea do die

O primeiro termo a razo da rea do wafer (r2) pela rea do die. O segundo compensa
o problema do encaixe quadrado em um furo redondo dies retangulares perto da
periferia de wafers redondos. A diviso da circunferncia (d) pela diagonal de um die
quadrado aproximadamente o nmero de dies ao longo da borda.
28 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

Exemplo Encontre o nmero de dies por wafer de 300 mm (30 cm) para um die que
possui 1,5 cm em um lado e para um die que possui 1,0 cm em outro.
Resposta Quando a rea do die 2,25 cm2:
(30 / 2)2 30 706,9 94,2
Diespor wafer = = = = 270
2,25 2 2,25 2,25 2,12

Uma vez que a rea do die maior 2,25 vezes maior, h aproximadamente
2,25 vezes dies menores por wafer:
(30 / 2)2 30 706,9 94,2
Diespor wafer = = = = 640
1,00 2 1,00 1,00 1,41

Porm, essa frmula s d o nmero mximo de dies por wafer. A questo decisiva : qual
a frao de dies bons em um wafer, ou seja, o rendimento de dies? Um modelo simples
de rendimento de circuito integrado que considera que os defeitos so distribudos alea-
toriamente sobre o wafer e esse rendimento inversamente proporcional complexidade
do processo de fabricao, leva ao seguinte:

Rendimento do die = Rendimento do wafer 1 / (1 + Defeitos por unidade de rea rea do die)N

Essa frmula de Bose-Einstein um modelo emprico desenvolvido pela observao do


rendimento de muitas linhas de fabricao (Sydow, 2006). O rendimento do wafer considera
os wafers que so completamente defeituosos e, por isso, no precisam ser testados. Para
simplificar, vamos simplesmente considerar que o rendimento do wafer seja de 100%. Os
defeitos por unidade de rea so uma medida dos defeitos de fabricao aleatrios que
ocorrem. Em 2010, esse valor normalmente de 0,1-0,3 defeito por centmetro quadrado,
ou 0,016-0,057 defeito por centmetro quadrado, para um processo de 40nm, pois isso
depende da maturidade do processo (lembre-se da curva de aprendizado mencionada).
Por fim, N um parmetro chamado fator de complexidade da fabricao. Para processos de
40nm em 2010, N variou de 11,5-15,5.

Exemplo Encontre o rendimento para os dies com 1,5cm de um lado e 1,0cm de ou-
tro, considerando uma densidade de defeito de 0,031 por cm2 e N de 13,5.
Resposta As reas totais de die so 2,25 cm2 e 1,00 cm2. Para um die maior, o rendi-
mento :
Rendimentododie = 1 / (1 + 0,031 2,25)13,5 = 0,40

Para o die menor, ele o rendimento do die:


Rendimentododie = 1 / (1 + 0,031 1,00)13,5 = 0,66

Ou seja, menos da metade de todo o die grande bom, porm mais de dois
teros do die pequeno so bons.

O resultado o nmero de dies bons por wafer, que vem da multiplicao dos dies por
wafer pelo rendimento do die usado para incorporar os impactos dos defeitos. Os exem-
plos anteriores preveem cerca de 109 dies bons de 2,25cm2 e 424 dies bons de 1,00cm2
no wafer de 300mm. Muitos microprocessadores se encontram entre esses dois tamanhos.
Os processadores embarcados de 32 bits de nvel inferior s vezes possuem at 0,10cm2,
1.6 Tendncias no custo 29

e os processadores usados para controle embarcado (em impressoras, automveis etc.) s


vezes tm menos de 0,04cm2.
Devido s considerveis presses de preo sobre os produtos de commodity, como
DRAM e SRAM, os projetistas incluram a redundncia como um meio de aumentar
o rendimento. Por vrios anos, as DRAMs regularmente incluram algumas clulas de
memria redundantes, de modo que certo nmero de falhas possa ser acomodado. Os
projetistas tm usado tcnicas semelhantes, tanto em SRAMs padro quanto em grandes
arrays de SRAM, usados para caches dentro dos microprocessadores. bvio que a
presena de entradas redundantes pode ser usada para aumentar significativamente
o rendimento.
O processamento de um wafer de 300mm (12 polegadas) de dimetro em tecnologiade
ponta custava US$ 5.000-6.000 em 2010. Considerando um custo de wafer processado
de US$ 5.500, o custo do die de 1,00cm2 seria em torno de US$ 13, mas o custo por
diede 2,25cm2 seria cerca de US$ 51, quase quatro vezes o custo para um die com pouco
mais que o dobro do tamanho.
Por que um projetista de computador precisa se lembrar dos custos do chip? O processo
de manufatura dita o custo e o rendimento do wafer, e os defeitos por unidade de rea,de
modo que o nico controle do projetista a rea do die. Na prtica, como o nmero
de defeitos por unidade de rea pequeno, o nmero de dies bons por wafer e, portanto,
o custo por die crescem rapidamente, conforme o quadrado da rea do die. O projetista
de computador afeta o tamanho do die e, portanto, o custo, tanto pelas funes includas
ou excludas quanto pelo nmero de pinos de E/S.
Antes que tenhamos uma parte pronta para uso em um computador, os dies precisam ser
testados (para separar os bons dies dos ruins), encapsulados e testados novamente aps
o encapsulamento. Esses passos aumentam consideravelmente os custos.
Essa anlise focalizou os custos variveis da produo de um die funcional, que apro-
priado para circuitos integrados de alto volume. Porm, existe uma parte muito importante
do custo fixo que pode afetar significativamente o custo de um circuito integrado para
baixos volumes (menos de um milho de partes), o custo de um conjunto de mscaras.
Cada etapa do processo de circuito integrado requer uma mscara separada. Assim, para
os modernos processos de fabricao de alta densidade, com quatro a seis camadas de
metal, os custos por mscara ultrapassam US$ 1 milho. Obviamente, esse grande custo
fixo afeta o custo das rodadas de prototipagem e depurao, e para produo em baixo
volume pode ser uma parte significativa do custo de produo. Como os custos por
mscara provavelmente continuaro a aumentar, os projetistas podem incorporar a lgica
reconfigurvel para melhorar a flexibilidade de uma parte ou decidir usar gate-arrays (que
possuem nmero menor de nveis de mscara de customizao) e, assim, reduzir as im-
plicaes de custo das mscaras.

Custo versus preo


Com os computadores se tornando commodities, a margem entre o custo para a manufatu-
ra de um produto e o preo pelo qual o produto vendido tem diminudo. Essa margem
considera a pesquisa e desenvolvimento (P&D), o marketing, as vendas, a manuteno
do equipamento de manufatura, o aluguel do prdio, o custo do financiamento, os lu-
cros pr-taxados e os impostos de uma empresa. Muitos engenheiros ficam surpresos ao
descobrir que a maioria das empresas gasta apenas de 4% (no negcio de PC commodity)
a 12% (no negcio de servidor de alto nvel) de sua receita em P&D, que inclui toda a
engenharia.
30 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

Custo de fabricao versus custo de operao


Nas primeiras quatro edies deste livro, custo queria dizer o valor gasto para construir um
computador e preo significava a quantia para comprar um computador. Com o advento
de computadores em escala warehouse, que contm dezenas de milhares de servidores, o
custo de operar os computadores significativo em adio ao custo de compra.
Como o Captulo6 mostra, o preo de compra amortizado dos servidores e redes corresponde
a um pouco mais de 60% do custo mensal para operar um computador em escala warehouse,
supondo um tempo de vista curto do equipamento de TI de 3-4 anos. Cerca de 30% dos custos
operacionais mensais tm relao com o uso de energia e a infraestrutura amortizada para
distribu-la e resfriar o equipamento de TI, apesar de essa infraestrutura ser amortizada ao
longo de 10 anos. Assim, para reduzir os custos em um computador em escala de warehouse,
os arquitetos de computadores precisam usar a energia com eficincia.

1.7DEPENDNCIA
Historicamente, os circuitos integrados sempre foram um dos componentes mais confiveis
de um computador. Embora seus pinos fossem vulnerveis e pudesse haver falhas nos
canais de comunicao, a taxa de erro dentro do chip era muito baixa. Mas essa sabedoria
convencional est mudando medida que chegamos a tamanhos de 32nm e ainda
menores: falhas transientes e permanentes se tornaro mais comuns, de modo que os
arquitetos precisaro projetar sistemas para lidar com esses desafios. Esta seo apresenta
um rpido panorama dessas questes de dependncia, deixando a definio oficial dos
termos e das tcnicas para a Seo D.3 do Apndice D.
Os computadores so projetados e construdos em diferentes camadas de abstrao.
Podemos descer recursivamente por um computador, vendo os componentes se am-
pliarem para subsistemas completos at nos depararmos com os transistores individuais.
Embora algumas falhas, como a falta de energia, sejam generalizadas, muitas podem ser
limitadas a um nico componente em um mdulo. Assim, a falha pronunciada deum
mdulo em um nvel pode ser considerada meramente um erro de componente em
um mdulo de nvel superior. Essa distino til na tentativa de encontrar maneiras de
montar computadores confiveis.
Uma questo difcil decidir quando um sistema est operando corretamente. Esse ponto
filosfico tornou-se concreto com a popularidade dos servios de internet. Os provedores
de infraestrutura comearam a oferecer Service Level Agreements (SLA) ou Service Level
Objectives (SLO) para garantir que seu servio de rede ou energia fosse confivel. Por
exemplo, eles pagariam ao cliente uma multa se no cumprissem um acordo por mais de
algumas horas por ms. Assim, um SLA poderia ser usado para decidir se o sistema estava
ativo ou inativo.
Os sistemas alternam dois status de servio com relao a um SLA:
1. Realizao do servio, em que o servio entregue conforme o que foi especificado.
2. Interrupo de servio, em que o servio entregue diferente do SLA.
As transies entre esses dois status so causadas por falhas (do status 1 para o 2) ou res-
tauraes (do status 2 para o 1). Quantificar essas transies leva s duas principais medidas
de dependncia:
j Confiabilidade do mdulo uma medida da realizao contnua do servio (ou,
de forma equivalente, do tempo para a falha) de um instante inicial de referncia.
Logo, o tempo mdio para a falha (Mean Time To Failure MTTF) uma medida
1.7Dependncia 31

de confiabilidade. O recproco do MTTF uma taxa de falhas, geralmente informada


como falhas por bilho de horas de operao ou falhas em tempo (Failures In Time
FIT). Assim, um MTTF de 1.000.000 de horas igual a 109/106 ou 1.000 FIT.
A interrupo do servio medida como tempo mdio para o reparo (Mean Time
To Repair MTTR). O tempo mdio entre as falhas (Mean Time Between Failures
MTBF) simplesmente a soma MTTF+MTTR. Embora o MTBF seja bastante usado,
normalmente o MTTF o termo mais apropriado. Se uma coleo de mdulos tiver
tempos de vida distribudos exponencialmente significando que a idade de um
mdulo no importante na probabilidade de falha , a taxa de falha geral
do conjunto a soma das taxas de falha dos mdulos.
j Disponibilidade do mdulo uma medida da realizao do servio com relao
alternncia de dois status de realizao e interrupo. Para sistemas no
redundantes com reparo, a disponibilidade do mdulo

MTTF
Disponibilidade do mdulo =
(MTTF + MTTR)

Observe que agora a confiabilidade e a disponibilidade so medies quantificveis,


em vez de sinnimos de dependncia. A partir dessas definies, podemos estimar
a confiabilidadede um sistema quantitativamente se fizermos algumas suposies sobrea
confiabilidade dos componentes e se essas falhas forem independentes.

Exemplo Considere um subsistema de disco com os seguintes componentes


e MTTF:
j 10 discos, cada qual classificado em 1.000.000 horas de MTTF
j 1 controladora SCSI, 500.000 horas de MTTF
j 1 fonte de alimentao, 200.000 horas de MTTF
j 1 ventilador, 200.000 horas de MTTF
j 1 cabo SCSI, 1.000.000 de horas de MTTF
Usando as suposies simplificadas de que os tempos de vida so dis-
tribudos exponencialmente e de que as falhas so independentes, calcule
o MTTF do sistema como um todo.
Resposta A soma das taxas de falha :
1 1 1 1 1
Taxa de falhasistema = 10 + + + +
1.000.000 500.000 200.000 200.000 1.000.000
10 + 2 + 5 + 5 + 1 23 23.000
= + +
1.000.000 horas 1.000.000 1.000.000.000 horas

ou 23.000 FIT. O MTTF para o sistema exatamente o inverso da taxa de


falha:
1 1.000.000.000 horas
MTTFsistema = = = 43.500 horas
Taxa de falhasistema 23.000

ou pouco menos de cinco anos.

A principal maneira de lidar com a falha a redundncia, seja em tempo (repita a operao
para ver se ainda est com erro), seja em recursos (tenha outros componentes para utilizar
no lugar daquele que falhou). Quando o componente substitudo e o sistema totalmente
reparado, a dependncia do sistema considerada to boa quanto nova. Vamos quantificar
os benefcios da redundncia com um exemplo.
32 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

Exemplo Os subsistemas de disco normalmente possuem fontes de alimentao


redundantes para melhorar a sua pendncia. Usando os componentes e
MTTFs do exemplo anterior, calcule a confiabilidade de uma fonte de ali-
mentao redundante. Considere que uma fonte de alimentao suficiente
para alimentar o subsistema de disco e que estamos incluindo uma fonte de
alimentao redundante.
Resposta Precisamos de uma frmula para mostrar o que esperar quando podemos
tolerar uma falha e ainda oferecer servio. Para simplificar os clculos,
consideramos que os tempos de vida dos componentes so distribudos expo-
nencialmente e que no existe dependncia entre as falhas de componente.
O MTTF para nossas fontes de alimentao redundantes o tempo mdio
at que uma fonte de alimentao falhe dividido pela chance de que a outra
falhar antes que a primeira seja substituda. Assim, se a possibilidade de
uma segunda falha antes do reparo for pequena, o MTTF do par ser grande.
Como temos duas fontes de alimentao e falhas independentes, o tempo
mdio at que um disco falhe MTTFfonte de alimentao/2. Uma boa aproxima-
o da probabilidade de uma segunda falha MTTR sobre o tempo mdio
at que a outra fonte de alimentao falhe. Logo, uma aproximao razovel
para um par redundante de fontes de alimentao
MTTFfonte de alimentao / 2 MTTF2 fonte de alimentao / 2 MTTF2 fonte de alimentao
MTTFpar de fontesde alimentao = = =
MTTRfonte de alimentao MTTRfonte de alimentao 2 MTTRfonte de alimentao
MTTFfonte de alimentao

Usando os nmeros de MTTF anteriores, se considerarmos que so neces-


srias em mdia 24 horas para um operador humano notar que uma fonte
de alimentao falhou e substitu-la, a confiabilidade do par de fontes de
alimentao tolerante a falhas
MTTF2 fonte de alimentao 200.0002
MTTFpar de fontesde alimentao = = 830.000.000
2 MTTRfonte de alimentao 2 24

tornando o par cerca de 4.150 vezes mais confivel do que uma nica fonte
de alimentao.

Tendo quantificado o custo, a alimentao e a dependncia da tecnologia de computadores,


estamos prontos para quantificar o desempenho.

1.8 MEDIO, RELATRIO E RESUMO DO DESEMPENHO


Quando dizemos que um computador mais rpido do que outro, o que isso significa?
O usurio de um computador desktop pode afirmar que um computador mais rpido
quando um programa roda em menos tempo, enquanto um administrador do Amazon.
com pode dizer que um computador mais rpido quando completa mais transaes por
hora. O usurio do computador est interessado em reduzir o tempo de resposta o tempo
entre o incio e o trmino de um evento , tambm conhecido como tempo de execuo.
O administrador de um grande centro de processamento de dados pode estar interessado
em aumentar o throughput a quantidade total de trabalho feito em determinado tempo.
Comparando as alternativas de projeto, normalmente queremos relacionar o desempe-
nho de dois computadores diferentes, digamos, X e Y. A frase X mais rpido do que Y
usada aqui para significar que o tempo de resposta ou o tempo de execuo inferior
em X em relao a Y para determinada tarefa. Em particular, X n vezes mais rpido do
que Y significar:
Tempo de execuoY
=n
Tempo de execuoX
1.8 Medio, relatrio e resumo do desempenho 33

Como o tempo de execuo o recproco do desempenho, existe o seguinte relaciona-


mento:
1
Tempo de execuoY DesempenhoY DesempenhoX
n= = =
Tempo de execuoX 1 DesempenhoY
DesempenhoX

A frase O throughput de X 1,3 vez maior que Y significa que o nmero de tarefas com-
pletadas por unidade de tempo no computador X 1,3 vez o nmero completado em Y.
Infelizmente, o tempo nem sempre a mtrica cotada em comparao com o desempenho
dos computadores. Nossa posio de que a nica medida consistente e confivel do
desempenho o tempo de execuo dos programas reais, e todas as alternativas propostas
para o tempo como medida ou aos programas reais como itens medidos por fim levaram
a afirmaes enganosas ou at mesmo a erros no projeto do computador.
At mesmo o tempo de execuo pode ser definido de diferentes maneiras, dependendo
do que ns contamos. A definio mais direta do tempo chamada tempo de relgio de
parede, tempo de resposta ou tempo decorrido, que a latncia para concluir uma tarefa, in-
cluindo acessos ao disco e memria, atividades de entrada/sada, overhead do sistema
operacional tudo. Com a multiprogramao, o processador trabalha em outro programa
enquanto espera pela E/S e pode no minimizar necessariamente o tempo decorrido de
um programa. Logo, precisamos de um termo para considerar essa atividade. O tempo
de CPU reconhece essa distino e significa o tempo que o processador est computando, no
incluindo o tempo esperando por E/S ou executando outros programas ( claro que o tempo
de resposta visto pelo usurio o tempo decorrido do programa, e no o tempo de CPU).
Os usurios que executam rotineiramente os mesmos programas seriam os candidatos
perfeitos para avaliar um novo computador. Para fazer isso, os usurios simplesmente
comparariam o tempo de execuo de suas cargas de trabalho a mistura de programas e
comandos do sistema operacional que os usurios executam em um computador. Porm,
poucos esto nessa situao feliz. A maioria precisa contar com outros mtodos para avaliar
computadores e normalmente outros avaliadores , esperando que esses mtodos
prevejam o desempenho para o uso do novo computador.

Benchmarks
A melhor escolha de benchmarks para medir o desempenho refere-se a aplicaes reais,
como o Google Goggles da Seo1.1. As tentativas de executar programas muito mais
simples do que uma aplicao real levaram a armadilhas de desempenho. Alguns exem-
plos so:
j kernels, que so pequenas partes-chave das aplicaes reais
j programas de brinquedo, que so programas de 100 linhas das primeiras tarefas de
programao, como o quicksort
j benchmarks sintticos, que so programas inventados para tentar combinar o perfil e
o comportamento de aplicaes reais, como o Dhrystone
Hoje, os trs esto desacreditados, porque o projetista/arquiteto do compilador pode cons-
pirar para fazer com que o computador parea mais rpido nesses programas do que em
aplicaes reais. Infelizmente para os autores deste livro, que, na quarta edio, derrubaram
a falcia sobre usar programas sintticos para caracterizar o desempenho achando que
os arquitetos de programas concordavam que ela era indiscutvel, o programa sinttico
Dhrystone ainda o benchmark mais mencionado para processadores embarcados!
34 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

Outra questo est relacionada com as condies nas quais os benchmarks so executados.
Um modo de melhorar o desempenho de um benchmark tem sido usar flags especficos de
benchmark. Esses flags normalmente causavam transformaes que seriam ilegais em muitos
programas ou prejudicariam o desempenho de outros. Para restringir esse processo e aumentar a
significncia dos resultados, os desenvolvedores de benchmark normalmente exigem que o ven-
dedor use um compilador e um conjunto de flags para todos os programas na mesma linguagem
(C ou C++). Alm dos flags (opes) do compilador, outra questo a que se refere permisso
das modificaes do cdigo-fonte. Existem trs tcnicas diferentes para resolver essa questo:
1. Nenhuma modificao do cdigo-fonte permitida.
2. As modificaes do cdigo-fonte so permitidas, mas basicamente impossveis.
Por exemplo, os benchmarks de banco de dados contam com programas de
banco de dados padro, que possuem dezenas de milhes de linhas de cdigo. As
empresas de banco de dados provavelmente no faro mudanas para melhorar o
desempenho de determinado computador.
3. Modificaes de fonte so permitidas, desde que a verso modificada produza a
mesma sada.
O principal problema que os projetistas de benchmark enfrentam ao permitir a modi-
ficao do fonte se ela refletir a prtica real e oferecer ideias teis aos usurios ou se
simplesmente reduzir a preciso dos benchmarks como previses do desempenho real.
Para contornar o risco de colocar muitos ovos em uma cesta, sries de aplicaes de bench-
mark, chamadas pacotes de benchmark, so uma medida popular do desempenho dos proces-
sadores com uma variedade de aplicaes. Naturalmente, esses pacotes so to bons quanto os
benchmarks individuais constituintes. Apesar disso, uma vantagem importante desses pacotes
que o ponto fraco de qualquer benchmark reduzido pela presena de outros benchmarks. O
objetivo de um pacote desse tipo caracterizar o desempenho relativo dos dois computadores,
particularmente para programas no includos, que os clientes provavelmente usaro.
Para dar um exemplo cauteloso, o EDN Embedded Microprocessor Benchmark Consortium
(ou EEMBC) um conjunto de 41 kernels usados para prever o desempenho de diferentes
aplicaes embarcadas: automotiva/industrial, consumidor, redes, automao de escritrios
e telecomunicaes. O EEMBC informa o desempenho no modificado e o desempenho
fria total, em que quase tudo entra. Por utilizar kernels, e devido s operaes de relacio-
namento, o EEMBC no tem a reputao de ser uma boa previso de desempenho relativo
de diferentes computadores embarcados em campo. O programa sinttico Dhrystone, que
o EEMBC estava tentando substituir, ainda relatado em alguns crculos embarcados.
Uma das tentativas mais bem-sucedidas para criar pacotes de aplicao de benchmark pa-
dronizadas foi a SPEC (Standard Performance Evaluation Corporation), que teve suas razes
nos esforos do final da dcada de 1980 para oferecer melhores benchmarks para estaes
de trabalho. Assim como o setor de computador tem evoludo com o tempo, tambm
evoluiu a necessidade de diferentes pacotes de benchmark hoje existem benchmarks
SPEC para abranger diferentes classes de aplicao. Todos os pacotes de benchmark SPEC
e seus resultados relatados so encontrados em <www.spec.org>.
Embora o enfoque de nossa anlise seja nos benchmarks SPEC em vrias das sees
seguintes, tambm existem muitos benchmarks desenvolvidos para PCs rodando o sis-
tema operacional Windows.

Benchmarks de desktop
Os benchmarks de desktop so divididos em duas classes amplas: benchmarks com uso
intensivo do processador e benchmarks com uso intensivo de grficos, embora muitos
1.8 Medio, relatrio e resumo do desempenho 35

benchmarks grficos incluam atividade intensa do processador. Originalmente, a SPEC


criou um conjunto de benchmarks enfocando o desempenho do processador (inicialmente
chamado SPEC89), que evoluiu para sua quinta gerao: SPEC CPU2006, que vem aps
SPEC2000, SPEC95, SPEC92 e SPEC89. O SPEC CPU2006 consiste em um conjunto de
12 benchmarks inteiros (CINT2006) e 17 benchmarks de ponto flutuante (CFP2006).
A Figura1.16 descreve os benchmarks SPEC atuais e seus ancestrais.

FIGURA 1.16 Programas do SPEC2006 e a evoluo dos benchmarks SPEC com o tempo, com programas inteiros na parte superior
e programas de ponto flutuante na parte inferior.
Dos 12 programas inteiros do SPEC2006, nove so escritos em C e o restante em C++. Para os programas de ponto flutuante, a composio de seis
em FORTRAN, quatro em C++, trs em C e quatro misturados entre C e Fortran. A figura mostra os 70 programas nas verses de 1989, 1992, 1995,
2000 e 2006. As descries de benchmark, esquerda, so apenas para o SPEC2006 e no se aplicam s anteriores. Os programas na mesma linha
de diferentes geraes do SPEC geralmente no esto relacionados; por exemplo, fpppp no o cdigo CFD como bwaves. Gcc o mais antigo do grupo.
Somente trs programas inteiros e trs programas de ponto flutuante so novos para o SPEC2006. Embora alguns sejam levados de uma gerao
para outra, a verso do programa muda e a entrada ou o tamanho do benchmark normalmente alterado para aumentar seu tempo de execuo
e evitar perturbao na medio ou domnio do tempo de execuo por algum fator diferente do tempo de CPU.
36 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

Os benchmarks SPEC so programas reais modificados para serem portveis e minimizar o


efeito da E/S sobre o desempenho. Os benchmarks inteiros variam de parte de um compilador
C at um programa de xadrez ou uma simulao de computador quntico. Os benchmarks
de ponto flutuante incluem cdigos de grade estruturados para modelagem de elemento
finito, cdigos de mtodo de partcula para dinmica molecular e cdigos de lgebra linear
dispersa para dinmica de fluidos. O pacote SPEC CPU til para o benchmarking de proces-
sador para sistemas de desktop e servidores de nico processador. Veremos os dados sobre
muitos desses programas no decorrer deste captulo. Entretanto, observe que esses programas
compartilham pouco com linguagens de programao e ambientes e o Google Goggles, que
a Seo1.1 descreve. O sete usa C++, o oito usa C e o nove usa Fortran! Eles esto at ligados
estatisticamente, e os prprios aplicativos so simples. No est claro que o SPENCINT2006
e o SPECFP2006 capturam o que excitante sobre a computao no sculo XXI.
Na Seo1.11, descrevemos as armadilhas que tm ocorrido no desenvolvimento do pacote
de benchmark SPEC, alm dos desafios na manuteno de um pacote de benchmark til
e previsvel.
O SPEC CPU2006 visa ao desempenho do processador, mas o SPEC oferece muitos outros
benchmarks.

Benchmarks de servidor
Assim como os servidores possuem funes mltiplas, tambm existem mltiplos tipos
de benchmark. O benchmark mais simples talvez seja aquele orientado a throughput do
processador. O SPEC CPU2000 usa os benchmarks SPEC CPU para construir um bench-
mark de throughput simples, em que a taxa de processamento de um multiprocessador
pode ser medida pela execuo de vrias cpias (normalmente tantas quanto os proces-
sadores) de cada benchmark SPEC CPU e pela converso do tempo de CPU em uma taxa.
Isso leva a uma medida chamada SPECrate, que uma medida de paralelismo em nvel
de requisio, da Seo1.2. Para medir o paralelismo de nvel de thread, o SPEC oferece o
que chamamos benchmarks de computao de alto desempenho com o OpenMP e o MPI.
Alm da SPECrate, a maioria das aplicaes de servidor e benchmarks possui atividade sig-
nificativa de E/S vinda do disco ou do trfego de rede, incluindo benchmarks para sistemas
de servidor de arquivos, para servidores Web e para sistemas de banco de dados e proces-
samento de transao. O SPEC oferece um benchmark de servidor de arquivos (SPECSFS)
e um benchmark de servidor Web (SPECWeb). O SPECSFS um benchmark para medir o
desempenho do NFS (Network File System) usando um script de solicitaes ao servidor
de arquivos; ele testa o desempenho do sistema de E/S (tanto E/S de disco quanto de
rede), alm do processador. O SPECSFS um benchmark orientado a throughput, mas
com requisitos importantes de tempo de resposta (o Apndice D tratar detalhadamente
de alguns benchmarks de arquivo e do sistema de E/S). O SPECWeb um benchmark de
servidor Web que simula vrios clientes solicitando pginas estticas e dinmicas de um
servidor, alm dos clientes postando dados no servidor. O SPECjbb mede o desempenho
do servidor para aplicativos Web escritos em Java. O benchmark SPEC mais recente o
SPECvirt_Sc2010, que avalia o desempenho end-to-end de servidores virtualizados de data
center incluindo hardware, a camada de mquina virtual e o sistema operacional virtuali-
zado. Outro benchmark SPEC recente mede a potncia, que examinaremos na Seo1.10.
Os benchmarks de processamento de transao (Transaction-Processing TP) medem a
capacidade de um sistema para lidar com transaes, que consistem em acessos e atuali-
zaes de banco de dados. Os sistemas de reserva area e os sistemas de terminal bancrio
so exemplos simples tpicos de TP; sistemas de TP mais sofisticados envolvem bancos
de dados complexos e tomada de deciso. Em meados da dcada de 1980, um grupo de
1.8 Medio, relatrio e resumo do desempenho 37

engenheiros interessados formou o Transaction Processing Council (TPC) independente


de fornecedor, para tentar criar benchmarks realistas e imparciais para TP. Os benchmarks
do TPC so descritos em <www.tpc.org>.
O primeiro benchmark TPC, TPC-A, foi publicado em 1985 e desde ento tem sido subs-
titudo e aprimorado por vrios benchmarks diferentes. O TPC-C, criado inicialmente em
1992, simula um ambiente de consulta complexo. O TPC-H molda o suporte deciso
ocasional as consultas no so relacionadas e o conhecimento de consultas passadas
no pode ser usado para otimizar consultas futuras. O TCP-E uma nova carga de traba-
lho de processamento de transao on-line (On-Line Transaction Processing OLTP)
que simula as contas dos clientes de uma firma de corretagem. O esforo mais recente
o TPC Energy, que adiciona mtricas de energia a todos os benchmarks TPC existentes.
Todos os benchmarks TPC medem o desempenho em transaes por segundo. Alm disso,
incluem um requisito de tempo de resposta, de modo que o desempenho do throughput
medido apenas quando o limite de tempo de resposta atendido. Para modelar sis-
temas do mundo real, taxas de transao mais altas tambm esto associadas a sistemas
maiores, em termos de usurios e do banco de dados ao qual as transaes so aplicadas.
Finalmente, cabe incluir o custo do sistema para um sistema de benchmark, permitindo
comparaes precisas de custo-desempenho. O TPC modificou sua poltica de preos
para que exista uma nica especificao para todos os benchmarks TPC e para permitir a
verificao dos preos que a TPC publica.

Reportando resultados de desempenho


O princpio orientador dos relatrios das medies de desempenho deve ser a propriedade de
serem reproduzveis listar tudo aquilo de que outro experimentador precisaria para duplicar
os resultados. Um relatrio de benchmark SPEC exige uma descrio extensa do computador
e dos flags do compilador, alm da publicao da linha de referncia e dos resultados otimiza-
dos. Alm das descries de parmetros de ajuste de hardware, software e linha de referncia,
um relatrio SPEC contm os tempos de desempenho reais, mostrados tanto em formato de
tabulao quanto como grfico. Um relatrio de benchmark TPC ainda mais completo, pois
precisa incluir resultados de uma auditoria de benchmarking e informao de custo. Esses
relatrios so excelentes fontes para encontrar o custo real dos sistemas de computao, pois
os fabricantes competem em alto desempenho e no fator custo-desempenho.

Resumindo resultados do desempenho


No projeto prtico do computador, voc precisa avaliar milhares de opes de projeto por
seus benefcios quantitativos em um pacote de benchmarks que acredita ser relevante.
Da mesma forma, os consumidores que tentam escolher um computador contaro com
medidas de desempenho dos benchmarks, que esperam ser semelhantes s aplicaes do
usurio. Nos dois casos til ter medies para um pacote de benchmarks de modo que
o desempenho das aplicaes importantes seja semelhante ao de um ou mais benchmarks
desse pacote e que a variabilidade no desempenho possa ser compreendida. No caso ideal,
o pacote se parece com uma amostra estatisticamente vlida do espao da aplicao, mas
requer mais benchmarks do que normalmente so encontrados na maioria dos pacotes,
exigindo uma amostragem aleatria que quase nenhum pacote de benchmark utiliza.
Depois que escolhermos medir o desempenho com um pacote de benchmark, gostaramos
de poder resumir os resultados desse desempenho em um nico nmero. Uma tcnica
simples para o clculo de um resultado resumido seria comparar as mdias aritmticas dos
tempos de execuo dos programas no pacote. Infelizmente, alguns programas SPEC gastam
quatro vezes mais tempo do que outros, de modo que esses programas seriam muito mais
38 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

importantes se a mdia aritmtica fosse o nico nmero utilizado para resumir o desempe-
nho. Uma alternativa seria acrescentar um fator de peso a cada benchmark e usar a mdia
aritmtica ponderada como nico nmero para resumir o desempenho. O problema seria,
ento, como selecionar os pesos. Como a SPEC um consrcio de empresas concorrentes,
cada empresa poderia ter seu prprio conjunto favorito de pesos, o que tornaria difcil
chegar a um consenso. Uma soluo usar pesos que faam com que todos os programas
executem por um mesmo tempo em algum computador de referncia, mas isso favorece
os resultados para as caractersticas de desempenho do computador de referncia.
Em vez de selecionar pesos, poderamos normalizar os tempos de execuo para um
computador de referncia, dividindo o tempo no computador de referncia pelo tempo
no computador que est sendo avaliado, gerando uma razo proporcional ao desempe-
nho. O SPEC utiliza essa tcnica, chamando a razo de SPECRatio. Ele possui uma pro-
priedade particularmente til, que combina o modo como comparamos o desempenho
do computador no decorrer deste captulo, ou seja, comparando razo de desempenho.
Por exemplo, suponha que o SPECRatio do computador A em um benchmark tenha sido
1,25 vez maior que o do computador B; ento, voc saberia que:
Tempo de execuoreferncia
SPECRatioA Tempo de execuoA Tempo de execuoB DesempenhoA
1,25 = = = =
SPECRatioB Tempo de execuoreferncia Tempo de execuoA DesempenhoB
Tempo de execuoB

Observe que os tempos de execuo no computador de referncia caem e a escolha do


computador de referncia irrelevante quando as comparaes so feitas como uma razo,
que a tcnica que utilizamos coerentemente. A Figura1.17 apresenta um exemplo.

FIGURA 1.17 Tempos de execuo do SPECfp2000 (em segundos) para o Sun Ultra 5 o computador de referncia do SPEC2000
e tempos de execuo e SPECRatios para o AMD Opteron e Intel Itanium 2.
(O SPEC2000 multiplica a razo dos tempos de execuo por 100 para remover as casas decimais do resultado, de modo que 20,86 informado
como 2.086.) As duas ltimas colunas mostram as razes dos tempos de execuo e SPECRatios. Esta figura demonstra a irrelevncia do computador
de referncia no desempenho relativo. A razo dos tempos de execuo idntica razo dos SPECRatios, e a razo da mdia geomtrica
(27,12/20,86=1,30) idntica mdia geomtrica das razes (1,3).
1.9 Princpios quantitativos do projeto de computadores 39

Como um SPECRatio uma razo, e no um tempo de execuo absoluto, a mdia precisa


ser calculada usando a mdia geomtrica (como os SPECRatios no possuem unidades, a
comparao de SPECRatios aritmeticamente no tem sentido). A frmula :
n
Medida geomtrica = n amostra 1
i =1

No caso do SPEC, amostrai o SPECRatio para o programa i. O uso da mdia geomtrica


garante duas propriedades importantes:
1. A mdia geomtrica das razes igual razo das mdias geomtricas.
2. A razo das mdias geomtricas igual mdia geomtrica das razes de
desempenho, o que implica que a escolha do computador de referncia
irrelevante.
Logo, as motivaes para usar a mdia geomtrica so substanciais, especialmente quando
usamos razes de desempenho para fazer comparaes.

Exemplo Mostre que a razo das mdias geomtricas igual mdia geomtrica das
razes de desempenho e que a comunicao de referncia do SPECRatio
no importa.
Resposta Considere dois computadores, A e B, e um conjunto de SPECRatios para
cada um.
n

Medida geomtricaA
n SPECRatio A i
n
SPECRatio Ai
= i =1
=n
Medida geomtricaB n
i =1 SPECRatio Bi
n SPECRatio B
i

i =1

Tempo de execuorefernciai
n n n
Tempo de execuoAi Tempo de execuoBi DesempenhoAi
=n =n =n
i =1
Tempo de execuorefernciai
i =1 Tempo de execuoAi i =1 DesempenhoBi
Tempo de execuoBi

Ou seja, a razo das mdias geomtricas dos SPECRatios de A e B a mdia


geomtrica das razes de desempenho de A para B de todos os benchmarks
no pacote. A Figura1.17 demonstra a validade usando exemplos da SPEC.

1.9 PRINCPIOS QUANTITATIVOS DO PROJETO


DE COMPUTADORES
Agora que vimos como definir, medir e resumir desempenho, custo, dependncia e po-
tncia, podemos explorar orientaes e princpios que so teis no projeto e na anlise de
computadores. Esta seo introduz observaes importantes sobre projeto, alm de duas
equaes para avaliar alternativas.

Tire proveito do paralelismo


Tirar proveito do paralelismo um dos mtodos mais importantes para melhorar o
desempenho. Cada captulo deste livro apresenta um exemplo de como o desempenho
melhorado por meio da explorao do paralelismo. Oferecemos trs exemplos rpidos,
que sero tratados mais amplamente em outros captulos.
Nosso primeiro exemplo o uso do paralelismo em nvel do sistema. Para melhorar o
desempenho de throughput em um benchmark de servidor tpico, como SPECWeb ou
TPC-C, vrios processadores e mltiplos discos podem ser usados. A carga de trabalho
40 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

de tratar com solicitaes pode, portanto, ser distribuda entre os processadores e discos,
resultando em um throughput melhorado. Ser capaz de expandir a memria e o nmero
de processadores e discos o que chamamos escalabilidade, e constitui um bem valioso para
os servidores. A disrtribuio dos dados por vrios discos para leituras e gravaes paralelas
habilita o paralelismo em nvel de dados. O SPECWeb tambm depende do paralelismoem
nvel de requisio para usar muitos processadores, enquanto o TPC-C usa paralelismo
em nvel de thread para o processamento mais rpido de pesquisas em bases de dados.
Em nvel de um processador individual, tirar proveito do paralelismo entre as instrues
crucial para conseguir alto desempenho. Uma das maneiras mais simples de fazer isso por
meio do pipelining (isso ser explicado com detalhes no Apndice C, e o foco principal do
Captulo3). A ideia bsica por trs do pipelining sobrepor a execuo da instruo para
reduzir o tempo total a fim de completar uma sequncia de instrues. Um insight importante
que permite que o pipelining funcione que nem toda instruo depende do seu predecessor
imediato; portanto, executar as instrues completa ou parcialmente em paralelo possvel.
O pipelining o exemplo mais conhecido de paralelismo em nvel de instruo.
O paralelismo tambm pode ser explorado no nvel de projeto digital detalhado. Por
exemplo, as caches associadas por conjunto utilizam vrios bancos de memria que
normalmente so pesquisados em paralelo para se encontrar um item desejado. As
unidades lgica e aritmtica (Arithmetic-Logical Units ALUs) modernas utilizam
carry-lookahead, que usa o paralelismo para acelerar o processo de clculo de somasde
linear para logartmico no nmero de bits por operando. Esses so mais exemplos
de paralelismo em nvel de dados.

Princpio de localidade
Observaes fundamentais importantes vm das propriedades dos programas. A proprieda-
de dos programas mais importante que exploramos regularmente o princpio de localidade:
os programas costumam reutilizar dados e instrues que usaram recentemente. Uma regra
prtica bastante aceita de que um programa gasta 90% de seu tempo de execuo em
apenas 10% do cdigo. Uma aplicao desse princpio a possibilidade de prever com
razovel preciso as instrues e os dados que um programa usar num futuro prximo
com base em seus acessos num passado recente. O princpio de localidade tambm se
aplica aos acessos a dados, embora no to fortemente quanto aos acessos ao cdigo.
Dois tipos diferentes de localidade tm sido observados. No tocante localidade temporal,
provvel que os itens acessados recentemente sejam acessados num futuro prximo. A locali-
dade espacial afirma que os itens cujos endereos esto prximos um do outro costumam ser
referenciados em curto espao de tempo. Veremos esses princpios aplicados no Captulo2.

Foco no caso comum


Talvez o princpio mais importante e penetrante do projeto de computador seja focar no
caso comum: ao fazer uma escolha de projeto, favorea o caso frequente em vez do caso
pouco frequente. Esse princpio se aplica determinao de como gastar recursos, pois o
impacto da melhoria ser mais alto se a ocorrncia for frequente.
Focar no caso comum funciona tanto para a potncia como para os recursos de alocao
e desempenho. As unidades de busca e decodificao de instrues de um processador
pode ser usada com muito mais frequncia do que um multiplicador, por isso deve ser
otimizada primeiro. Isso tambm funciona na dependncia. Se um servidor de banco
de dados possui 50 discos para cada processador, como na prxima seo, a dependn-
ciade armazenamento dominar a dependncia do sistema.
1.9 Princpios quantitativos do projeto de computadores 41

Alm disso, o caso frequente normalmente mais simples e pode ser feito com mais rapi-
dez do que o caso pouco frequente. Por exemplo, ao somar dois nmeros no processador,
podemos esperar que o estouro (overflow) seja uma circunstncia rara e, assim, podemos
melhorar o desempenho, otimizando o caso mais comum, ou seja, sem nenhum estouro.
Isso pode atrasar o caso em que ocorre estouro, mas, se isso for raro, o desempenho geral
ser melhorado, otimizando o processador para o caso normal.
Veremos muitos casos desse princpio em todo este captulo. Na aplicao desse princpio
simples, temos que decidir qual o caso frequente e quanto desempenho pode ser me-
lhorado tornando-o mais rpido. Uma lei fundamental, chamada lei de Amdahl, pode ser
usada para quantificar esse princpio.

Lei de Amdahl
O ganho de desempenho obtido com a melhoria de alguma parte de um computador pode
ser calculado usando a lei de Amdahl. Essa lei estabelece que a melhoria de desempenho
a ser conseguida com o uso de algum modo de execuo mais rpido limitada pela frao
de tempo que o modo mais rpido pode ser usado.
A lei de Amdahl define o ganho de velocidade, que pode ser obtido usando-se um recurso
em particular. O que ganho de velocidade? Suponha que possamos fazer uma melho-
riaem um computador que aumentar seu desempenho quando ele for usado. O ganho
de velocidade a razo:
Desempenho para a tarefa inteira usando a melhoria quando possvel
Ganho de velocidade =
Desempenho para a tarefa inteira sem usar a melhoria

Como alternativa,

Desempenho para a tarefa inteira sem usar a melhoria


Ganho de velocidade =
Desempenho para a tarefa inteira usando a melhoria quando possvel

O ganho de velocidade nos diz quo mais rpido uma tarefa rodar usando o computador
com a melhoria em vez do computador original.
A lei de Amdahl nos d um modo rpido de obter o ganho de velocidade a partir de alguma
melhoria, o que depende de dois fatores:
1. A frao do tempo de computao no computador original que pode ser convertida para
tirar proveito da melhoria. Por exemplo, se 20 segundos do tempo de execuo de um
programa que leva 60 segundos no total puderem usar uma melhoria, a frao ser
20/60. Esse valor, que chamaremos de Fraomelhorada, ser sempre menor ou igual a 1.
2. A melhoria obtida pelo modo de execuo melhorado, ou seja, quo mais rpido a tarefa
seria executada se o modo melhorado fosse usado para o programa inteiro. Esse valor
o tempo do modo original sobre o tempo do modo melhorado. Se o modo
melhorado levar, digamos, 2 segundos para uma parte do programa, enquanto
de 5 segundos no modo original, a melhoria ser de 5/2. Chamaremos esse valor,
que sempre maior que 1, de Ganho de velocidademelhorado.
O tempo de execuo usando o computador original com o modo melhorado ser o
tempo gasto usando a parte no melhorada do computador mais o tempo gasto usando
a melhoria:

Fraomelhorada
Tempo de execuonovo = Tempo de execuoantigo (1 Fraomelhorada ) +
Ganho de velocidademelhorado
42 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

O ganho de velocidade geral a razo dos tempos de execuo:

Tempo de execuoantigo 1
Ganho de velocidadegeral = =
Tempo de execuonovo (1 Fraomelhorada ) + Fraomelhorada
Ganho de velocidademelhorado

Exemplo Suponha que queiramos melhorar o processador usado para servio na Web. O
novo processador 10 vezes mais rpido em computao na aplicao de servio
da Web do que o processador original. Considerando que o processador original
est ocupado com clculos 40% do tempo e esperando por E/S 60% do tempo,
qual o ganho de velocidade geral obtido pela incorporao da melhoria?
Resposta Fraomelhorada = 0,4;Ganhode velocidademelhorado = 10;
1 1
Ganhode velocidadegeral = = 1,56
0,4 0,64
0,6 +
10
A lei de Amdahl expressa os retornos diminudos: a melhoria incremental no ganho de
velocidade obtida pela melhoria de apenas uma parte da computao diminui medida
que as melhorias so acrescentadas. Um corolrio importante da lei de Amdahl que, se
uma melhoria s for utilizvel por uma frao de uma tarefa, no poderemos agilizar essa
tarefa mais do que o inverso de 1 menos essa frao.
Um engano comum na aplicao da lei de Amdahl confundir frao de tempo conver-
tida para usar uma melhoria com frao de tempo aps a melhoria estar em uso. Se, em
vez de medir o tempo que poderamos usar a melhoria em um clculo, medirmos o tempo
aps a melhoria estar em uso, os resultados sero incorretos!
A lei de Amdahl pode servir de guia para o modo como uma melhoria incrementar o
desempenho e como distribuir recursos para melhorar o custo-desempenho. O objetivo,
claramente, investir recursos proporcionais onde o tempo gasto. A lei de Amdahl
particularmente til para comparar o desempenho geral do sistema de duas alternativas,
mas ela tambm pode ser aplicada para comparar duas alternativas de um projeto de
processador, como mostra o exemplo a seguir.

Exemplo Uma transformao comum exigida nos processadores de grficos a raiz


quadrada. As implementaes de raiz quadrada com ponto flutuante (PF) va-
riam muito em desempenho, sobretudo entre processadores projetados para
grficos. Suponha que a raiz quadrada em PF (FPSQR) seja responsvel por
20% do tempo de execuo de um benchmark grfico crtico. Uma proposta
melhorar o hardware de FPSQR e agilizar essa operao por um fator de 10.
A outra alternativa simplesmente tentar fazer com que todas as operaes
de PF no processador grfico sejam executadas mais rapidamente por um
fator de 1,6; as instrues de PF so responsveis por metade do tempo de
execuo para a aplicao. A equipe de projeto acredita que pode fazer com
que todas as instrues de PF sejam executadas 1,6 vez mais rpido com o
mesmo esforo exigido para a raiz quadrada rpida. Compare essas duas
alternativas de projeto.
Resposta Podemos comparar essas alternativas comparando os ganhos de velocidade:
1 1
Ganhode velocidadeFPSQR = = = 1,22
0,2 0,82
(1 0,2) +
10
1 1
Ganhode velocidadeFP = = = 1,23
0,5 0,8125
(1 0,5) +
1,6

Melhorar o ganho de velocidade das operaes de PF em geral ligeiramente


melhor devido frequncia mais alta.
1.9 Princpios quantitativos do projeto de computadores 43

A lei de Amdahl se aplica alm do desempenho. Vamos refazer o exemplo de confiabilidade


da pginas 31 e 32 depois de melhorar a confiabilidade da fonte de alimentao, por meio
da redundncia, de 200.000 horas para 830.000.000 horas MTTF ou 4.150 vezes melhor.

Exemplo O clculo das taxas de falha do subsistema de disco foi


Taxa de falhasistema = 10 1 + 1 + 1 + 1 + 1
1.000.000 500.000 200.000 200.000 1.000.000
= 10 + 2 + 5 + 5 + 1 = 23
1.000.000 horas 1.000.000 horas

Portanto, a frao da taxa de falha que poderia ser melhorada 5 por milho
de horas, das 23 para o sistema inteiro, ou 0,22.
Resposta A melhoria de confiabilidade seria
1
Melhoriapar de fontes = = 1 = 1,28
0,22 0,78
(1 0,22) +
4150

Apesar de uma impressionante melhoria de 4.150 vezes na confiabilidade


de um mdulo, do ponto de vista do sistema a mudana possui um benefcio
mensurvel, porm pequeno.

Nos exemplos precedentes, precisamos da frao consumida pela verso nova e melhorada;
costuma ser difcil medir esses tempos diretamente. Na seo seguinte, veremos outra forma
de fazer essas comparaes com base no uso de uma equao que decompe o tempo de
execuo da CPU em trs componentes separados. Se soubermos como uma alternativa
afeta esses componentes, poderemos determinar seu desempenho geral. Normalmente
possvel montar simuladores que medem esses componentes antes que o hardware seja
realmente projetado.

A equao de desempenho do processador


Basicamente todos os computadores so construdos usando um clock que trabalha a uma
taxa constante. Esses eventos de tempo discretos so chamados de ticks, ticks de clock, perodos
de clock, clocks, ciclos ou ciclos de clock. Os projetistas de computador referem-se ao tempo de
um perodo de clock por sua durao (por exemplo, 1ns) ou por sua frequncia (por exem-
plo, 1GHz). O tempo de CPU para um programa pode, ento, ser expresso de duas maneiras:

Tempo de CPU = Ciclos de clock de CPU para um programa Tempo do ciclo de clock
ou
Ciclos de clock de CPU para um programa
Tempo de CPU =
Frequncia de clock

Alm do nmero de ciclos de clock necessrios para executar um programa, tambm


podemos contar o nmero de instrues executadas o tamanho do caminho de instruo
ou nmero de instrues (Instruction Count IC). Se soubermos o nmero de ciclos de
clock e o contador de instrues, poderemos calcular o nmero mdio de ciclos de clock por
instrues (Clock Cycles Per Instruction CPI). Por ser mais fcil de trabalhar e porque
neste livro lidaremos com processadores simples, usaremos o CPI. s vezes, os projetistas
tambm usam instrues por clock (Instructions Per Clock IPC), que o inverso do CPI.
O CPI calculado como
Ciclos de clock de CPU para um programa
CPI =
Nmero de instrues
44 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

Esse valor de mrito do processador oferece vises para diferentes estilos de conjuntos de
instrues e de implementaes, e o usaremos bastante nos quatro captulos seguintes.
Transpondo o nmero de instrues na frmula anterior, os ciclos de clock podem ser
definidos como ICCPI. Isso nos permite usar o CPI na frmula do tempo de execuo:
Tempo de CPU = Nmero de instrues Ciclos por instruo Tempo de ciclo de clock

Expandindo a primeira frmula para as unidades de medida, vemos como as partes se


encaixam:
Instrues Ciclos de clock Segundos Segundos
= = Tempo de CPU
Programa Instruo Ciclos de clock Programa

Conforme a frmula demonstra, o desempenho do processador depende de trs caracters-


ticas: ciclo de clock (ou frequncia), ciclos de clock por instrues e nmero de instrues.
Alm do mais, o tempo de CPU depende igualmente dessas trs caractersticas: a melhoria
de 10% em qualquer um deles leva melhoria de 10% no tempo de CPU.
Infelizmente, difcil mudar um parmetro de modo completamente isolado dos outros,
pois as tecnologias bsicas envolvidas na mudana de cada caracterstica so interdepen-
dentes:
j Tempo de ciclo de clock Tecnologia e organizao do hardware
j CPI Organizao e arquitetura do conjunto de instrues
j Nmero de instrues Arquitetura do conjunto de instrues e tecnologia do
computador
Por sorte, muitas tcnicas potenciais de melhoria de desempenho melhoram principal-
mente um componente do desempenho do processador, com impactos pequenos ou
previsveis sobre os outros dois.
s vezes, til projetar o processador para calcular o nmero total de ciclos de clock do
processador como
n
Ciclos de clock da CPU = ICi CPIi
i =1

onde ICi representa o nmero de vezes que a instruo i executada em um programa e


CPIi representa o nmero mdio de clocks por instruo para a instruo i. Essa forma
pode ser usada para expressar o tempo de CPU como

n
Tempo de CPU = ICi CPIi Tempo de ciclo de clock
i =1

e o CPI geral como


n

IC CPI
i i
n
ICi
CPI = i =1
= CPIi
Nmero de instrues i =1 Nmero de instrues

A ltima forma do clculo do CPI utiliza cada CPIi e a frao de ocorrncias dessa ins-
truo em um programa (ou seja, ICi nmero de instrues). O CPIi deve ser medido,
e no apenas calculado a partir de uma tabela no final de um manual de referncia, pois
precisa levar em considerao os efeitos de pipeline, as faltas de cache e quaisquer outras
ineficincias do sistema de memria.
1.9 Princpios quantitativos do projeto de computadores 45

Considere nosso exemplo de desempenho da pgina 42, modificado aqui para usar
medies da frequncia das instrues e dos valores de CPI da instruo, que, na prtica,
so obtidos pela simulao ou pela instrumentao do hardware.

Exemplo Suponha que tenhamos feito as seguintes medies:


Frequncia das operaes de PF=25%
CPI mdio das operaes de PF=4,0
CPI mdio das outras instrues=1,33
Frequncia da FPSQR=2%
CPI da FPSQR=20
Considere que as duas alternativas de projeto sejam diminuir o CPI da
FPSQR para 2 ou diminuir o CPI mdio de todas as operaes de PF para 2,5.
Compare essas duas alternativas de projeto usando a equao de desempe-
nho do processador.
Resposta Em primeiro lugar, observe que somente o CPI muda; a taxa de clock e o
nmero de instrues permanecem idnticos. Comeamos encontrando o
CPI original sem qualquer melhoria:
n ICi
CPIoriginal = CPIi
i =1 Nmerodeinstrues
= (4 25%) + (1,33 75%) = 2,0

Podemos calcular o CPI para a FPSQR melhorada subtraindo os ciclos salvos


do CPI original:
CPIcom nova FPSQR = CPIoriginal 2% (CPIFPSQR antiga CPIde nova FPSQR apenas )
= 2,0 2% (20 2) = 1,64

Podemos calcular o CPI para a melhoria de todas as instrues de PF da


mesma forma ou somando os CPIs de PF e de no PF. Usando a ltima
tcnica, temos
CPInovo FP = (75% 1,33) + (25% 2,5) = 1,625

Como o CPI da melhoria geral de PF ligeiramente inferior, seu desempe-


nho ser um pouco melhor. Especificamente, o ganho de velocidade para a
melhoria de PF geral
TempodeCPUoriginal
Ganhode velocidadenovo FP =
TempodeCPUnova FP
IC Ciclodeclock CPioriginal
=
IC Ciclodeclock CPinova FP
CPioriginal 2,00
= = = 1,23
CPinova FP 1,625

Felizmente, obtemos esse mesmo ganho de velocidade usando a lei


de Amdahl na pgina 41.

Normalmente, possvel medir as partes constituintes da equao de desempenho do


processador. Essa uma vantagem importante do uso dessa equao versus a lei de Amdahl
no exemplo anterior. Em particular, pode ser difcil medir itens como a frao do tempo de
execuo pela qual um conjunto de instrues responsvel. Na prtica, isso provavelmente
seria calculado somando-se o produto do nmero de instrues e o CPI para cada uma das
instrues no conjunto. Como os pontos de partida normalmente so o nmero de instru-
es e as medies de CPI, a equao de desempenho do processador incrivelmente til.
Para usar a equao de desempenho do processador como uma ferramenta de projeto,
precisamos ser capazes de medir os diversos fatores. Para determinado processador,
fcil obter o tempo de execuo pela medio, enquanto a velocidade do clock padro
46 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

conhecida. O desafio est em descobrir o nmero de instrues ou o CPI. A maioria dos


novos processadores inclui contadores para instrues executadas e para ciclos de clock.
Com o monitoramento peridico desses contadores, tambm possvel conectar o tempo
de execuo e o nmero de instrues a segmentos do cdigo, o que pode ser til para
programadores que esto tentando entender e ajustar o desempenho de uma aplicao.
Em geral, um projetista ou programador desejar entender o desempenho em um nvel
mais detalhado do que o disponibilizado pelos contadores do hardware. Por exemplo,
eles podem querer saber por que o CPI o que . Nesses casos, so usadas tcnicas de
simulao como aquelas empregadas para os processadores que esto sendo projetados.
Tcnicas que ajudam na eficincia energtica, como escalamento dinmico de frequncia,
de voltagem e overclocking (Seo1.5), tornam essa equao mais difcil de usar, j que a
velocidade do clock pode variar enquanto medimos o programa. Uma abordagem simples
desligar esses recursos para tornar os resultados passveis de reproduo. Felizmente, j
que muitas vezes o desempenho e a eficincia energtica esto altamente correlacionados
levar menos tempo para rodar um programa geralmente poupa energia , provavel-
mente seguro considerar o desempenho sem se preocupar com o impacto do DVFS ou
overclocking sobre os resultados.

1.10 JUNTANDO TUDO: DESEMPENHO


E PREO-DESEMPENHO
Nas sees Juntando tudo que aparecem prximo ao final de cada captulo, mos-
tramos exemplos reais que utilizam os princpios explicados no captulo. Nesta seo,
veremos medidas de desempenho e preo-desempenho nos sistemas de desktop usando
o benchmark SPECpower.
A Figura1.18 mostra os trs servidores multiprocessadores que estamos avaliando e seu
preo. Para manter justa a comparao de preos, todos so servidores Dell PowerEdge. O
primeiro o PowerEdge R710, baseado no microprocessador Intel Xeon X5670, com uma
frequncia de clock de 2,93GHz. Ao contrrio do Intel Core i7 abordado nos Captulos2
a5, que tem quatro ncleos e um cache L3 de 8MB, esse chip da Intel tem seis ncleos e
um cache L3 de 12 MB, embora os prprios ncleos sejam idnticos. Ns selecionamos um
sistema de dois soquetes com 12 GB de DRAM DDR3 de 1.333MHz protegida por ECC.
O prximo servidor o PowerEdge R815, baseado no microprocessador AMD Opteron
6174. Um chip tem seis ncleos e um cache L3 de 6 MB, e roda a 2,20GHz, mas a AMD
coloca dois desses chips em um nico soquete. Assim, um soquete tem 12 ncleos e dois
caches L3 de 6 MB. Nosso segundo servidor tem dois soquetes com 24 ncleos e 16 GB
de DRAM DDR3 de 1.333MHz protegido por ECC, e nosso terceiro servidor (tambm
um PowerEdge R815) tem quatro soquetes com 48 ncleos e 32 GB de DRAM. Todos
esto rodando a IBM J9 JVM e o sistema operacional Microsoft Windows 2008 Server
Enterprise x64 Edition.
Observe que, devido s foras do benchmarking (Seo1.11), esses servidores so configu-
rados de forma pouco usual. Os sistemas na Figura1.18 tm pouca memria em relao
capacidade de computao e somente um pequeno disco de estado slido com 50 GB.
barato adicionar ncleos se voc no precisar acrescentar aumentos proporcionais em
memria e armazenamento!
Em vez de rodar, estatisticamente, programas do SPEC CPU, o SPECpower usa a mais
moderna pilha de software escrita em Java. Ele baseado no SPECjbb e representa o lado
do servidor das aplicaes de negcios, com o desempenho medido como o nmero de
1.10 Juntando tudo: desempenho e preo-desempenho 47

FIGURA 1.18 Trs servidores Dell PowerEdge e seus preos com base em agosto de 2010.
Ns calculamos o custo dos processadores subtraindo o custo de um segundo processador. Do mesmo modo, calculamos o custo geral da memria vendo
qual seria o custo da memria extra. Portanto, o custo-base do servidor ajustado subtraindo o custo estimado do processador e a memria-padro.
O Captulo5 descreve como esses sistemas multissoquetes se conectam.

transaes por segundo, chamado ssj_ops para operaes por segundo do lado do servidor
Java. Ele utiliza no s o processador do servidor, como o SPEC CPU, mas tambm as
caches, o sistema de memria e at mesmo o sistema de interconexo dos multiproces-
sadores. Alm disso, utiliza a Java Virtual Machine (JVM), incluindo o compilador de
runtime JIT e o coletor de lixo, alm de partes do sistema operacional.
Como mostram as duas ltimas linhas da Figura1.18, o vencedor em desempenho e preo-
desempenho o PowerEdge R815, com quatro soquetes e 48 ncleos. Ele atinge 1,8M
ssj_ops, e o ssj_ops por dlar o mais alto, com 145. Surpreendentemente, o computador
com o maior nmero de ncleos o mais eficiente em termos de custo. Em segundo lugar
est o R815 de dois soquetes, com 24 ncleos, e o R710 com 12 ncleos em ltimo lugar.
Enquanto a maioria dos benchmarks (e dos arquitetos de computadores) se preocupa
somente com o desempenho dos sistemas com carga mxima, os computadores raramente
rodam com carga mxima. De fato, a Figura6.2, no Captulo6, mostra os resultados da
medio, utilizando dezenas de milhares de servidores ao longo de seis meses no Google,
e menos de 1% operam com uma utilizao mdia de 100%. A maioria tem utilizao
mdia entre 10-50%. Assim, o benchmark SPECpower captura a potncia conforme a
carga de trabalho-alvo varia de pico em intervalos de 10% at 0%, chamado Active Idle.
A Figura1.19 mostra o ssj_ops (operaes SSJ/segundo) por watt, e a potncia mdia
conforme a carga-alvo varia de 100% a 0%. O Intel R710 tem sempre a menor potncia e
o melhor ssj_ops por watt em todos os nveis de carga de trabalho-alvo.
Uma razo a fonte de alimentao muito maior para o R815 com 1.110 watts versus
570 no R715. Como o Captulo6 mostra, a eficincia da fonte de alimentao muito
48 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

FIGURA 1.19 Desempenho de potncia dos trs servidores na Figura1.18.


Os valores de ssj_ops/watt esto no eixo esquerdo, com as trs colunas associadas a eles, e os valores em watts esto no eixo direito, com as trs linhas
associadas a eles. O eixo horizontal mostra a carga de trabalho-alvo e tambm consome a menor potncia a cada nvel.

importante na eficincia energtica geral de um computador. Uma vez que watts=joules/


segundo, essa mtrica proporcional s operaes SSJ por joule:
ssj _ ops/s ssj _ ops/s ssj _ ops/s
= =
Watt Joule/s Joule

Para calcular um nmero nico para comparar a eficincia energtica dos sistemas, o
SPECpower usa:

ssj _ ops/watt mdio =


ssj _ ops
potncia
O ssj_ops/watt mdio dos trs servidores de 3034 para o Intel R710, de 2357 para o AMD
R815 de dois soquetes e de 2696 para o AMD R815 de quatro soquetes. Portanto, o Intel
R710 tem a melhor potncia/desempenho. Dividindo pelo preo dos servidores, o ssj_ops/
watt/US$ 1.000 de 324 para o Intel R710, de 254 para o AMD R815 de dois soquetes e de
213 para AMD R815 de quatro soquetes. Assim, adicionar potncia reverte os resultados
da competio preo-desempenho, e o trofu do preo-potncia-desempenho vai para o
Intel R710; o R815 de 48 ncleos vem em ltimo lugar.

1.11 FALCIAS E ARMADILHAS


A finalidade desta seo, que consta de todos os captulos, explicar algumas das crenas
erradas ou conceitos indevidos que voc dever evitar. Chamamos a esses conceitos
falcias. Ao analisar uma falcia, tentamos oferecer um contraexemplo. Tambm dis-
1.11 Falcias e armadilhas 49

cutimos as armadilhas erros cometidos com facilidade. Essas armadilhas costumam ser
generalizaes de princpios que so verdadeiros em um contexto limitado. A finalidade
dessas sees ajud-lo a evitar cometer esses erros nos computadores que voc projeta.
Falcia. Multiprocessadores so uma bala de prata.
A mudana para mltiplos processadores por chip em meados de 2005 no veio de
nenhuma descoberta que simplificou drasticamente a programao paralela ou tornou
mais fcil construir computadores multicore. Ela ocorreu porque no havia outra opo,
devido aos limites de ILP e de potncia. Mltiplos processadores por chip no garantem
potncia menor. Certamente possvel projetar um chip multicore que use mais potncia.
O potencial que existe o de continuar melhorando o desempenho com a substituiode
um ncleo ineficiente e com alta taxa de clock por diversos ncleos eficientes e com taxa
de clock mais baixa. Conforme a tecnologia melhora na reduo dos transistores, isso pode
encolher um pouco a capacitncia e a tenso de alimentao para que possamos obter um
modesto aumento no nmero de ncleos por gerao. Por exemplo, nos ltimos anos, a
Intel tem adicionado dois ncleos por gerao.
Como veremos nos Captulos4 e5, hoje o desempenho o fardo dos programadores. A
poca de o programador no levantar um s dedo e confiar nos projetistas de hardware
para fazer seus programas funcionarem mais rpido est oficialmente terminada. Se os
programadores quiserem que seus programas funcionem mais rpido a cada gerao,
devero tornar seus programas mais paralelos.
A verso popular da lei de Moore aumentar o desempenho a cada gerao da tecnologia
est agora a cargo dos programadores.
Armadilha. Desprezar a lei de Amdahl.
Praticamente todo arquiteto de computadores praticante conhece a lei de Amdahl. Apesar
disso, quase todos ns, uma vez ou outra, empenhamos um esforo enorme otimizando
algum recurso antes de medir seu uso. Somente quando o ganho de velocidade geral
decepcionante nos lembramos de que deveramos t-lo medido antes de gastar tanto es-
foro para melhor-lo!
Armadilha. Um nico ponto de falha.
Os clculos de melhoria de confiabilidade utilizando a lei de Amdahl na pgina 43 mos-
tram que a dependncia no mais forte do que o elo mais fraco de uma corrente. No
importa quo mais dependente faamos as fontes de alimentao, como fizemos em nos-
so exemplo o nico ventilador limitar a confiabilidade do subsistema de disco. Essa
observao da lei de Amdahl levou a uma regra prtica para sistemas tolerantes a falhas
para certificar que cada componente fosse redundante, de modo que nenhuma falha em
um componente isolado pudesse parar o sistema inteiro.
Falcia. As melhorias de hardware que aumentam o desempenho incrementam a eficincia
energtica ou, no pior dos casos, so neutras em termos de energia.
Esmaelizadeh et al. (2011) mediram o SPEC2006 em apenas um ncleo de um Intel Core
i7 de 2,67GHz usando o modo Turbo (Seo1.5). O desempenho aumentou por um
fator de 1,07, quando a taxa de clock aumentou para 2,94GHz (ou um fator de 1,10), mas
o i7 usou um fator de 1,37 mais joules e um fator de 1,47 mais watts-hora!
Armadilha. Benchmarks permanecem vlidos indefinidamente.
Diversos fatores influenciam a utilidade de um benchmark como previso do desempenho
real e alguns mudam com o passar do tempo. Um grande fator que influencia a utilidade
50 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

de um benchmark a sua capacidade de resistir ao cracking, tambm conhecido como


engenharia de benchmark ou benchmarksmanship. Quando um benchmark se torna
padronizado e popular, existe uma presso tremenda para melhorar o desempenho por
otimizaes direcionadas ou pela interpretao agressiva das regras para execuo do
benchmark. Pequenos kernels ou programas que gastam seu tempo em um nmero muito
pequeno de linhas de cdigo so particularmente vulnerveis.
Por exemplo, apesar das melhores intenes, o pacote de benchmark SPEC89 inicial inclua
um pequeno kernel, chamado matrix300, que consistia em oito multiplicaes diferentes
de matrizes de 300300. Nesse kernel, 99% do tempo de execuo estava em uma nica
linha (SPEC,1989). Quando um compilador IBM otimizava esse loop interno (usando
uma ideia chamada bloqueio, discutida nos Captulos2 e4), o desempenho melhorava
por um fator de 9 em relao verso anterior do compilador! Esse benchmark testava o
ajuste do compilador e, naturalmente, no era uma boa indicao do desempenho geral
nem do valor tpico dessa otimizao em particular.
Por um longo perodo, essas mudanas podem tornar obsoleto at mesmo um benchmark
bem escolhido; o Gcc o sobrevivente solitrio do SPEC89. A Figura1.16 apresenta o
status de todos os 70 benchmarks das diversas verses SPEC. Surpreendentemente, quase
70%de todos os programas do SPEC2000 ou anteriores foram retirados da verso seguinte.
Armadilha. O tempo mdio para falha avaliado para os discos de 1.200.000 horas ou quase
140 anos, ento os discos praticamente nunca falham.
As prticas de marketing atuais dos fabricantes de disco podem enganar os usurios.
Como esse MTTF calculado? No incio do processo, os fabricantes colocaro milhares
de discos em uma sala, deixaro em execuo por alguns meses e contaro a quantidade
que falha. Eles calculam o MTTF como o nmero total de horas que os discos trabalharam
acumuladamente dividido pelo nmero daqueles que falharam.
Um problema que esse nmero muito superior ao tempo de vida til de um disco,
que normalmente considerado cinco anos ou 43.800 horas. Para que esse MTTF grande
faa algum sentido, os fabricantes de disco argumentam que o modelo corresponde a um
usurio que compra um disco e depois o substitui a cada cinco anos tempo de vida
til planejado do disco. A alegao que, se muitos clientes (e seus bisnetos) fizerem isso
no sculo seguinte, substituiro, em mdia, um disco 27 vezes antes de uma falha ou por
cerca de 140 anos.
Uma medida mais til seria a porcentagem de discos que falham. Considere 1.000 discos
com um MTTF de 1.000.000 de horas e que os discos sejam usados 24 horas por dia. Se
voc substituir os discos que falharam por um novo com as mesmas caractersticas de
confiabilidade, a quantidade que falhar em um ano (8.760 horas) ser

Nmero de discos Perodo de tempo


Discos que falham =
MTTF
1.000 discos 8.760 horas / drive
= =9
1.000.000 horas / falha

Em outras palavras, 0,9% falharia por ano ou 4,4% por um tempo de vida til de cinco
anos.
Alm do mais, esses nmeros altos so cotados com base em intervalos limitados de
temperaturas e vibrao; se eles forem ultrapassados, todas as apostas falharo. Um
estudo recente das unidades de disco em ambientes reais (Gray e Van Ingen,2005)
afirma que cerca de 3-7% dos drives falham por ano, ou um MTTF de cerca de 125.000-
1.11 Falcias e armadilhas 51

300.000 horas, e cerca de 3-7% das unidades ATA falham por ano, ou um MTTF de
cercade 125.000-300.000 horas. Um estudo ainda maior descobriu taxas de falha de disco
de 2-10% (Pinheiro, Weber e Barroso,2007). Portanto, o MTTF do mundo real de cercade
2-10 vezes pior que o MTTF do fabricante.
A nica definio universalmente verdadeira do desempenho de pico o nvel de de-
sempenho que um computador certamente no ultrapassar. A Figura1.20 mostra a
porcentagem do desempenho de pico para quatro programas e quatro multiprocessadores.
Ele varia de 5-58%. Como a diferena muito grande e pode variar significativamente por
benchmark, o desempenho de pico geralmente no til na previso do desempenho
observado.
Armadilha. Deteco de falha pode reduzir a disponibilidade.
Essa armadilha aparentemente irnica ocorre pelo fato de o hardware de computador
possuir grande quantidade de estados que nem sempre so cruciais para determinada
operao. Por exemplo, no fatal se um erro ocorrer em uma previso de desvio (branch),
pois somente o desempenho ser afetado.
Em processadores que tentam explorar agressivamente o paralelismo em nvel de instruo,
nem todas as operaes so necessrias para a execuo correta do programa. Mukherjee
et al. (2003) descobriram que menos de 30% das operaes estavam potencialmente no
caminho crtico para os benchmarks SPEC2000 rodando em um Itanium 2.
A mesma observao verdadeira sobre os programas. Se um registrador estiver morto
em um programa ou seja, se o programa escrever antes de ler novamente , os erros
no importaro. Se voc tivesse que interromper um programa ao detectar uma falha
transiente em um registrador morto, isso reduziria a disponibilidade desnecessariamente.

FIGURA 1.20 Porcentagem do desempenho de pico para quatro programas em quatro multiprocessadores
aumentados para 64 processadores.
O Earth Simulator e o X1 so processadores de vetor (Cap.4 e o Apndice G). Eles no apenas oferecem uma frao mais
alta do desempenho de pico, mas tambm tm o maior desempenho de pico e as menores taxas de clock. Exceto
para o programa da Paratec, os sistemas Power 4 e Itanium 2 oferecem entre 5-10% de seu pico. De Oliker et al. (2004).
52 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

A Sun Microsystems viveu essa armadilha em 2000, com uma cache L2 que inclua pa-
ridade, mas no correo de erro, em seus sistemas Sun E3000 a Sun E10000. As SRAMs
usadas para criar as caches tinham falhas intermitentes, que a paridade detectou. Se
os dados na cache no fossem modificados, o processador simplesmente os relia. Comoos
projetistas no protegeram a cache com ECC, o sistema operacional no tinha opo
a no ser informar um erro aos dados sujos e interromper o programa. Os engenheiros de
campo no descobriram problemas na inspeo de mais de 90% desses casos.
Para reduzir a frequncia de tais erros, a Sun modificou o sistema operacional Solaris para
varrer a cache com um processo que escreve proativamente os dados sujos na memria.
Como os chips dos processadores no tinham pinos suficientes para acrescentar ECC, a
nica opo de hardware para os dados sujos foi duplicar a cache externa, usando a cpia
sem o erro de paridade para corrigir o erro.
A armadilha est na deteco de falhas sem oferecer um mecanismo para corrigi-las. A
Sun provavelmente no disponibilizar outro computador sem ECC nas caches externas.

1.12 COMENTRIOS FINAIS


Este captulo introduziu uma srie de conceitos e forneceu um framework quantitativo
que expandiremos ao longo do livro. A partir desta edio, a eficincia energtica a nova
companheira do desempenho.
No Captulo2, iniciaremos a importantssima rea do projeto de sistema de memria.
Vamos examinar uma vasta gama de tcnicas que conspiram para fazer a memria parecer
infinitamente grande e, ainda assim, o mais rpida possvel (o Apndice B fornece material
introdutrio sobre caches para leitores sem formao nem muita experincia nisso). Como
nos captulos mais adiante, veremos que a cooperao entre hardware e software se tornou
essencial para os sistemas de memria de alto desempenho, assim como para os pipelines
de alto desempenho. Este captulo tambm aborda as mquinas virtuais, uma tcnica de
proteo cada vez mais importante.
No Captulo3, analisaremos o paralelismo em nvel de instruo (Instruction-Level Paral-
lelism ILP), cuja forma mais simples e mais comum o pipelining. A explorao do ILP
uma das tcnicas mais importantes para a criao de uniprocessadores de alta velocidade.
A presena de dois captulos reflete o fato de que existem vrias tcnicas para a explorao
do ILP e que essa uma tecnologia importante e amadurecida. O Captulo3 comea com
uma longa apresentao dos conceitos bsicos que o prepararo para a grande gama de
ideias examinadas nos dois captulos anteriores. Ele utiliza exemplos disseminados h
cerca de 40 anos, abarcando desde um dos primeiros supercomputadores (IBM 360/91)
at os processadores mais rpidos do mercado em 2011. Alm disso, enfatiza a tcnica
para a explorao do ILP, chamada dinmica ou em tempo de execuo. Tambm focaliza os
limites e as extenses das ideias do ILP e apresenta o multithreading, que ser detalhado
nos Captulos4 e5. O Apndice C um material introdutrio sobre pipelining para os
leitores sem formao ou muita experincia nesse assunto. (Esperamos que ele funcione
como uma reviso para muitos leitores, incluindo os do nosso texto introdutrio, Computer
Organization and Design: The Hardware/Software Interface.)
O Captulo4 foi escrito para esta edio e explica trs modos de explorar o paralelismo em
nvel de dados. A abordagem clssica, mais antiga, a arquitetura vetorial, e comeamos
por ela para estabelecer os princpios do projeto SIMD (o Apndice G apresenta detalhes
sobre as arquiteturas vetoriais). Em seguida, explicamos as extenses de conjunto de ins-
trues encontradas na maioria dos microprocessadores desktops atuais. A terceira parte
1.12 Comentrios finais 53

uma explicao aprofundada de como as unidades de processamento grfico (GPUs)


modernas funcionam. A maioria das descries de GPU feita da perspectiva do pro-
gramador, que geralmente oculta o modo como o computador realmente funciona. Essa
seo explica as GPUs da perspectiva de algum de dentro, incluindo um mapeamento
entre os jarges de GPU e os termos de arquitetura mais tradicionais.
O Captulo5 enfoca como obter alto desempenho usando mltiplos processadores ou
multiprocessadores. Em vez de usar o paralelismo para sobrepor instrues individuais,
o multiprocessamento o utiliza para permitir que vrios fluxos de instrues sejam exe-
cutados simultaneamente em diferentes processadores. Nosso foco recai sobre a forma
dominante dos multiprocessadores, os multiprocessadores de memria compartilhada,
embora tambm apresentemos outros tipos e discutamos os aspectos mais amplos que
surgem em qualquer multiprocessador. Aqui, mais uma vez, exploramos diversas tcnicas,
focalizando as ideias importantes apresentadas inicialmente nas dcadas de 1980 e 1990.
O Captulo6 tambm foi criado para esta edio. Apresentamos os clusters e, depois, trata-
mos detalhadamente dos computadores de escala warehouse (warehouse-scale computers
WSCs) que os arquitetos de computadores ajudam a projetar. Os projetistas de WSCs
so os descendentes profissionais dos pioneiros dos supercomputadores, como Seymour
Cray, pois vm projetando computadores extremos. Eles contm dezenas de milhares de
servidores, e seu equipamento e sua estrutura custam cerca de US$ 200 milhes. Os pro-
blemas de preo-desempenho e eficincia energtica abordados nos primeiros captulos
aplicam-se aos WSCs, assim como a abordagem quantitativa de tomada de decises.
Este livro conta com grande quantidade de material on-line (ver mais detalhes no Prefcio),
tanto para reduzir o custo quanto para apresentar aos leitores diversos tpicos avanados.
A Figura1.21 apresenta todo esse material. Os Apndices A, B e C, includos neste volume,
funcionaro como uma reviso para muitos leitores.
No Apndice D, nos desviaremos de uma viso centrada no processador e examinare-
mos questes sobre sistemas de armazenamento. Aplicamos um enfoque quantitativo
semelhante, porm baseado em observaes do comportamento do sistema, usando
uma tcnica de ponta a ponta para a anlise do desempenho. Ele focaliza a importante
questo de como armazenar e recuperar dados de modo eficiente usando principalmente

FIGURA 1.21 Lista de apndices.


54 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

as tecnologias de armazenamento magntico de menor custo. Nosso foco recai sobre o


exame do desempenho dos sistemas de armazenamento de disco para cargas de trabalho
tpicas de E/S, como os benchmarks OLTP que vimos neste captulo. Exploramos bastante
os tpicos avanados nos sistemas baseados em RAID, que usam discos redundantes para
obter alto desempenho e alta disponibilidade. Finalmente, o captulo apresenta a teoria
de enfileiramento, que oferece uma base para negociar a utilizao e a latncia.
O Apndice E utiliza um ponto de vista de computao embarcada para as ideias de cada
um dos captulos e apndices anteriores.
O Apndice F explora o tpico de interconexo de sistemas mais abertamente, incluindo
WANs e SANs, usadas para permitir a comunicao entre computadores.
Ele tambm descreve os clusters, que esto crescendo em importncia, devido sua
adequao e eficincia para aplicaes de banco de dados e servidor Web.
O Apndice H rev hardware e software VLIW, que, por contraste, so menos populares
do que quando o EPIC apareceu em cena, um pouco antes da ltima edio.
O Apndice I descreve os multiprocessadores em grande escala para uso na computao
de alto desempenho.
O Apndice J o nico que permanece desde a primeira edio. Ele abrange aritmtica
de computador.
O Apndice K um estudo das arquiteturas de instruo, incluindo o 80x86, o IBM 360,
o VAX e muitas arquiteturas RISC, como ARM, MIPS, Power e SPARC.
Descreveremos o Apndice L mais adiante.

1.13 PERSPECTIVAS HISTRICAS E REFERNCIAS


O Apndice L (disponvel on-line) inclui perspectivas histricas sobre as principais ideias
apresentadas em cada um dos captulos deste livro. Essas sees de perspectiva histrica
nos permitem rastrear o desenvolvimento de uma ideia por uma srie de mquinas ou des-
crever projetos significativos. Se voc estiver interessado em examinar o desenvolvimento
inicial de uma ideia ou mquina, ou em ler mais sobre o assunto, so dadas referncias ao
final de cada histria. Sobre este captulo, consulte a Seo L.2, O desenvolvimento inicial
dos computadores, para obter uma anlise do desenvolvimento inicial dos computadores
digitais e das metodologias de medio de desempenho.
Ao ler o material histrico, voc logo notar que uma das maiores vantagens da juventude
da computao, em comparao com vrios outros campos da engenharia, que muitos dos
pioneiros ainda esto vivos podemos aprender a histria simplesmente perguntando a eles!

ESTUDOS DE CASO E EXERCCIOS POR DIANA FRANKLIN


Estudo de caso 1: custo de fabricao de chip
Conceitos ilustrados por este estudo de caso
j Custo de fabricao
j Rendimento da fabricao
j Tolerncia a defeitos pela redundncia
Existem muitos fatores envolvidos no preo de um chip de computador. Tecnologia nova e
menor oferece aumento no desempenho e uma queda na rea exigida para o chip. Na tecno-
Estudos de caso e exerccios por Diana Franklin 55

FIGURA 1.22 Fatores de custo de manufatura para vrios processadores modernos.

logia menor, pode-se manter a rea pequena ou colocar mais hardware no chip, a fim de obter
mais funcionalidade. Neste estudo de caso, exploramos como diferentes decises de projeto
envolvendo tecnologia de fabricao, superfcie e redundncia afetam o custo dos chips.
1.1 [10/10] <1.6> A Figura1.22 contm uma estatstica relevante de chip,
que influencia o custo de vrios chips atuais. Nos prximos exerccios, voc
vai explorar as escolhas envolvidas para o IBM Power5.
a. [10] <1.6> Qual o rendimento para o IBM Power5?
b. [10] <1.6> Por que o IBM Power5 tem uma taxa de defeitos pior
do que o Niagara e o Opteron?
1.2 [20/20/20/20] <1,6> Custa US$ 1 bilho montar uma nova instalao
de fabricao. Voc vai produzir diversos chips nessa fbrica e precisa decidir
quanta capacidade dedicar a cada chip. Seu chip Woods ter uma rea de 150mm2,
vai lucrar US$ 20 por chip livre de defeitos. Seu chip Markon ter 250 mm2 e vai
gerar um lucro de US$ 225 por chip livre de defeitos. Sua instalao de fabricao
ser idntica quela do Power5. Cada wafer tem 300mm de dimetro.
a. [20] <1.6> Quanto lucro voc obter com cada wafer do chip Woods?
b. [20] <1.6> Quanto lucro voc obter com cada wafer do chip Markon?
c. [20] <1.6> Que chip voc deveria produzir nessa instalao?
d. [20] <1.6> Qual o lucro em cada novo chip Power5? Se sua demanda
de 50.000 chips Woods por ms e 25.000 chips Markon por ms,
e sua instalao pode fabricar 150 wafers em um ms, quantos wafers
de cada chip voc deveria produzir?
1.3 [20/20] <1.6> Seu colega na AMD sugere que, j que o rendimento to pobre,
voc poderia fabricar chips mais rapidamente se colocasse um ncleo extra no
die e descartasse somente chips nos quais os dois processadores tivessem falhado.
Vamos resolver este exerccio vendo o rendimento como a probabilidade
de no ocorrer nenhum defeito em certa rea, dada a taxa de defeitos. Calcule
as probabilidades com base em cada ncleo Opteron separadamente
(isso pode no ser inteiramente preciso, j que a equao do rendimento
baseada em evidncias empricas, e no em um clculo matemtico
relacionando as probabilidades de encontrar erros em partes diferentes do chip).
a. [20] <1.6> Qual a probabilidade de um defeito ocorrer em somente
um dos ncleos?
b. [10] <1.6> Se o chip antigo custar US$ 20 por unidade, qual ser o custo
do novo chip, levando em conta a nova rea e o rendimento?

Estudo de caso 2: consumo de potncia nos sistemas de computador


Conceitos ilustrados por este estudo de caso
j Lei de Amdahl
j Redundncia
j MTTF
j Consumo de potncia
56 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

O consumo de potncia nos sistemas modernos depende de uma srie de fatores, incluindo
a frequncia de clock do chip, a eficincia, a velocidade da unidade de disco, a utilizao
da unidade de disco e a DRAM. Os exerccios a seguir exploram o impacto sobre a potncia
que tem diferentes decises de projeto e/ou cenrios de uso.
1.4 [20/10/20] <1.5> A Figura1.23 apresenta o consumo de potncia de vrios
componentes do sistema de computador. Neste exerccio, exploraremos como
o disco rgido afeta o consumo de energia para o sistema.

FIGURA 1.23 Consumo de potncia de vrios componentes do computador.

a. [20] <1.5> Considerando a carga mxima para cada componente


e uma eficincia da fonte de alimentao de 80%, que potncia, em watts,
a fonte de alimentao do servidor precisa fornecer a um sistema com um chip
Intel Pentium 4 com DRAM Kingston de 2 GB e 240 pinos, e duas unidades
de disco rgido de 7.200rpm?
b. [10] <1.5> Quanta potncia a unidade de disco de 7.200rpm consumir
se estiver ociosa aproximadamente 60% do tempo?
c. [20] <1.5> Dado que o tempo de leitura de dados de um drive de disco
de 7.200rpm ser aproximadamente 75% do de um disco de 5.400rpm,
com qual tempo de inatividade do disco de 7.200rpm o consumo de energia
ser igual, na mdia, para os dois discos?
1.5 [10/10/20] <1.5> Um fator crtico no clculo de potncia de um conjunto
de servidores o resfriamento. Se o calor no for removido do computador
com eficincia, os ventiladores devolvero ar quente ao computador em vez de ar
frio. Veremos como diferentes decises de projeto afetam o resfriamento necessrio e,
portanto, o preo de um sistema. Use a Figura1.23 para fazer os clculos de potncia.
a. [10] <1.5> Uma porta de resfriamento para um rack custa US$ 4.000 e
dissipa 14 KW (na sala; um custo adicional necessrio para que saia da sala).
Quantos servidores com processador Intel Pentium 4, DRAM de 1 GB em 240
pinos e um nico disco rgido de 7.200rpm voc pode resfriar com uma porta
de resfriamento?
b. [10] <1.5> Voc est considerando o fornecimento de tolerncia a falhas para a
sua unidade de disco rgido. O RAID 1 dobra o nmero de discos (Cap.6). Agora,
quantos sistemas voc pode colocar em um nico rack com um nico cooler?
c. [20] <1.5> Conjunto de servidores tpicos pode dissipar no mximo 200W
por p quadrado. Dado que um rack de servidor requer 11 ps quadrados
(incluindo espaos na frente e atrs), quantos servidores da parte (a) podem se
colocados em um nico rack e quantas portas de resfriamento so necessrias?
1.6 [Discusso] <1.8> A Figura1.24 oferece uma comparao da potncia e do
desempenho para vrios benchmarks considerando dois servidores: Sun Fire
T2000 (que usa o Niagara) e IBM x346 (que usa processadores Intel Xeon). Essa
Estudos de caso e exerccios por Diana Franklin 57

FIGURA 1.24 Comparao de potncia/desempenho do Sun, conforme informado seletivamente pela Sun.

informao foi reportada em um site da Sun. Existem duas informaes reportadas:


potncia e velocidade em dois benchmarks. Para os resultados mostrados, o Sun
Fire T2000 claramente superior. Que outros fatores poderiam ser importantes
a ponto de fazer algum escolher o IBM x346 se ele fosse superior nessas reas?
1.7 [20/20/20/20] <1.6, 1.9> Os estudos internos da sua empresa mostram
que um sistema de nico ncleo suficiente para a demanda na sua capacidade
de processamento. Porm, voc est pesquisando se poderia economizar potncia
usando dois ncleos.
a. [20] <1.9> Suponha que sua aplicao seja 80% paralelizvel. Por quanto
voc poderia diminuir a frequncia e obter o mesmo desempenho?
b. [20] <1.6> Considere que a voltagem pode ser diminuda linearmente com
a frequncia. Usando a equao na Seo1.5, quanta potncia dinmica
o sistema de dois ncleos exigiria em comparao com o sistema de nico ncleo?
c. [20] <1.6, 1.9> Agora considere que a tenso no pode cair para menos
de 25% da voltagem original. Essa tenso conhecida como piso de tenso,
e qualquer voltagem inferior a isso perder o estado. Que porcentagem
de paralelizao lhe oferece uma tenso no piso de tenso?
d. [20] <1.6, 1.9> Usando a equao da Seo1.5, quanta potncia dinmica
o sistema de dois ncleos exigiria em comparao com o sistema de nico
ncleo, levando em considerao o piso de tenso?

Exerccios
1.8 [10/15/15/10/10] <1.1,1.5> Um desafio para os arquitetos que o projeto criado
hoje vai requerer muitos anos de implementao, verificao e testes antes
de aparecer no mercado. Isso significa que o arquiteto deve projetar, muitos anos
antes, o que a tecnologia ser. s vezes, isso difcil de fazer.
a. [10] <1.4> De acordo com a tendncia em escala de dispositivo observada
pela lei de Moore, o nmero de transistores em 2015 ser quantas vezes
o nmero de transistores em 2005?
b. [10] <1.5> Um dia, o aumento nas frequncias de clock acompanhou essa
tendncia. Se as frequncias de clock tivessem continuado a crescer na mesma
taxa que nos anos 1990, aproximadamente quo rpidas seriam as frequncias
de clock em 2015?
c. [15] <1.5> Na taxa de aumento atual, quais so as frequncias de clock
projetadas para 2015?
d. [10] <1.4> O que limitou a taxa de aumento da frequncia de clock
e o que os arquitetos esto fazendo com os transistores adicionais
para aumentar o desempenho?
e. [10] <1.4> A taxa de crescimento para a capacidade da DRAM tambm
diminuiu. Por 20 anos, a capacidade da DRAM aumentou em 60% por ano.
Essa taxa caiu para 40% por ano e hoje o aumento de 25-40% por ano.
58 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

Se essa tendncia continuar, qual ser a taxa de crescimento aproximada para


a capacidade da DRAM em 2020?
1.9 [10/10] <1.5> Voc est projetando um sistema para uma aplicao em tempo real
na qual prazos especficos devem ser atendidos. Terminar o processamento mais rpido
no traz nenhum benefcio. Voc descobre que, na pior das hipteses, seu sistema
pode executar o cdigo necessrio duas vezes mais rpido do que o necessrio.
a. [10] <1.5> Quanta energia voc economizar se executar na velocidade atual
e desligar o sistema quando o processamento estiver completo?
b. [10] <1.5> Quanta energia voc economizar se configurar a voltagem
e a frequncia para a metade das atuais?
1.10 [10/10/20/10] <1.5> Conjunto de servidores, como as do Google e do Yahoo!,
fornece capacidade computacional suficiente para a maior taxa de requisies
do dia. Suponha que, na maior parte do tempo, esses servidores operem a 60%
da capacidade. Suponha tambm que a potncia no aumente linearmente com
a carga, ou seja, quando os servidores esto operando a 60% de capacidade,
consomem 90% da potncia mxima. Os servidores poderiam ser desligados,
mas levariam muito tempo para serem reiniciados em resposta a mais carga. Foi
proposto um novo sistema, que permite um reincio rpido, mas requer 20%
da potncia mxima durante esse estado quase vivo.
a. [10] <1.5> Quanta economia de energia seria obtida desligando
60% dos servidores?
b. [10] <1.5> Quanta economia de energia seria obtida colocando
60% dos servidores no estado quase vivo?
c. [20] <1.5> Quanta economia de energia seria obtida reduzindo a tenso
em 20% e a frequncia em 40%?
d. [20] <1.5> Quanta economia de energia seria obtida colocando
30% dos servidores no estado quase vivo e desligando 30%?
1.11 [10/10/20] <1.7> Disponibilidade a considerao mais importante
para o projeto de servidores, seguida de perto pela escalabilidade e pelo throughput.
a. [10] <1.7> Temos um nico processador com falhas no tempo (FIT)
de 100. Qual o tempo mdio para a falha (MTTF) desse sistema?
b. [10] <1.7> Se levar um dia para fazer o sistema funcionar de novo, qual ser
a disponibilidade desse sistema?
c. [20] <1.7> Imagine que, para reduzir custos, o governo vai construir um
supercomputador a partir de computadores baratos em vez de computadores
caros e confiveis. Qual o MTTF para um sistema com 1.000 processadores?
Suponha que, se um falhar, todos eles falharo.
1.12 [20/20/20] <1.1, 1.2, 1.7> Em conjunto de servidores como os usadas pela
Amazon e pelo eBay, uma nica falha no faz com que todo o sistema deixe
de funcionar. Em vez disso, ela vai reduzir o nmero de requisies que podem
ser satisfeitas em dado momento.
a. [20] <1.7> Se uma companhia tem 10.000 computadores, cada qual
com um MTTF de 35 dias, e sofre uma falha catastrfica somente quando
1/3 dos computadores falham, qual o MTTF do sistema?
b. [20] <1.1, 1.7> Se uma companhia tivesse US$ 1.000 adicionais,
por computador, para dobrar o MTTF, essa seria uma boa deciso de negcio?
Mostre seu trabalho.
c. [20] <1.2> A Figura1.3 mostra a mdia dos custos dos tempos de paralisao,
supondo que o custo igual durante o ano todo. Para os varejistas, entretanto,
a poca de Natal a mais lucrativa (e, portanto, a mais prejudicada pela perda
de vendas). Se um centro de vendas por catlogo tiver duas vezes mais trfego
Estudos de caso e exerccios por Diana Franklin 59

no quarto trimestre do que em qualquer outro, qual ser o custo mdio


do tempo de paralisao por hora no quarto trimestre e no restante do ano?
1.13 [10/20/20] <1.9> Suponha que sua empresa esteja tentando decidir
entre adquirir o Opteron e adquirir o Itanium 2. Voc analisou as aplicaes
da sua empresa e notou que em 60% do tempo ela estar executando
aplicaes similares ao wupwise, em 20% do tempo aplicaes similares
ao ammp e em 20% do tempo aplicaes similares ao apsi.
a. [10] Se voc estivesse escolhendo somente com base no desempenho
SPEC geral, qual seria a escolha e por qu?
b. [20] Qual a mdia ponderada das taxas de tempo de execuo para esse mix
de aplicaes para o Opteron e o Itanium 2?
c. [20] Qual o ganho de velocidade do Opteron sobre o Itanium 2?
1.14 [20/10/10/10/15] <1.9> Neste exerccio, suponha que estejamos considerando
melhorar uma mquina adicionando a ela hardware vetorial. Quando
um processamento executado em modo vetor nesse hardware, 10 vezes mais
rpido do que o modo original de execuo. Chamamos porcentagem de vetorizao
a porcentagem de tempo que seria gasta usando o modo vetorial. Vetores sero
discutidos no Captulo4, mas voc no precisa saber nada sobre como eles
funcionam para responder a esta questo!
a. [20] <1.9> Trace um grfico que plote o ganho de velocidade como uma
porcentagem do processamento realizada em modo vetor. Chame o eixo y
de Ganho mdio de velocidade e o eixo x de Porcentagem de vetorizao.
b. [10] <1.9> Que porcentagem de vetorizao necessria para atingir um
ganho de velocidade de 2?
c. [10] <1.9> Que porcentagem do tempo de execuo do processamento ser
gasto no modo vetorial se um ganho de velocidade de 2 for alcanado?
d. [10] <1.9> Que porcentagem de vetorizao necessria para atingir metade
do ganho de velocidade que pode ser obtido usando o modo vetorial?
e. [15] <1.9> Suponha que voc tenha descoberto que a porcentagem
de vetorizao do programa de 70%. O grupo de projeto de hardware estima que
pode acelerar ainda mais o hardware vetorial com significativo investimento
adicional. Voc imagina, em vez disso, que a equipe do compilador poderia
aumentar a porcentagem de vetorizao. Que porcentagem de vetorizao
a equipe do compilador precisa atingir para igualar uma adio de 2x no ganho
de velocidade na unidade vetorial (alm dos 10x iniciais)?
1.15 [15/10] <1.9> Suponha que tenha sido feita uma melhoria em um computador
que aumente algum modo de execuo por um fator de 10. O modo melhorado
usado em 50% do tempo e medido como uma porcentagem do tempo
de execuo quando o modo melhorado est em uso. Lembre-se de que a lei de Amdahl
depende da frao de tempo de execuo original e no melhorado que poderia
fazer uso do modo melhorado. Assim, no podemos usar diretamente
essa medida de 50% para calcular o ganho de velocidade com a lei de Amdahl.
a. [15] <1.9> Qual o ganho de velocidade que obtemos do modo rpido?
b. [10] <1.9> Que porcentagem do tempo de execuo original foi convertida
para o modo rpido?
1.16 [20/20/15] <1.9> Muitas vezes, ao fazermos modificaes para otimizar parte
de um processador, o ganho de velocidade em um tipo de instruo ocorre
custa de reduzir a velocidade de algo mais. Por exemplo, se adicionarmos uma
complicada unidade de ponto flutuante que ocupe espao e algo tiver de ser
afastado do centro para acomod-la, adicionar um ciclo extra de atraso para atingir
essa unidade. A equao bsica da lei de Amdahl no leva em conta essa troca.
60 CAPTULO 1: Fundamentos do projeto e anlise quantitativos

a. [20] <1.9> Se a nova unidade rpida de ponto flutuante acelerar as operaes


do ponto flutuante numa mdia de 2x e as operaes de ponto flutuante
ocuparem 20% do tempo de execuo do programa original, qual ser
o ganho geral de velocidade (ignorando a desvantagem de quaisquer outras
instrues)?
b. [20] <1.9> Agora suponha que a acelerao da unidade de ponto flutuante
reduziu a velocidade dos acessos cache de dados, resultando em uma
reduo de velocidade de 1,5x (ou em ganho de velocidade de 2/3).
Os acessos cache de dados consomem 10% do tempo de execuo.
Qual o ganho geral de velocidade agora?
c. [15] <1.9> Depois de implementar as novas operaes de ponto flutuante,
que porcentagem do tempo de execuo gasto em operaes desse tipo? Que
porcentagem gasta em acessos cache de dados?
1.17 [10/10/20/20] <1.10> Sua empresa acabou de comprar um novo processador
Intel Core i5 e voc foi encarregado de otimizar seu software para esse
processador. Voc executar duas aplicaes nesse Pentium dual, mas os requisitos
de recursos no so iguais. A primeira aplicao precisa de 80% dos recursos e
a outra de apenas 20% dos recursos. Suponha que, quando voc paraleliza uma
parte do programa, o ganho de velocidade para essa parte seja de 2.
a. [10] <1.10> Se 40% da primeira aplicao fosse paralelizvel, quanto ganho
de velocidade voc obteria com ela se fosse executada isoladamente?
b. [10] <1.10> Se 99% da segunda aplicao fosse paralelizvel, quanto ganho
de velocidade ela observaria se fosse executada isoladamente?
c. [20] <1.10> Se 40% da primeira aplicao fosse paralelizvel, quanto ganho
de velocidade geral do sistema voc observaria se a paralelizasse?
d. [20] <1.10> Se 99% da segunda aplicao fosse paralelizvel, quanto ganho
de velocidade geral do sistema voc obteria?
1.18 [10/20/20/20/25] <1.10> Ao paralelizar uma aplicao, o ganho de velocidade
ideal feito pelo nmero de processadores. Isso limitado por duas coisas:
a porcentagem da aplicao que pode ser paralelizada e o custo da comunicao.
A lei de Amdahl leva em conta a primeira, mas no a segunda.
a. [10] <1.10> Qual ser o ganho de velocidade com N processadores se 80%
da aplicao puder ser paralelizada, ignorando o custo de comunicao?
b. [20] <1.10> Qual ser o ganho de velocidade com oito processadores se,
para cada processador adicionado, o custo adicional de comunicao
for de 0,5% do tempo de execuo original?
c. [20] <1.10> Qual ser o ganho de velocidade com oito processadores se, cada
vez que o nmero de processadores for dobrado, o custo adicional
de comunicao for aumentado em 0,5% do tempo de execuo original?
d. [20] <1.10> Qual ser o ganho de velocidade com N processadores se, cada
vez que o nmero de processadores for dobrado, o custo adicional
de comunicao for aumentado em 0,5% do tempo de execuo original?
e. [25] <1.10> Escreva a equao geral que resolva esta questo: qual
o nmero de processadores com o maior ganho de velocidade em uma
aplicao na qual P% do tempo de execuo original paralelizvel e,
para cada vez que o nmero de processadores for dobrado, a comunicao
ser aumentada em 0,5% do tempo de execuo original?
CAPTULO 2

Projeto de hierarquia de memria

O ideal seria uma capacidade de memria indefinidamente grande, de modo que


qualquer palavra em particular [] pudesse estar imediatamente disponvel []
Somos [] forados a reconhecer a possibilidade de construir uma hierarquia de
memrias, cada qual com maior capacidade que a anterior, porm com acesso
mais lento que a outra.
A. W. Burks, H. H. Goldstine e J. von Neumann, Preliminary Discussion of the Logical
Design of na Eletronic Computing Instrument (1946)

2.1 Introduo..............................................................................................................................................61
2.2 Dez otimizaes avanadas de desempenho de cach......................................................................67
2.3 Tecnologia de memria e otimizaes.................................................................................................83
2.4 Proteo: memria virtual e mquinas virtuais..................................................................................91
2.5 Questes cruzadas: o projeto de hierarquias de memria.................................................................97
2.6 Juntando tudo: hierarquia de memria noARM Cortex-A8 e Intel Core i7.....................................98
2.7 Falcias e armadilhas..........................................................................................................................107
2.8 Comentrios finais: olhando para o futuro........................................................................................113
2.9 Perspectivas histricas e referncias.................................................................................................114
Estudos de caso com exerccios por Norman P. Jouppi, Naveen Muralimanohar e Sheng Li..............114

2.1INTRODUO
Os pioneiros do computador previram corretamente que os programadores desejariam
uma quantidade ilimitada de memria rpida. Uma soluo econmica para isso a
hierarquia de memria, que tira proveito da localidade e da relao custo-desempenho
das tecnologias de memria. O princpio da localidade, apresentado no Captulo1, afirma
que a maioria dos programas no acessa todo o cdigo ou dados uniformemente. A
localidade ocorre no tempo (localidade temporal) e no espao (localidade espacial). Esse
princpio, junto com a noo de que um hardware menor pode se tornar mais rpi-
do, levou s hierarquias baseadas em memrias de diferentes velocidades e tamanhos.
A Figura2.1 mostra uma hierarquia de memria multinvel, incluindo os valores tpicos
do tamanho e da velocidade de acesso.
Como a memria rpida tambm cara, uma hierarquia de memria organizada em
vrios nveis cada qual menor, mais rpido e mais caro por byte do que o nvel inferior
seguinte. O objetivo oferecer um sistema de memria com custo por unidade quase to
baixo quanto o nvel de memria mais barato e velocidade quase to rpida quanto o
nvel mais rpido. Na maioria dos casos (mas nem sempre), os dados contidos em um
nvel inferior so um subconjunto do nvel superior seguinte. Essa propriedade, chamada 61
62 CAPTULO 2: Projeto de hierarquia de memria

FIGURA 2.1 Os nveis em uma hierarquia de memria em um servidor (a) e em um dispositivo pessoal mvel (PMD) (b).
medida que nos distanciamos do processador, a memria no nvel abaixo se torna mais lenta e maior. Observe que as unidades de tempo mudam por
fatores de 109 de picossegundos para milissegundos e que as unidades de tamanho mudam por fatores de 1012 de bytes para terabytes.
O PMD tem uma taxa de clock menor e as caches e a memria principal menores. Uma diferena-chave que os servidores e desktops usam
armazenamento de disco como o nvel mais baixo na hierarquia, enquanto os PMDs usam memria Flash, construda a partir de tecnologia EEPROM.

propriedade de incluso, sempre necessria para o nvel mais baixo da hierarquia, que
consiste na memria principal, no caso das caches, e na memria de disco, no caso da
memria virtual.
A importncia da hierarquia de memria aumentou com os avanos no desempenho dos
processadores. A Figura2.2 ilustra as projees do desempenho do processador contra a
melhoria histrica de desempenho no tempo para acessar a memria principal. A linha
do processador mostra o aumento na mdia das requisies de memria por segundo (ou
seja, o inverso da latncia entre referncias de memria), enquanto a linha da memria
mostra o aumento nos acessos por segundo DRAM (ou seja, o inverso da latncia de
acesso DRAM). Na verdade, a situao em um uniprocessador um pouco pior, uma
vez que o pico na taxa de acesso memria mais rpido do que a taxa mdia, que o
que mostrado.
Mais recentemente, processadores de alto nvel progrediram para mltiplos ncleos,
aumentando mais os requisitos de largura de banda em comparao com os ncleos
nicos. De fato, o pico de largura de banda agregada essencialmente aumenta conforme o
nmero de ncleos aumenta. Um processador de alto nvel moderno, como o Intel Core
i7, pode gerar duas referncias de memria de dados por ncleo a cada ciclo de clock.
Com quatro ncleos em uma taxa de clock de 3,2GHz, o i7 pode gerar um pico de 25,6
bilhes de referncias a dados de 64 bits por segundo, alm de um pico de demanda de
instrues de cerca de 12,8 bilhes de referncias a instrues de 128 bits. Isso um pico
2.1Introduo 63

FIGURA 2.2 Comeando com o desempenho de 1980 como uma linha base, a distncia do desempenho,
medida como a diferena entre os requisitos da memria dos processadores (para um uniprocessador
ou para um core) e a latncia de um acesso DRAM, desenhada contra o tempo.
Observe que o eixo vertical precisa estar em uma escala logartmica para registrar o tamanho da diferena
de desempenho processador-DRAM. A linha-base da memria de 64 KB de DRAM em 1980, com uma
melhoria de desempenho de 1,07 por ano na latncia (Fig.2.13, na pgina 85). A linha do processador pressupe uma
melhoria de 1,25 por ano at 1986, uma melhoria de 1,52 at 2000, uma melhoria de 1,20 entre 2000 e 2005,
e nenhuma mudana no desempenho do processador (tendo por base um ncleo por core) entre 2005 e 2010
(Fig.1.1, no Cap.1).

de largura de banda total de 409,6GB/s! Essa incrvel largura de banda alcanada pelo
multiporting e pelo pipelining das caches; pelo uso de nveis mltiplos de caches, usando
caches de primeiro e s vezes segundo nvel separados por ncleo; e pelo uso de
caches de dados e instrues separados no primeiro nvel. Em contraste, o pico de largura
de banda para a memria principal DRAM de somente 6% desse valor (25GB/s).
Tradicionalmente, os projetistas de hierarquias de memria se concentraram em otimizar
o tempo mdio de acesso memria, que determinado pelo tempo de acesso cache,
taxa de falta e penalidade por falta. Mais recentemente, entretanto, a potncia tornou-se
uma importante considerao. Em microprocessadores de alto nvel, pode haver 10 MB
ou mais de cache no chip, e uma grande cache de segundo ou terceiro nvel vai
consumir potncia significativa, tanto como fuga, quando ele no est operando (chamada
potncia esttica) quanto como potncia ativa quando uma leitura ou gravao realizada
(chamada potncia dinmica), como descrito na Seo 2.3. O problema ainda mais
srio em processadores em PMDs, nos quais a CPU menos agressiva e a necessidade de
potncia pode ser 20-50 vezes menor. Nesses casos, as caches podem ser responsveis por
25-50% do consumo total de potncia. Assim, mais projetos devem considerar a relao
de desempenho e da potncia, que sero examinados neste captulo.

O bsico das hierarquias de memria: uma reviso rpida


O tamanho crescente e, portanto, a importncia dessa diferena levou migrao dos
fundamentos de hierarquia de memria para os cursos de graduao em arquitetura de
computador e at mesmo para cursos de sistemas operacionais e compiladores. Assim, co-
mearemos com uma rpida reviso das caches e sua operao. Porm, este captulo descreve
inovaes mais avanadas, que focam a diferena de desempenho processador-memria.
Quando uma palavra no encontrada na cache, ela precisa ser recuperada de um nvel
inferior na hierarquia (que pode ser outra cache ou a memria principal) e colocada na
64 CAPTULO 2: Projeto de hierarquia de memria

cache antes de continuar. Mltiplas palavras, chamadas bloco (ou linha), so movidas por
questes de eficincia, e porque elas provavelmente sero necessrias em breve, devido
localizao espacial. Cada bloco da I-cache inclui uma tag para ver a qual endereo de
memria ela corresponde.
Uma deciso de projeto importante em que parte da cache os blocos (ou linhas) podem
ser colocados. O esquema mais popular a associao por conjunto (set associative), em que
um conjunto um grupo de blocos na cache. Primeiro, um bloco mapeado para um
conjunto; depois pode ser colocado em qualquer lugar dentro desse conjunto. Encontrar
um bloco consiste primeiramente em mapear o endereo do bloco para o conjunto e
depois em examinar o conjunto normalmente em paralelo para descobrir o bloco.
O conjunto escolhido pelo endereo dos dados:
(Endereodo bloco)MOD(Nmerode conjuntos da cache)

Se houver n blocos em um conjunto, o posicionamento da cache ser denominado as-


sociativo por conjunto com n vias (n-way set associative). As extremidades da associatividade
do conjunto tm seus prprios nomes. Uma cache mapeada diretamente tem apenas um
bloco por conjunto (de modo que um bloco sempre colocado no mesmo local), e uma
cache totalmente associativa tem apenas um conjunto (de modo que um bloco pode ser
colocado em qualquer lugar).
O caching de dados que so apenas lidos fcil, pois as cpias na cache e na memria so
idnticas. O caching de escritas mais difcil: como a cpia na cache e na memria pode
ser mantida consistente? Existem duas estratgias principais. A write-through, que atualiza
o item na cache e tambm escreve na memria principal, para atualiz-la. A write-back s
atualiza a cpia na cache. Quando o bloco est para ser atualizado, ele copiado de volta
na memria. As duas estratgias de escrita podem usar um buffer de escrita para permitir
que a cache prossiga assim que os dados forem colocados no buffer, em vez de esperar a
latncia total para escrever os dados na memria.
Uma medida dos benefcios de diferentes organizaes de cache a taxa de falta. A taxa
de falta (miss rate) simplesmente a frao de acessos cache que resulta em uma falta,
ou seja, o nmero de acessos em que ocorre a falta dividido pelo nmero total de acessos.
Para entender as causas das altas taxas de falta, que podem inspirar projetos de cache
melhores, o modelo dos trs C classifica todas as faltas em trs categorias simples:
j Compulsria. O primeiro acesso a um bloco no pode estar na cache, de modo
queobloco precisa ser trazido para a cache. As faltas compulsrias so aquelas
queocorrem mesmo que se tenha uma I-cache infinita.
j Capacidade. Se a cache tiver todos os blocos necessrios durante a execuo
deumprograma, as faltas por capacidade (alm das faltas compulsrias) ocorrero
porque os blocos so descartados e mais tarde recuperados.
j Conflito. Se a estrutura de colocao do bloco no for totalmente associativa, faltas
por conflito (alm das faltas compulsrias e de capacidade) ocorrero porque um
bloco pode ser descartado e mais tarde recuperado se os blocos em conflito forem
mapeados para o seu conjunto e os acessos aos diferentes blocos forem intercalados.
As Figuras B.8 e B.9, nas pginas B-21 e B-22, mostram a frequncia relativa das faltas de
cache desmembradas pelos trs C. Como veremos nos Captulos 3 e 5, o multithreading
e os mltiplos ncleos acrescentam complicaes para as caches, tanto aumentando o
potencial para as faltas de capacidade quanto acrescentando um quarto C para as faltas de
coerncia advindas de esvaziamentos de cache, a fim de manter mltiplas caches coerentes
em um multiprocessador. Vamos considerar esses problemas no Captulo5.
2.1Introduo 65

Infelizmente, a taxa de falta pode ser uma medida confusa por vrios motivos. Logo,
alguns projetistas preferem medir as faltas por instruo em vez das faltas por referncia de
memria (taxa de falta). Essas duas esto relacionadas:

Perdas Taxas de perdas Acessos memria Acessos memria


= = Taxa de perda
Instruo Contagemde instrues Instruo

(Normalmente so relatadas como faltas por 1.000 instrues, para usar inteiros no lugar
de fraes.)
O problema com as duas medidas que elas no levam em conta o custo de uma falta.
Uma medida melhor o tempo de acesso mdio memria:

Tempode acesso mdio memria = Tempode acerto + Taxa de falta Penalidade de falta

onde tempo de acerto o tempo de acesso quando o item acessado est na cache e penalidade
de falta o tempo para substituir o bloco de memria (ou seja, o custo de uma falta). O
tempo de acesso mdio memria ainda uma medida indireta do desempenho; embora
sendo uma medida melhor do que a taxa de falta, ainda no um substituto para o tempo
de execuo. No Captulo3, veremos que os processadores especulativos podem executar
outras instrues durante uma falta, reduzindo assim a penalidade efetiva de falta. O uso
de multithreading (apresentado no Cap.3) tambm permite que um processador tolere
faltas sem ser forado a ficar inativo. Como veremos em breve, para tirar vantagem de tais
tcnicas de tolerncia de latncia, precisamos de caches que possam atender requisies
e, ao mesmo tempo, lidar com uma falta proeminente.
Se este material novo para voc ou se esta reviso estiver avanando muito rapidamente,
consulte o Apndice B. Ele aborda o mesmo material introdutrio com profundidade e
inclui exemplos de caches de computadores reais e avaliaes quantitativas de sua eficcia.
A Seo B.3, no Apndice B, tambm apresenta seis otimizaes de cache bsicas, que
revisamos rapidamente aqui. O apndice oferece exemplos quantitativos dos benefcios
dessas otimizaes.
1. Tamanho de bloco maior para reduzir a taxa de falta. O modo mais simples de reduzir
a taxa de falta tirar proveito da proximidade espacial e aumentar o tamanho
dobloco. Blocos maiores reduzem as faltas compulsrias, mas tambm aumentam
a penalidade da falta. J que blocos maiores diminuem o nmero de tags, eles
podem reduzir ligeiramente a potncia esttica. Blocos de tamanhos maiores
tambm podem aumentar as faltas por capacidade ou conflito, especialmente
emcaches menores. Selecionar o tamanho de bloco correto uma escolha
complexa que depende do tamanho da cache e da penalidade de falta.
2. Caches maiores para reduzir a taxa de falta. O modo bvio de reduzir as faltas
porcapacidade aumentar a capacidade da cache. As desvantagens incluem
otempo de acerto potencialmente maior da memria de cache maior, alm de custo
e consumo de potncia mais altos. Caches maiores aumentam tanto a potncia
dinmica quanto a esttica.
3. Associatividade mais alta para reduzir a taxa de falta. Obviamente, aumentar
aassociatividade reduz as faltas por conflito. Uma associatividade maior
podeterocusto de maior tempo de acerto. Como veremos em breve,
aassociatividade tambm aumenta o potncia.
4. Caches multinveis para reduzir a penalidade de falta. Uma deciso difcil a de tornar
o tempo de acerto da cache rpido, para acompanhar a taxa de clock crescente dos
processadores ou tornar a cache grande, para contornar a grande diferena entre o
66 CAPTULO 2: Projeto de hierarquia de memria

FIGURA 2.3 Os tempos de acesso geralmente aumentam conforme o tamanho da cache e a


associatividade aumentam.
Esses dados vm do CACTI modelo 6.5 de Tarjan, Thoziyoor e Jouppi (2005). O dado supe um tamanho caracterstico
de 40nm (que est entre a tecnologia usada nas verses mais rpida e segunda mais rpida do Intel i7 e igual
tecnologia usada nos processadores AMD embutidos mais velozes), um nico banco e blocos de 64 bytes.
As suposies sobre o leiaute da cache e as escolhas complexas entre atrasos de interconexo (que dependem
dotamanho do bloco de cache sendo acessado) e o custo de verificaes de tag e multiplexao levaram a resultados
que so ocasionalmente surpreendentes, como o menor tempo de acesso de uma associatividade por conjunto de
duas vias com 64 KB em comparao com o mapeamento direto. De modo similar, os resultados com associatividade
por conjunto de oito vias gera um comportamento incomum conforme o tamanho da cache aumenta. Uma vez que tais
observaes so muito dependentes da tecnologia e suposies detalhadas de projeto, ferramentas como o CACTI
servem para reduzir o espao de busca, e no para uma anlise precisa das opes.

processador e a memria principal. A incluso de outro nvel de cache entre a cache


original e a memria simplifica a deciso (Fig.2.3). A cache de primeiro nvel pode
ser pequena o suficiente para combinar com um tempo de ciclo de clock rpido,
enquanto a cache de segundo nvel pode ser grande o suficiente para capturar
muitos acessos que iriam para a memria principal. O foco nas faltas nas caches
de segundo nvel leva a blocos maiores, capacidade maior e associatividade mais
alta. Se L1 e L2 se referem, respectivamente, s caches de primeiro e segundo nveis,
podemos redefinir o tempo de acesso mdio memria:

TempoacertoL1 + Taxa falta L1 (TempoacertoL2 + Taxa falta L2 Penalidade falta L2 )

5. Dar prioridade s faltas de leitura, em vez de escrita, para reduzir a penalidade de falta.
Um buffer de escrita um bom lugar para implementar essa otimizao. Os buffers
de escrita criam riscos porque mantm o valor atualizado de um local necessrio
em uma falta de leitura, ou seja, um risco de leitura aps escrita pela memria. Uma
soluo verificar o contedo do buffer de escrita em uma falta de leitura. Se no
houver conflitos e se o sistema de memria estiver disponvel, o envio da leitura
antes das escritas reduzir a penalidade de falta. A maioria dos processadores d
prioridade s leituras em vez de s escritas. Essa escolha tem pouco efeito sobre
oconsumo de potncia.
2.2 Dez otimizaes avanadas de desempenho da cache 67

6. Evitar traduo de endereo durante a indexao da cache para reduzir o tempo de acerto.
As caches precisam lidar com a traduo de um endereo virtual do processador
para um endereo fsico para acessar a memria (a memria virtual explicada
nas Sees 2.4 e B.4). Uma otimizao comum usar o offset de pgina a parte
idntica nos endereos virtual e fsico para indexar a cache, como descrito no
Apndice B, pgina B-34. Esse mtodo de ndice virtual/tag fsico introduz algumas
complicaes de sistema e/ou limitaes no tamanho e estrutura da cache L1, mas
as vantagens de remover o acesso ao translation buffer lookaside (TLB) do caminho
crtico supera as desvantagens.
Observe que cada uma dessas seis otimizaes possui uma desvantagem em potencial, que
pode levar a um tempo de acesso mdio memria ainda maior em vez de diminu-lo.
O restante deste captulo considera uma familiaridade com o material anterior e os deta-
lhes apresentados no Apndice B. Na seo Juntando tudo, examinamos a hierarquia
de memria para um microprocessador projetado para um servidor de alto nvel, o Intel
Core i7, alm de um projetado para uso em um PMD, o Arm Cortex-A8, que a base para
o processador usado no Apple iPad e diversos smartphones de alto nvel. Dentro de cada
uma dessas classes existe significativa diversidade na abordagem, devido ao uso planejado
do computador. Embora o processador de alto nvel usado no servidor tenha mais n-
cleos e caches maiores do que os processadores Intel projetados para usos em desktop,
os processadores tm arquiteturas similares. As diferenas so guiadas pelo desempenho
e pela natureza da carga de trabalho. Computadores desktop executam primordialmente
um aplicativo por vez sobre um sistema operacional para um nico usurio, enquanto
computadores servidores podem ter centenas de usurios rodando dzias de aplicaes ao
mesmo tempo. Devido a essas diferenas na carga de trabalho, os computadores desktop
geralmente se preocupam mais com a latncia mdia da hierarquia de memria, enquanto
os servidores se preocupam tambm com a largura de banda da memria. Mesmo dentro
da classe de computadores desktop, existe grande diversidade entre os netbooks, que vo
desde os de baixo nvel com processadores reduzidos mais similares aos encontrados
em PMDs de alto nvel at desktops de alto nvel cujos processadores contm mltiplos
ncleos e cuja organizao lembra a de um servidor de baixo nvel.
Em contraste, os PMDs no s atendem a um usurio, mas geralmente tambm tm sis-
temas operacionais menores, geralmente menos multitasking (a execuo simultnea de
diversas aplicaes) e aplicaes mais simples. Em geral, os PMDs tambm usam memria
Flash no lugar de discos, e a maioria considera tanto o desempenho quanto o consumo
de energia, que determina a vida da bateria.

2.2 DEZ OTIMIZAES AVANADAS DE DESEMPENHO


DA CACHE
A frmula do tempo mdio de acesso memria, dada anteriormente, nos oferece trs
medidas para otimizaes da cache: tempo de acerto, taxa de falta e penalidade de falta.
Dadas as tendncias atuais, adicionamos largura de banda da cache e consumo de potncia
a essa lista. Podemos classificar as 10 otimizaes avanadas de cache que vamos examinar
em cinco categorias baseadas nessas medidas:
1. Reduzir o tempo de acerto: caches de primeiro nvel pequenas e simples e previso
devias (way-prediction). Ambas as tcnicas diminuem o consumo de potncia.
2. Aumentar a largura de banda da cache: caches em pipeline, caches em multibanco
ecaches de no bloqueio. Essas tcnicas tm impacto variado sobre o consumo
depotncia.
68 CAPTULO 2: Projeto de hierarquia de memria

3. Reduzir a penalidade de falta: primeira palavra crtica e utilizao de write buffer


merges. Essas otimizaes tm pouco impacto sobre a potncia.
4. Reduzir a taxa de falta: otimizaes do compilador. Obviamente, qualquer melhoria
no tempo de compilao melhora o consumo de potncia.
5. Reduzir a penalidade de falta ou a taxa de falta por meio do paralelismo: pr-busca
do hardware e pr-busca do compilador. Essas otimizaes geralmente aumentam
o consumo de potncia, principalmente devido aos dados pr-obtidos que no so
usados.
Em geral, a complexidade do hardware aumenta conforme prosseguimos por essas oti-
mizaes. Alm disso, vrias delas requerem uma tecnologia complexa de compiladores.
Concluremos com um resumo da complexidade da implementao e os benefcios das
10 tcnicas (Fig.2.11, na pgina 82) para o desempenho. Uma vez que algumas delas so
bastantes diretas, vamos abord-las rapidamente. Outras, contudo, requerem descries
mais detalhadas.

Primeira otimizao: caches pequenas e simples


para reduzir o tempo de acerto e a potncia
A presso de um ciclo de clock rpido e das limitaes de consumo de potncia encoraja o
tamanho limitado das caches de primeiro nvel. Do mesmo modo, o uso de nveis menores
de associatividade pode reduzir tanto o tempo de acerto quanto a potncia, embora tais
relaes sejam mais complexas do que aquelas envolvendo o tamanho.
O caminho crtico de tempo em um acerto de cache um processo, em trs etapas,
de enderear a memria de tag usando a parte do ndice do endereo, comparar o valor de
tag de leitura ao endereo e configurar o multiplexador para selecionar o item de dados
correto se a cache for configurada como associativa. Caches mapeadas diretamente podem
sobrepor a verificao de tag transmisso dos dados, reduzindo efetivamente o tempo
de acerto. Alm do mais, nveis inferiores de associatividade geralmente vo reduzir o
consumo de potncia, porque menos linhas de cache devem ser acessadas.
Embora a quantidade de cache no chip tenha aumentado drasticamente com as novas
geraes de microprocessadores, graas ao impacto da taxa de clock devido a uma cache L1
maior, recentemente o tamanho das caches aumentou muito pouco ou nada. Em muitos
processadores recentes, os projetistas optaram por maior associatividade em vez de caches
maiores. Uma considerao adicional na escolha da associatividade a possibilidade de
eliminar as instncias de endereos (address aliases). Vamos discutir isto em breve.
Uma tcnica para determinar o impacto sobre o tempo de acerto e a potncia antes da
montagem de um chip a utilizao de ferramentas CAD. O CACTI um programa
para estimar o tempo de acesso e a potncia de estruturas de cache alternativas nos
microprocessadores CMOS, dentro de 10% das ferramentas de CAD mais detalhadas.
Para determinada caracterstica de tamanho mnimo, o CACTI estima o tempo de acerto
das caches quando variam o tamanho da cache, a associatividade e o nmero de portas
de leitura/escrita e parmetros mais complexos. A Figura2.3 mostra o impacto estimado
sobre o tempo de acerto quando o tamanho da cache e a associatividade so variados.
Dependendo do tamanho da cache, para esses parmetros o modelo sugere que o tempo
de acerto para o mapeamento direto ligeiramente mais rpido do que a associatividade
por conjunto com duas vias, que a associatividade por conjunto com duas vias 1,2 vez
mais rpida do que com quatro vias, e com quatro vias 1,4 vez mais rpido do que a
associatividade com oito vias. Obviamente, essas estimativas dependem da tecnologia e
do tamanho da cache.
2.2 Dez otimizaes avanadas de desempenho da cache 69

Exemplo Usando os dados da Figura B.8, no Apndice B, e da Figura2.3, determine se


uma cache L1 de 32 KB, associativa por conjunto com quatro vias tem tempo
de acesso memria mais rpido do que uma cache L1 de 32 KB, associativa
por conjunto com quatro vias. Suponha que a penalidade de falta para a
cache L2 seja 15 vezes o tempo de acesso para a cache L1 mais rpido. Ignore
as faltas alm de L2. Qual o tempo mdio de acesso memria mais rpido?
Resposta Seja o tempo de acesso para cache com associatividade por conjunto de duas
vias igual a 1. Ento, para a cache de duas vias:
Tempodeacesso mdio memria 2vias = Tempodeacerto + Tempode falta Penalidadede falta
= 1 + 0,038 15 = 1,38

Para a cache de quatro vias, o tempo de clock 1,4 vez maior. O tempo gasto
da penalidade de falta 15/1,4=10,1. Por simplicidade, assuma que ele
igual a 10:
Tempodeacesso mdio memria 4vias = Tempodeacerto2vias 1,4 + Taxa de perda Penalidade de falta
= 1,4 + 0,037 10 = 1,77

Obviamente, a maior associatividade parece uma troca ruim. Entretanto,


uma vez que o acesso cache nos processadores modernos muitas vezes
pipelined, o impacto exato sobre o tempo do ciclo de clock difcil de avaliar.

O consumo de energia tambm deve ser considerado na escolha tanto do tamanho da cache
como na da associatividade, como mostra a Figura2.4. O custo energtico da maior associa-
tividade varia desde um fator de mais de 2 at valores irrelevantes, em caches de 128 KB ou
256 KB, indo do mapeado diretamente para associatividade por conjunto de duas vias.
Em projetos recentes, trs fatores levaram ao uso de maior associatividade nas caches
de primeiro nvel: 1) muitos processadores levam pelo menos dois ciclos de clock para
acessar a cache, por isso o impacto de um perodo de tempo mais longo pode no ser

FIGURA 2.4 O consumo de energia por leitura aumenta conforme aumentam o tamanho da cache e a
associatividade.
Como na figura anterior, o CACTI usado para o modelamento com os mesmos parmetros tecnolgicos. A grande
penalidade para as caches associativas por conjunto de oito vias decorrente do custo de leitura de oito tags e aos
dados correspondentes em paralelo.
70 CAPTULO 2: Projeto de hierarquia de memria

crtico; 2) para manter o TLB fora do caminho crtico (um atraso que seria maior do que
aquele associado maior associatividade), embora todas as caches L1 devam ser indexadas
virtualmente. Isso limita o tamanho da cache para o tamanho da pgina vezes a associati-
vidade, porque somente os bits dentro da pgina so usados para o ndice. Existem outras
solues para o problema da indexao da cache antes que a traduo do endereo seja
completada, mas aumentar a associatividade, que tambm tem outros benefcios, a mais
atraente; 3) com a introduo do multithreading (Cap.3), as faltas de conflito podem
aumentar, tornando a maior associatividade mais atraente.

Segunda otimizao: previso de via para reduzir


o tempo de acesso
Outra tcnica reduz as faltas por conflito e ainda mantm a velocidade de acerto da cache
mapeada diretamente. Na previso de via, bits extras so mantidos na cache para prever a
via ou o bloco dentro do conjunto do prximo acesso cache. Essa previso significa que
o multiplexador acionado mais cedo para selecionar o bloco desejado, e apenas uma
comparao de tag realizada nesse ciclo de clock, em paralelo com a leitura dos dados
da cache. Uma falta resulta na verificao de outros blocos em busca de combinaes no
prximo ciclo de clock.
Acrescentados a cada bloco de uma cache esto os bits de previso de bloco. Os bits
selecionam quais dos blocos experimentar no prximo acesso cache. Se a previso for
correta, a latncia de acesso cache ser o tempo de acerto rpido. Se no, ele tentar
o outro bloco, mudar o previsor de via e ter uma latncia extra de um ciclo de clock.
As simulaes sugeriram que a exatido da previso de conjunto excede 90% para um
conjunto de duas vias e em 80% para um conjunto de quatro vias, com melhor preciso
em caches de instrues (I-caches) do que em caches de dados (D-caches). A previso de
via gera menos tempo mdio de acesso memria para um conjunto de duas vias se ele
for pelo menos 10% mais rpido, o que muito provvel. A previso de via foi usada
pela primeira vez no MIPS R10000 em meados dos anos 1990. Ela muito popular em
processadores que empregam associatividade por conjunto de duas vias e usada no ARM
Cortex-A8 com caches associativas por conjunto de quatro vias. Para processadores muito
rpidos, pode ser desafiador implementar o atraso de um ciclo que essencial para manter
uma penalidade pequena de previso de via.
Uma forma estendida de previso de via tambm pode ser usada para reduzir o consumo
de energia usando os bits de previso de via para decidir que bloco de cache acessar na
verdade (os bits de previso de via so essencialmente bits de endereo adicionais). Essa
abordagem, que pode ser chamada seleo de via, economiza energia quando a previso de
via est correta, mas adiciona um tempo significativo a uma previso incorreta de via, j
que o acesso, e no s a comparao e a seleo de tag, deve ser repetida. Tal otimizao
provavelmente faz sentido somente em processadores de baixa potncia. Inoue, Ishihara
e Muramaki (1999) estimaram que o uso da tcnica da seleo de via em uma cache as-
sociativas por conjunto aumenta o tempo mdio de acesso para a I-cache em 1,04 e em
1,13 para a D-cache, nos benchmarks SPEC95, mas gera um consumo mdio de energia
de cache de 0,28 para a I-cache e 0,35 para a D-cache. Uma desvantagem significativa da
seleo de via que ela torna difcil o pipeline do acesso cache.

Exemplo Suponha que os acessos D-cache sejam a metade dos acessos I-cache,
e que a I-cache e a D-cache sejam responsveis por 25% e 15% do consumo
de energia do processador em uma implementao normal associativa por
conjunto de quatro vias. Determine que seleo de via melhora o desempe-
nho por watt com base nas estimativas do estudo anterior.
2.2 Dez otimizaes avanadas de desempenho da cache 71

Resposta Para a I-cache, a economia de 250,28=0,07 potncia total, enquanto para


a D-cache de 150,35=0,05 para uma economia total de 0,12. A verso
com previso de via requer 0,88 do requisito de potncia da cache padro de
quatro vias. O aumento no tempo de acesso cache o aumento no tempo
mdio de acesso I-cache, mais metade do aumento do tempo de acesso
D-cache, ou 1,04+0,50,13=1,11 vezes mais demorado. Esse resultado
significa que a seleo de via tem 0,090 do desempenho de uma cache pa-
dro de quatro vias. Assim, a seleo de via melhora muito ligeiramente o
desempenho por joule por uma razo de 0,90/0,88=1,02. Essa otimizao
mais bem usada onde a potncia, e no o desempenho, o objetivo principal.

Terceira otimizao: acesso cache em pipeline para aumentar


a largura de banda da cache
Essa otimizao serve simplesmente para possibilitar o acesso pipeline cache, de modo
que a latncia efetiva de um acerto em uma cache de primeiro nvel possa ser de mlti-
plos ciclos de clock, gerando rpidos ciclos de clock e grande largura de banda, mas com
acertos lentos. Por exemplo, em meados dos anos 1990, o pipeline para o processador
Intel Pentium usava um ciclo de clock para acessar a cache de instrues; de meados dos
anos 1990 at o ano 2000, levava dois ciclos para o Pentium Pro ao Pentium III; para
o Pentium 4, lanado em 2000, e o Intel Core i7 atual leva quatro ciclos de clock. Essa
mudana aumenta o nmero de estgios da pipeline, levando a uma penalidade maior
nos desvios mal previstos e mais ciclos de clock entre o carregamento e o uso dos dados
(Cap.3), mas isso torna mais fcil incorporar altos graus de associatividade.

Quarta otimizao: caches sem bloqueio para aumentar


a largura de banda da cache
Para os computadores com pipeline que permitem a execuo fora de ordem (discutidos
no Cap.3), o processador no precisa parar (stall) em uma falta na cache de dados, es-
perando o dado. Por exemplo, o processador pode continuar buscando instrues da
cache de instrues enquanto espera que a cache de dados retorne os dados que faltam.
Uma cache sem bloqueio ou cache sem travamento aumenta os benefcios em potencial de tal
esquema, permitindo que a cache de dados continue a fornecer acertos de cache durante
uma falta. Essa otimizao de acerto sob falta reduz a penalidade de falta efetiva, sendo
til durante uma falta, em vez de ignorar as solicitaes do processador. Uma opo sutil
e complexa que a cache pode reduzir ainda mais a penalidade de falta efetiva se puder
sobrepor mltiplas faltas: uma otimizao acerto sob mltiplas faltas ou falta sob falta.
A segunda opo s ser benfica se o sistema de memria puder atender a mltiplas faltas.
A maior parte dos processadores de alto desempenho (como o Intel Core i7) geralmente
suporta ambos, enquanto os processadores de baixo nvel, como o ARM A8, fornecem
somente suporte limitado sem bloqueio no L2.
Para examinar a eficincia das caches sem bloqueio na reduo da penalidade de falta de
caches, Farkas e Jouppi (1994) realizaram um estudo assumindo caches de 8 KB com uma
penalidade de falta de 14 ciclos. Eles observaram uma reduo na penalidade efetiva de
falta de 20% para os benchmarks SPECINT92 e de 30% para os benchmarks SPECFP92
ao permitir um acerto sob falta.
Recentemente, Li, Chen, Brockman e Jouppi (2011) atualizaram esse estudo para usar
uma cache multinveis, suposies mais modernas sobre as penalidades de falta, alm dos
benchmarks SPEC2006, maiores e mais exigentes. O estudo foi feito supondo um modelo
baseado em um nico ncleo de um Intel i7 (Seo2.6) executando os benchmarks
SPC2006. A Figura2.5 mostra a reduo na latncia de acesso cache de dados quando
72 CAPTULO 2: Projeto de hierarquia de memria

FIGURA 2.5 A eficcia de uma cache sem bloqueio avaliada, permitindo 1, 2 ou 64 acertos sob uma falta
de cache com os benchmarks 9 SPCINT ( esquerda) e 9 SECFP ( direita).
O sistema de memria de dados modelado com base no Intel i7 consiste em uma cache L1 de 32 KB, com latncia de
acesso de quatro ciclos. A cache L2 (compartilhada com instrues) de 256 KB, com uma latncia de acesso de 10
ciclos de clock. O L3 tem 2 MB e uma latncia de acesso de 32 ciclos. Todos as caches so associativas por conjunto
de oito vias e tm tamanho de bloco de 64 bytes. Permitir um acerto sob falta reduz a penalidade de falta em 9% para
os benchmarks inteiros e de 12,5% para os de ponto flutuante. Permitir um segundo acerto melhora esses resultados
para 10% e 16%, e permitir 64 resulta em pouca melhoria adicional.

permitimos 1, 2 e 64 acertos sob uma falta. A legenda apresenta mais detalhes sobre o sis-
tema de memria. As caches maiores e a adio de uma cache L3 desde o estudo anterior
reduziram os benefcios com os benchmarks SPECINT2006, mostrando uma reduo mdia
na latncia da cache de cerca de 9%, e com os benchmarks SPECFP2006, de cerca de 12,5%.

Exemplo O que mais importante para os programas de ponto flutuante: associati-


vidade por conjunto em duas vias ou acerto sob uma falta? E para os pro-
gramas de inteiros? Considere as taxas mdias de falta a seguir para caches
de dados de 32 KB: 5,2% para programas de ponto flutuante com cache de
mapeamento direto, 4,9% para esses programas com cache com associativi-
dade por conjunto em duas vias, 3,5% para programas de inteiros com cache
mapeado diretamente e 3,2% para programas de inteiros com cache com
associatividade por conjunto em duas vias. Considere que a penalidade de
falta para L2 de 10 ciclos e que as faltas e acertos do L2 sejam os mesmos.
Resposta Para programas de ponto flutuante, os tempos de stall mdios da memria so:
Taxa de falta DM Penalidadede falta = 5,2% 10 = 0,52
Taxa de falta 2 vias Penalidadede falta = 4,9% 10 = 0,49
A latncia de acesso cache (incluindo as paradas stalls) para associativi-
dade de duas 0,49/0,52 ou 94% da cache mapeada diretamente. A legenda
da Figura2.5 revela que o acerto sob uma falta reduz o tempo mdio de stall da
memria para 87,5% de uma cache com bloqueio. Logo, para programas
de ponto flutuante, a cache de dados com mapeamento direto com suporte
para acerto sob uma falta oferece melhor desempenho do que uma cache
com associatividade por conjunto em duas vias, que bloqueia em uma falta.
Para programas inteiros, o clculo :
Taxa de falta DM Penalidadede falta = 3,5% 10 = 0,35
Taxa de falta 2 vias Penalidadede falta = 3,2% 10 = 0,32
A latncia de acesso cache com associatividade por conjunto de duas vias
, assim, 0,32/0,35 ou 91% de cache com mapeamento direto, enquanto a
reduo na latncia de acesso, quando permitimos um acerto sob falta, de
9%, tornando as duas opes aproximadamente iguais.
2.2 Dez otimizaes avanadas de desempenho da cache 73

A dificuldade real com a avaliao do desempenho das caches de no bloqueio que uma
falta de cache no causa necessariamente um stall no processador. Nesse caso, difcil
julgar o impacto de qualquer falta isolada e, portanto, difcil calcular o tempo de acesso
mdio memria. A penalidade de falta efetiva no a soma das faltas, mas o tempo no
sobreposto em que o processador adiado. O benefcio das caches de no bloqueio
complexo, pois depende da penalidade de falta quando ocorrem mltiplas faltas, do
padro de referncia da memria e de quantas instrues o processador puder executar
com uma falta pendente.
Em geral, os processadores fora de ordem so capazes de ocultar grande parte da penalidade
de falta de uma falta de cache de dados L1 na cache L2, mas no so capazes de ocultar
uma frao significativa de uma falta de cache de nvel inferior. Decidir quantas faltas
pendentes suportar depende de diversos fatores:
j A localidade temporal e espacial no fluxo da falta, que determina se uma falta pode
iniciar um novo acesso a um nvel inferior da cache ou memria.
j A largura da banda da resposta da memria ou da cache.
j Permitir mais faltas pendentes no nvel mais baixo da cache (onde o tempo de falta
o mais longo) requer pelo menos o suporte do mesmo nmero de faltas em um
nvel mais alto, j que a falta deve se iniciar na cache de nvel mais alto.
j A latncia do sistema de memria.
O exemplo simplificado a seguir mostra a ideia principal.

Exemplo Considere um tempo de acesso memria principal de 36ns e um sistema


de memria capaz de uma taxa sustentvel de transferncia de 16 GB/s. Se
o tamanho do bloco for de 64 bytes, qual ser o nmero mximo de faltas
pendentes que precisamos suportar, supondo que possamos manter o pico
de largura de banda, dado o fluxo de requisies, e que os acessos nunca
entram em conflito? Se a probabilidade de uma referncia colidir com uma
das quatro anteriores for de 50% e supondo-se que o acesso tenha que es-
perar at que o acesso anterior seja completado, estime o nmero mximo
de referncias pendentes. Para simplificar, ignore o tempo entre as faltas.
Resposta No primeiro caso, supondo que possamos manter o pico de largura de banda,
o sistema de memria pode suportar (1610)9/64=250 milhes de refern-
cias por segundo. Uma vez que cada referncia leva 36ns, podemos suportar
25010636109=nove referncias. Se a probabilidade de uma coliso
for maior do que 0, ento precisamos de mais referncias pendentes, uma
vez que no podemos comear a trabalhar nessas referncias. O sistema de
memria precisa de mais referncias independentes, no de menos! Para
aproximar isso, podemos simplesmente supor que preciso que a metade
das referncias de memria no seja enviada para a memria. Isso quer
dizer que devemos suportar duas vezes mais referncias pendentes, ou 18.

Em seu estudo, Li, Chen, Brosckman e Jouppi descobriram que a reduo na CPI para os
programas de inteiros foi de cerca de 7% para um acerto sob falta e cerca de 12,7% para
64. Para os programas de ponto flutuante, as redues foram de 12,7% para um acerto
sob falta e de 17,8% para 64. Essas redues acompanham razoavelmente de perto as
redues na latncia no acesso cache de dados mostrado na Figura2.5.

Quinta otimizao: caches multibanco para aumentar a largura


de banda da cache
Em vez de tratar a cache como um nico bloco monoltico, podemos dividi-lo em bancos
independentes que possam dar suporte a acessos simultneos. Os bancos foram usados
74 CAPTULO 2: Projeto de hierarquia de memria

FIGURA 2.6 Bancos de caches intercalados em quatro vias, usando o endereamento de bloco.
Considerando 64 bytes por bloco, cada um desses endereos seria multiplicado por 64 para obter o endereamento do
byte.

originalmente para melhorar o desempenho da memria principal e agora so usados


tanto nos modernos chips de DRAM como nas caches. O Arm Cortex-A8 suporta 1-4
bancos em sua cache L2; o Intel Core i7 tem quatro bancos no L1 (para suportar at dois
acessos de memria por clock), e o L2 tem oito bancos.
Obviamente, o uso de bancos funciona melhor quando os acessos se espalham natural-
mente por eles, de modo que o mapeamento de endereos a bancos afeta o comporta-
mento do sistema de memria. Um mapeamento simples, que funciona bem, consiste em
espalhar os endereos do bloco sequencialmente pelos bancos, algo chamado intercalao
sequencial. Por exemplo, se houver quatro bancos, o banco 0 ter todos os blocos cujo
endereo mdulo 4 igual a 0; o banco 1 ter todos os blocos cujo endereo mdulo 4
1, e assim por diante. A Figura2.6 mostra essa intercalao. Bancos mltiplos tambm
so um modo de reduzir o consumo de energia, tanto nas caches quanto na DRAM.

Sexta otimizao: palavra crtica primeiro e reincio antecipado


para reduzir a penalidade da falta
Essa tcnica baseada na observao de que o processador normalmente precisa de apenas
uma palavra do bloco de cada vez. Essa estratgia a da impacincia: no espere at que
o bloco inteiro seja carregado para ento enviar a palavra solicitada e reiniciar o proces-
sador. Aqui esto duas estratgias especficas:
j Palavra crtica primeiro. Solicite primeiro a palavra que falta e envie-a para o
processador assim que ela chegar; deixe o processador continuar a execuo
enquanto preenche o restante das palavras no bloco.
j Reincio antecipado. Busque as palavras na ordem normal, mas, assim que a palavra
solicitada chegar, envie-a para o processador e deixe que ele continue a execuo.
Geralmente, essas tcnicas s beneficiam projetos com grandes blocos de cache, pois o
benefcio baixo, a menos que os blocos sejam grandes. Observe que, normalmente, as
caches continuam a satisfazer os acessos a outros blocos enquanto o restante do bloco
est sendo preenchido.
Infelizmente, dada a proximidade espacial, existe boa chance de que a prxima referncia
sirva para o restante do bloco. Assim como as caches de no bloqueio, a penalidade de
falta no simples de calcular. Quando existe uma segunda solicitao da palavra crtica
primeiro, a penalidade de falta efetiva o tempo no sobreposto da referncia at que a
segunda parte chegue. Os benefcios da palavra crtica primeiro e de reincio antecipado
dependem do tamanho do bloco e da probabilidade de outro acesso parte do bloco
que ainda no foi acessada.

Stima otimizao: write buffer merge de escrita para reduzir


apenalidade de falta
Caches write-through contam com buffers de escrita, pois todos os armazenamentos
precisam ser enviados para o prximo nvel inferior da hierarquia. At mesmo as caches
2.2 Dez otimizaes avanadas de desempenho da cache 75

write-back utilizam um buffer simples quando um bloco substitudo. Se o buffer de


escrita estiver vazio, os dados e o endereo completo sero escritos no buffer, e a escrita
ser terminada do ponto de vista do processador; o processador continuar trabalhando
enquanto o buffer de escrita se prepara para escrever a palavra na memria. Se o buffer tiver
outros blocos modificados, os endereos podero ser verificados para saber se o endereo
desses novos dados combina com o endereo de uma entrada vlida no buffer de escrita.
Ento, os novos dados sero combinados com essa entrada. A mesclagem de escrita o nome
dessa otimizao. O Intel Core i7, entre muitos outros, utiliza a mesclagem de escrita.
Se o buffer estiver cheio e no houver combinao de endereo, a cache (e o processador)
precisar esperar at que o buffer tenha uma entrada vazia. Essa otimizao utiliza a
memria de modo mais eficiente, pois as escritas multipalavras normalmente so mais
rpidas do que as escritas realizadas uma palavra de cada vez. Skadron e Clark (1997)
descobriram que aproximadamente 5-10% do desempenho era perdido devido a stalls
em um buffer de escrita de quatro entradas.
A otimizao tambm reduz os stalls devido ao fato de o buffer de escrita estar cheio. A
Figura2.7 mostra um buffer de escrita com e sem a mesclagem da escrita. Suponha que
tenhamos quatro entradas no buffer de escrita e que cada entrada possa manter quatro
palavras de 64 bits. Sem essa otimizao, quatro armazenamentos nos endereos sequen-
ciais preencheriam o buffer em uma palavra por entrada, embora essas quatro palavras,
quando mescladas, caibam exatamente dentro de uma nica entrada do buffer de escrita.
Observe que os registradores do dispositivo de entrada/sada so ento mapeados para o
espao de endereos fsico. Esses endereos de E/S no podem permitir a mesclagem da
escrita, pois registradores de E/S separados podem no atuar como um array de palavras

FIGURA 2.7 Para ilustrar a mesclagem da escrita, o buffer de escrita de cima no a utiliza, enquanto o
buffer de escrita de baixo a utiliza.
As quatro escritas so mescladas em uma nica entrada de buffer com mesclagem de escrita; sem ela, o buffer fica
cheio, embora 3/4 de cada entrada sejam desperdiados. O buffer possui quatro entradas, e cada entrada mantm
quatro palavras de 64 bits. O endereo para cada entrada est esquerda, com um bit de vlido (V) indicando se os
prximos oito bytes sequenciais nessa entrada so ocupados. (Sem a mesclagem da escrita, as palavras direita na
parte superior da figura no seriam usadas para instrues que escrevessem mltiplas palavras ao mesmo tempo.)
76 CAPTULO 2: Projeto de hierarquia de memria

na memria. Por exemplo, eles podem exigir um endereo e uma palavra de dados por
registrador, em vez de escritas multipalavras usando um nico endereo. Esses efeitos
colaterais costumam ser implementados marcando as pginas como requerendo escrita
sem mesclagem pelas caches.

Oitava otimizao: otimizaes de compilador para reduzir


ataxa de falta
At aqui, nossas tcnicas tm exigido a mudana do hardware. Essa prxima tcnica reduz
as taxas de falta sem quaisquer mudanas no hardware.
Essa reduo mgica vem do software otimizado a soluo favorita do projetista de
hardware! A diferena de desempenho cada vez maior entre os processadores e a memria
principal tem inspirado os projetistas de compiladores a investigar a hierarquia de memria
para ver se as otimizaes em tempo de compilao podem melhorar o desempenho.
Mais uma vez, a pesquisa est dividida entre as melhorias nas faltas de instruo e as
melhorias nas faltas de dados. As otimizaes apresentadas a seguir so encontradas em
muitos compiladores modernos.

Permuta de loop
Alguns programas possuem loops aninhados que acessam dados na memria na ordem
no sequencial. Simplesmente trocar o aninhamento dos loops pode fazer o cdigo aces-
sar os dados na ordem em que so armazenados. Considerando que os arrays no cabem
na cache, essa tcnica reduz as faltas, melhorando a localidade espacial; a reordenao
maximiza o uso de dados em um bloco de cache antes que eles sejam descartados. Por
exemplo, se x for um array bidimensional de tamanho [5.000,100] alocado de modo que
x[i,j] e x[i,j+1] sejam adjacentes (uma ordem chamada ordem principal de linha, j que o
array organizado em linhas), ento os cdigos a seguir mostram como os acessos podem
ser otimizados:

O cdigo original saltaria pela memria em trechos de 100 palavras, enquanto a verso
revisada acessa todas as palavras em um bloco de cache antes de passar para o bloco
seguinte. Essa otimizao melhora o desempenho da cache sem afetar o nmero de ins-
trues executadas.

Bloqueio
Essa otimizao melhora a localidade temporal para reduzir as faltas. Novamente, estamos
lidando com mltiplos arrays, com alguns arrays acessados por linhas e outros por colunas.
Armazenar os arrays linha por linha (ordem principal de linha) ou coluna por coluna (ordem
principal de coluna) no resolve o problema, pois linhas e colunas so usadas em cada
iterao do loop. Esses acessos ortogonais significam que transformaes como permuta
de loop ainda possuem muito espao para melhoria.
Em vez de operar sobre linhas ou colunas inteiras de um array, os algoritmos bloqueados
operam sobre submatrizes ou blocos. O objetivo maximizar os acessos aos dados carregados
2.2 Dez otimizaes avanadas de desempenho da cache 77

na cache antes que eles sejam substitudos. O exemplo de cdigo a seguir, que realiza a
multiplicao de matriz, ajuda a motivar a otimizao:

Os dois loops interiores leem todos os elementos N por N de z, leem os mesmos N ele-
mentos em uma linha de y repetidamente e escrevem uma linha de N elementos de x. A
Figura2.8 apresenta um instantneo dos acessos aos trs arrays. O tom escuro indica acesso
recente, o tom claro indica acesso mais antigo e o branco significa ainda no acessado.
O nmero de faltas de capacidade depende claramente de N e do tamanho da cache. Se ele
puder manter todas as trs matrizes N por N, tudo est bem, desde que no existam conflitos de
cache. Se a cache puder manter uma matriz N por N e uma linha de N, pelo menos a i-sima li-
nha de y e o array z podem permanecer na cache. Menos do que isso e podero ocorrer faltas para
x e z. No pior dos casos, haver 2N 3+N 2 palavras de memria acessadas para N3 operaes.
Para garantir que os elementos acessados podem caber na cache, o cdigo original
mudado para calcular em uma submatriz de tamanho B por B. Dois loops internos agora
calculam em passos de tamanho B, em vez do tamanho completo de x e z. B chamado
de fator de bloqueio (considere que x inicializado com zero).

FIGURA 2.8 Um instantneo dos trs arrays x, y e z quando N=6 e i=1.


Os acessos, distribudos no tempo, aos elementos do array so indicados pelo tom: branco significa ainda no tocado,
claro significa acessos mais antigos e escuro significa acessos mais recentes. Em comparao com a Figura2.9, os
elementos de y e z so lidos repetidamente para calcular novos elementos de x. As variveis i, j e k aparecem ao longo
das linhas ou colunas usadas para acessar os arrays.
78 CAPTULO 2: Projeto de hierarquia de memria

FIGURA 2.9 Acessos, distribudos no tempo, aos arrays x, y e z quando B=3.


Observe, em comparao com a Figura2.8, o nmero menor de elementos acessados.

A Figura2.9 ilustra os acessos aos trs arrays usando o bloqueio. Vendo apenas as perdas
de capacidade, o nmero total de palavras acessadas da memria 2N 3/B+N 2. Esse
total uma melhoria por um fator de B. Logo, o bloqueio explora uma combinao de
localidade espacial e temporal, pois y se beneficia com a localidade espacial e z se beneficia
com a localidade temporal.
Embora tenhamos visado reduzir as faltas de cache, o bloqueio tambm pode ser usado
para ajudar na alocao de registradores. Selecionando um pequeno tamanho de bloqueio,
de modo que o bloco seja mantido nos registradores, podemos minimizar o nmero de
carregamentos e armazenamentos no programa.
Como veremos na Seo 4.8 do Captulo4, o bloqueio de cache absolutamente neces-
srio para obter bom desempenho de processadores baseados em cache, executando
aplicaes que usam matrizes como estrutura de dados primria.

Nona otimizao: a pr-busca de pelo hardware das instrues


edados para reduzir a penalidade de falta ou a taxa de falta
As caches de no bloqueio reduzem efetivamente a penalidade de falta, sobrepondo a
execuo com o acesso memria. Outra tcnica fazer a pr-busca (prefetch) dos itens
antes que o processador os solicite. Tanto as instrues quanto os dados podem ter sua
busca antecipada, seja diretamente nas caches, seja diretamente em um buffer externo,
que pode ser acessado mais rapidamente do que a memria principal.
Frequentemente, a pr-busca de instruo feita no hardware fora da cache. Em geral,
o processador apanha dois blocos em uma falta: o bloco solicitado e o prximo bloco
consecutivo. O bloco solicitado colocado na cache de instrues, e o bloco cuja busca
foi antecipada colocado no buffer do fluxo de instrues. Se o bloco solicitado estiver
presente no buffer do fluxo de instrues, a solicitao de cache original ser cancelada,
o bloco ser lido do buffer de fluxo e a prxima solicitao de pr-busca ser emitida.
Uma tcnica semelhante pode ser aplicada aos acessos a dados (Jouppi,1990). Palacharla e Kes-
sler (1994) examinaram um conjunto de programas cientficos e consideraram mltiplos buffers
de fluxo que poderiam tratar tanto instrues como dados. Eles descobriram que oito buffers
de fluxo poderiam capturar 50-70% de todas as faltas de um processador com duas caches de
64 KB associativas por conjunto com quatro vias, um para instrues e os outros para dados.
O Intel Core i7 pode realizar a pr-busca de dados no L1 e L2 com o caso de pr-busca
mais comum sendo o acesso prxima linha. Alguns processadores anteriores da Intel
usavam uma pr-busca mais agressiva, mas isso resultou em desempenho reduzido para
algumas aplicaes, fazendo com que alguns usurios sofisticados desativassem o recurso.
2.2 Dez otimizaes avanadas de desempenho da cache 79

A Figura2.10 mostra a melhoria de desempenho geral para um subconjunto dos programas


SPEC2000 quando a pr-busca de hardware est ativada. Observe que essa figura inclui
apenas dois de 12 programas inteiros, enquanto inclui a maioria dos programas SPEC de
ponto flutuante.
A pr-busca conta com o uso de uma largura de banda de memria que, de outra forma,
seria inutilizada, mas, se interferir nas perdas de demanda, pode realmente reduzir o
desempenho. A ajuda de compiladores pode reduzir a pr-busca intil. Quando a pr-bus-
ca funciona bem, seu impacto sobre a consumo de energia irrelevante. Quando dados
pr-obtidos no so usados ou dados teis esto fora do lugar, a pr-busca pode ter um
impacto muito negativo no consumo de energia.

Dcima otimizao: pr-busca controlada por compilador para


reduzir a penalidade de falta ou a taxa de falta
Uma alternativa pr-busca de hardware que o compilador insira instrues de pr-busca
para solicitar dados antes que o processador precise deles. Existem dois tipos de pr-busca:
j A pr-busca de registrador, que carrega o valor em um registrador.
j A pr-busca de cache, que carrega os dados apenas na cache, e no no registrador.
Qualquer uma delas pode ser com falta ou sem falta, ou seja, o endereo causa ou no uma
exceo para faltas de endereo virtuais e violaes de proteo. Usando essa terminologia,
uma instruo de carregamento normal poderia ser considerada uma instruo de pr-
-busca de registrador com falta. As pr-buscas sem falta simplesmente se transformaro
em no-ops se normalmente resultarem em uma exceo, que o que queremos.
A pr-busca mais efetiva semanticamente invisvel a um programa: ela no muda o
contedo dos registradores e da memria, e no pode causar faltas de memria virtual.
Hoje a maioria dos processadores oferece pr-buscas de cache sem falta. Esta seo consi-
dera a pr-busca de cache sem falta, tambm chamada pr-busca sem vnculo.

FIGURA 2.10 Ganho de velocidade devido pr-busca de hardware no Intel Pentium 4 com a pr-busca
de hardware ativada para dois dos 12 benchmarks SPECint2000 e nove dos 14 benchmarks SPECfp2000.
Somente os programas que se beneficiam mais com a pr-busca so mostrados; a pr-busca agiliza os 15
benchmarks SPEC restantes em menos de 15% (Singhal, 2004).
80 CAPTULO 2: Projeto de hierarquia de memria

A pr-busca s faz sentido se o processador puder prosseguir enquanto realiza a pr-busca


dos dados, ou seja, as caches no param, mas continuam a fornecer instrues e dados
enquanto esperam que os dados cujas buscas foram antecipadas retornem. Como era de
esperar, a cache de dados para esses computadores normalmente sem bloqueio.
Assim como na pr-busca controlada pelo hardware, o objetivo sobrepor a execuo com
a pr-busca de dados. Os loops so os alvos importantes, pois servem para otimizaes de
pr-busca. Se a penalidade de falta for pequena, o compilador simplesmente desdobrar
o loop uma ou duas vezes e escalonar as pr-buscas com a execuo. Se a penalidade de
falta for grande, ele usar o pipelining de software (Apndice H) ou desdobrar muitas
vezes para realizar a pr-busca de dados para uma iterao futura.
Entretanto, emitir instrues de pr-busca contrai um overhead de instruo, de modo
que os compiladores precisam tomar cuidado para garantir que tais overheads no sejam
superiores aos benefcios. Concentrando-se em referncias que provavelmente sero faltas
de cache, os programas podem evitar pr-buscas desnecessrias enquanto melhoram bas-
tante o tempo mdio de acesso memria.

Exemplo Para o cdigo a seguir, determine quais acessos provavelmente causaro


faltas de cache de dados. Em seguida, insira instrues de pr-busca para
reduzir as faltas. Finalmente, calcule o nmero de instrues de pr-busca
executadas e as faltas evitadas pela pr-busca. Vamos supor que tenhamos
uma cache de dados mapeado diretamente de 8 KB com blocos de 16 bytes e
ela seja uma cache write-back que realiza alocao de escrita. Os elementos
de a e b possuem oito bytes, pois so arrays de ponto flutuante de preciso
dupla. Existem trs linhas e 100 colunas para a e 101 linhas e trs colunas
para b. Vamos supor tambm que eles no estejam na cache no incio do
programa

Resposta O compilador primeiro determinar quais acessos provavelmente causaro


faltas de cache; caso contrrio, perderemos tempo emitindo instrues de
pr-busca para dados que seriam acertos. Os elementos de a so escritos na
ordem em que so armazenados na memria, de modo que a se beneficiar
com a proximidade espacial: os valores pares de j sero faltas, e os valores
mpares sero acertos. Como a possui trs linhas e 100 colunas, seus acessos
levaro a 3(100/2), ou 150 faltas.
O array b no se beneficia com a proximidade espacial, pois os acessos
no esto na ordem em que so armazenados. O array b se beneficia duas
vezes da localidade temporal: os mesmos elementos so acessados para
cada iterao de i, e cada iterao de j usa o mesmo valor de b que a ltima
iterao. Ignorando faltas de conflito em potencial, as faltas devidas a b
sero para b[j+1][0] acessos quando i=0, e tambm o primeiro acesso a b[j]
[0] quando j=0. Como j vai de 0 a 99 quando i=0, os acessos a b levam a
100+1 ou 101 faltas.
Assim, esse loop perder a cache de dados aproximadamente 150 vezes para
a mais 101 vezes para b ou 251 faltas.
Para simplificar nossa otimizao, no nos preocuparemos com a pr-busca
dos primeiros acessos do loop. Eles j podem estar na cache ou pagaremos
a penalidade de falta dos primeiros poucos elementos de a ou b. Tambm
no nos preocuparemos em suprimir as pr-buscas ao final do loop, que
tentam buscar previamente alm do final de a (a[i][100] a[i][106]) e o
final de b (b[101][0] b[107][0]). Se essas pr-buscas fossem com falta,
2.2 Dez otimizaes avanadas de desempenho da cache 81

no poderamos ter esse luxo. Vamos considerar que a penalidade de falta


to grande que precisamos comear a fazer a pr-busca pelo menos sete
iteraes frente (em outras palavras, consideramos que a pr-busca no
tem benefcio at a oitava iterao). Sublinhamos as mudanas feitas no
cdigo anterior, necessrias para realizar a pr-busca.

Esse cdigo revisado realiza a pr-busca de a[i][7] at a[i][99] e de b[7][0]


at b[100][0], reduzindo o nmero de faltas de no pr-busca para
j Sete faltas para os elementos b[0][0], b[1][0], , b[6][0] no primeiro loop
j Quatro faltas ([7/2]) para os elementos a[0][0], a[0][1], , a[0][6] no
primeiro loop (a proximidade espacial reduz as faltas para uma por bloco
de cache de 16 bytes)
j Quatro faltas ([7/2]) para os elementos a[1][0], a[1][1], , a[1][6] no
segundo loop.
j Quatro faltas ([7/2]) para os elementos a[2][0], a[2][1], , a[2][6] no
segundo loop
ou um total de 19 faltas de no pr-busca. O custo de evitar 232 faltas de
cache a execuo de 400 instrues de pr-busca, provavelmente uma
boa troca.

Exemplo Calcule o tempo economizado no exemplo anterior. Ignore faltas da cache


de instruo e considere que no existem faltas por conflito ou capacidade
na cache de dados. Suponha que as pr-buscas possam se sobrepor umas
s outras com faltas de cache, transferindo, portanto, na largura de banda
mxima da memria. Aqui esto os principais tempos de loop ignorando
as faltas de cache: o loop original leva sete ciclos de clock por iterao, o
primeiro loop de pr-busca leva nove ciclos de clock por iterao e o segundo
loop de pr-busca leva oito ciclos de clock por iterao (incluindo o overhead
do loop for externo). Uma falta leva 100 ciclos de clock.
Resposta O loop original duplamente aninhado executa a multiplicao 3100 ou
300 vezes. Como o loop leva sete ciclos de clock por iterao, o total de
3007 ou 2.100 ciclos de clock mais as faltas de cache. As faltas de cache
aumentam 251100 ou 25.100 ciclos de clock, gerando um total de 27.200
ciclos de clock. O primeiro loop de pr-busca se repete 100 vezes; a nove
ciclos de clock por iterao, o total de 900 ciclos de clock mais as faltas de
cache. Elas aumentam 11100 ou 1.100 ciclos de clock para as faltas de
cache, gerando um total de 2.000. O segundo loop executado 2100 ou
200 vezes, e a nove ciclos de clock por iterao; isso leva 1.600 ciclos de clock
mais 8100 ou 800 ciclos de clock para as faltas de cache. Isso gera um
total de 2.400 ciclos de clock. Do exemplo anterior, sabemos que esse cdigo
executa 400 instrues de pr-busca durante os 2.000+2.400 ou 4.400 ciclos
de clock para executar esses dois loops. Se presumirmos que as pr-buscas
so completamente sobrepostas com o restante da execuo, ento o cdigo
da pr-busca 27.200/4.400 ou 6,2 vezes mais rpido.
82 CAPTULO 2: Projeto de hierarquia de memria

Embora as otimizaes de array sejam fceis de entender, os programas modernos prova-


velmente utilizam ponteiros. Luk e Mowry (1999) demonstraram que a pr-busca baseada
em compilador s vezes tambm pode ser estendida para ponteiros. Dos 10 programas
com estruturas de dados recursivas, a pr-busca de todos os ponteiros quando um n
visitado melhorou o desempenho em 4-31% na metade dos programas. Por outro lado, os
programas restantes ainda estavam dentro de 2% de seu desempenho original. A questo
envolve tanto se as pr-buscas so para dados j na cache quanto se elas ocorrem cedo o
suficiente para os dados chegarem quando forem necessrios.
Muitos processadores suportam instrues para pr-busca de cache e, muitas vezes, proces-
sadores de alto nvel (como o Intel Core i7) tambm realizam algum tipo de pr-busca
automtica no hardware.

Resumo de otimizao de cache


As tcnicas para melhorar o tempo de acerto, a largura de banda, a penalidade de falta
e a taxa de falta geralmente afetam os outros componentes da equao de acesso mdio
memria, alm da complexidade da hierarquia de memria. A Figura2.11 resume
essas tcnicas e estima o impacto sobre a complexidade, com+significando que a
tcnica melhora o fator, significando que ela prejudica esse fator, e um espao sig-
nificando que ela no tem impacto. Geralmente, nenhuma tcnica ajuda mais de uma
categoria.

FIGURA 2.11 Resumo das 10 otimizaes de cache avanadas mostrando o impacto sobre o desempenho da cache e a complexidade.
Embora geralmente uma tcnica s ajude um fator, a pr-busca pode reduzir as faltas se for feita suficientemente cedo; se isso no ocorrer, ela pode
reduzir a penalidade de falta.+significa que a tcnica melhora o fator, significa que ela prejudica esse fator, e um espao significa que ela no tem
impacto. A medida de complexidade subjetiva, com 0 sendo o mais fcil e 3 sendo um desafio.
2.3 Tecnologia de memria e otimizaes 83

2.3 TECNOLOGIA DE MEMRIA E OTIMIZAES


[] o nico desenvolvimento isolado que colocou os computadores na linha foi
a inveno de uma forma confivel de memria, a saber, a memria de ncleo
[] Seu custo foi razovel, ela era confivel e, por ser confivel, poderia se tornar
grande com o passar do tempo. (p. 209)
Maurice Wilkes
Memoirs of a Computer Pioneer (1985)

A memria principal o prximo nvel abaixo na hierarquia. A memria principal satisfaz


as demandas das caches e serve de interface de E/S, pois o destino da entrada e tambm
a origem da sada. As medidas de desempenho da memria principal enfatizam tanto a
latncia quanto a largura de banda. Tradicionalmente, a latncia da memria principal
(que afeta a penalidade de falta de cache) a principal preocupao da cache, enquanto a
largura de banda da memria principal a principal preocupao dos multiprocessadores
e da E/S.
Embora as caches se beneficiem da memria de baixa latncia, geralmente mais fcil
melhorar a largura de banda da memria com novas organizaes do que reduzir a latncia.
A popularidade das caches de segundo nvel e de seus tamanhos de bloco maiores torna
a largura de banda da memria principal importante tambm para as caches. Na verdade,
os projetistas de cache aumentam o tamanho de bloco para tirar proveito da largura de
banda com alto desempenho.
As sees anteriores descrevem o que pode ser feito com a organizao da cache para
reduzir essa diferena de desempenho processador-DRAM, mas simplesmente tornar as
caches maiores ou acrescentar mais nveis de caches no elimina a diferena. Inovaes
na memria principal tambm so necessrias.
No passado, a inovao era o modo de organizar os muitos chips de DRAM que compu-
nham a memria principal, assim como os mltiplos bancos de memria. Uma largura de
banda maior est disponvel quando se usam bancos de memria, tornando a memria e
seu barramento mais largos ou fazendo ambos. Ironicamente, medida que a capacidade
por chip de memria aumenta, existem menos chips no sistema de memria do mesmo
tamanho, reduzindo as possibilidades para sistemas de memria mais largos com a mes-
ma capacidade.
Para permitir que os sistemas de memria acompanhem as demandas de largura de banda
dos processadores modernos, as inovaes de memria comearam a acontecer dentro dos
prprios chips de DRAM. Esta seo descreve a tecnologia dentro dos chips de memria
e essas organizaes inovadoras, internas. Antes de descrever as tecnologias e as opes,
vamos examinar as medidas de desempenho.
Com a introduo das memrias de transferncia pelo modo burst, hoje amplamente
usadas em memrias Flash e DRAM, a latncia da memria calculada usando duas
medidas: tempo de acesso e tempo de ciclo. O tempo de acesso o tempo entre a solicitao
de uma leitura e a chegada da palavra desejada, enquanto tempo de ciclo o tempo mnimo
entre as solicitaes e a memria.
Quase todos os computadores desktops ou servidores utilizam, desde 1975, DRAMs para
a memria principal e quase todos utilizam SRAMs para cache, com 1-3 nveis integrados
no chip do processador com a CPU. Em PMDs, a tecnologia de memria muitas vezes
equilibra consumo de energia e velocidade com sistemas de alto nvel, usando tecnologia
de memria rpida e com grande largura de banda.
84 CAPTULO 2: Projeto de hierarquia de memria

Tecnologia de SRAM
A primeira letra de SRAM significa esttica (static, em ingls). A natureza dinmica dos
circuitos na DRAM exige que os dados sejam escritos de volta aps serem lidos da a
diferena entre o tempo de acesso e o tempo de ciclo, alm da necessidade de atualizao
(refresh). As SRAMs no precisam ser atualizadas e, portanto, o tempo de acesso muito
prximo do tempo de ciclo. As SRAMs normalmente utilizam seis transistores por bit
para impedir que a informao seja modificada quando lida. A SRAM s precisa de um
mnimo de energia para reter a carga no modo de stand-by.
No princpio, a maioria dos sistemas de desktops e servidores usava chip de SRAM para
suas caches primrias, secundrias ou tercirias. Hoje, os trs nveis de caches so integrados
no chip do processador. Atualmente, os maiores caches de terceiro nvel no chip so de
12 MB, enquanto o sistema de memria para tal processador provavelmente ter de 4-16
GB de DRAM. Em geral, os tempos de acesso para grandes caches de terceiro nvel no chip
so 2-4 vezes os de uma cache de segundo nvel, que ainda 3-5 vezes mais rpido do
que acessar uma memria DRAM.

Tecnologia de DRAM
medida que as primeiras DRAMs cresciam em capacidade, o custo de um pacote com
todas as linhas de endereo necessrias se tornava um problema. A soluo foi multi-
plexar as linhas de endereo, reduzindo assim o nmero de pinos de endereo ao meio.
A Figura2.12 mostra a organizao bsica da DRAM. Metade do endereo enviada
primeiro, algo chamado RAS Row Access Strobe. A outra metade do endereo, enviada
durante o CAS Column Access Strobe , vem depois. Esses nomes vm da organizao
interna do chip, pois a memria organizada como uma matriz retangular endereada
por linhas e colunas.
Um requisito adicional da DRAM deriva da propriedade indicada pela primeira letra, D,
de dinmica. Para compactar mais bits por chips, as DRAMs utilizam apenas um nico
transistor para armazenar um bit. A leitura desse bit destri a informao, de modo que
ela precisa ser restaurada. Esse um motivo pelo qual o tempo de ciclo da DRAM muito
maior que o tempo de acesso. Alm disso, para evitar perda de informaes quando um bit
no lido ou escrito, o bit precisa ser restaurado periodicamente (refresh). Felizmente,
todos os bits em uma linha podem ser renovados simultaneamente apenas pela leitura

FIGURA 2.12 Organizao interna de uma DRAM.


As DRAMs modernas so organizadas em bancos, em geral quatro por DDR3. Cada banco consiste em uma srie
delinhas. Enviar um comando PRE (pr-carregamento) abre ou fecha um banco. Um endereo de linha enviado
comum ACT (ativar), que faz com que a linha seja transferida para um buffer. Quando a linha est no buffer,
elapodeser transferida por endereos de coluna sucessivos em qualquer largura da DRAM (geralmente 4, 8
ou16 bits em DDR3) ou especificando uma transferncia de bloco e o endereo de incio. Cada comando, assim
comoastransferncias de bloco, sincronizado com um clock.
2.3 Tecnologia de memria e otimizaes 85

dessa linha. Logo, cada DRAM do sistema de memria precisa acessar cada linha dentro
de certa janela de tempo, como 8 ms. Os controladores de memria incluem o hardware
para refresh das DRAMs periodicamente.
Esse requisito significa que o sistema de memria est ocasionalmente indisponvel, pois
est enviando um sinal que diz a cada chip para ser restaurado. O tempo para um refresh
normalmente um acesso completo memria (RAS e CAS) para cada linha da DRAM.
Como a matriz de memria em uma DRAM conceitualmente quadrada, em geral o
nmero de etapas em um refresh a raiz quadrada da capacidade da DRAM. Os projetistas
de DRAM tentam manter o tempo gasto na restaurao menor que 5% do tempo total.
At aqui, apresentamos a memria principal como se ela operasse como um trem suo,
entregando suas mercadorias de modo consistente, exatamente de acordo com o horrio.
O refresh contradiz essa analogia, pois alguns acessos levam muito mais tempo do que
outros. Assim, o refresh outro motivo para a variabilidade da latncia da memria e,
portanto, da penalidade de falta da cache.
Amdahl sugeriu uma regra prtica de que a capacidade da memria dever crescer linear-
mente com a velocidade do processador para manter um sistema equilibrado, de modo
que um processador de 1.000 MIPS dever ter 1.000 MB de memria. Os projetistas de
processador contam com as DRAMs para atender a essa demanda: no passado, eles es-
peravam uma melhoria que quadruplicasse a capacidade a cada trs anos ou 55% por ano.
Infelizmente, o desempenho das DRAMs est crescendo em uma taxa muito mais lenta.
A Figura2.13 mostra a melhora de desempenho no tempo de acesso da linha, que est
relacionado com a latncia, de cerca de 5% por ano. O CAS, ou tempo de transferncia de
dados, relacionado com a largura de banda est crescendo em mais de duas vezes essa taxa.

FIGURA 2.13 Tempos de DRAMs rpidas e lentas a cada gerao.


(O tempo de ciclo foi definido na pgina 83.) A melhoria de desempenho do tempo de acesso de linha de cerca de 5% por ano. A melhoria porumfator
de 2 no acesso coluna em 1986 acompanhou a troca das DRAMs NMOS para DRAMs CMOS. A introduo de vrios modos burst de transferncia,
em meados dos anos 1990, e as SDRAMs, no final dos anos 1990, complicaram significativamente o clculo de tempo de acesso para blocos de dados.
Vamos discutir isso de modo aprofundado nesta seo quando falarmos sobre tempo de acesso e potncia da SDRAM. O lanamento dos projetos DDR4
est previsto para o segundo semestre de 2013. Vamos discutir essas diversas formas de DRAM nas prximas pginas.
86 CAPTULO 2: Projeto de hierarquia de memria

Embora estejamos falando de chips individuais, as DRAMs normalmente so vendidas


em pequenas placas, chamadas mdulos de memria em linha dupla (Dual Inline Memory
Modules DIMMs). Os DIMMs normalmente contm 4-16 DRAMs e so organizados
para ter oito bytes de largura (+ ECC) para sistemas desktops.
Alm do empacotamento do DIMM e das novas interfaces para melhorar o tempo de trans-
ferncia de dados, discutidos nas prximas subsees, a maior mudana nas DRAMs tem
sido uma reduo no crescimento da capacidade. As DRAMs obedeceram lei de Moore
por 20 anos, gerando um novo chip com capacidade quadruplicada a cada trs anos.
Devido aos desafios de fabricao de uma DRAM de bit nico, novos chips s dobraram de
capacidade a cada dois anos a partir de 1998. Em 2006, o ritmo foi reduzido ainda mais,
com o perodo de 2006 a 2010 testemunhando somente uma duplicao na capacidade.

Melhorando o desempenho da memria dentro


de um chip de DRAM
medida que a lei de Moore continua a fornecer mais transistores e a diferena entre
processador-memria aumenta a presso sobre o desempenho da memria, as ideias da
seo anterior se encaminharam para dentro do chip da DRAM. Geralmente, a inovao
tem levado a maior largura de banda, s vezes ao custo da maior latncia. Esta subseo
apresenta tcnicas que tiram proveito da natureza das DRAMs.
Como j mencionamos, um acesso DRAM dividido em acessos de linha e acessos de
coluna. As DRAMs precisam colocar uma linha de bits no buffer dentro da DRAM para o
acesso de coluna, e essa linha normalmente a raiz quadrada do tamanho da DRAM por
exemplo, 2 Kb para uma DRAM de 4 Mb. Conforme as DRAMs cresceram, foram adicio-
nadas estruturas adicionais e diversas oportunidades para aumentar a largura de banda.
Primeiramente, as DRAMs adicionaram a temporizao de sinais que permitem acessos re-
petidos ao buffer de linha sem outro tempo de acesso linha. Tal buffer vem naturalmente
quando cada array colocar de 1.024 a 4.096 bits no buffer para cada acesso. Inicialmente,
endereos separados de coluna tinham de ser enviados para cada transferncia com um
atraso depois de cada novo conjunto de endereos de coluna.
Originalmente, as DRAMs tinham uma interface assncrona para o controlador de memria
e, portanto, cada transferncia envolvia o overhead para sincronizar com o controlador. A
segunda principal mudana foi acrescentar um sinal de clock interface DRAM, de modo
que as transferncias repetidas no sofram desse overhead. DRAM sncrona (SDRAM) o
nome dessa otimizao. Normalmente, as SDRAMs tambm tinham um registrador pro-
gramvel para manter o nmero de bytes solicitados e, portanto, podiam enviar muitos
bytes por vrios ciclos por solicitao. Em geral, oito ou mais transferncias de 16 bits
podem ocorrer sem enviar novos endereos colocando a DRAM em modo de exploso.
Esse modo, que suporta transferncias de palavra crtica em primeiro lugar, o nico em
que os picos de largura de banda mostrados na Figura2.14 podem ser alcanados.
Em terceiro lugar, para superar o problema de obter um grande fluxo de bits da memria
sem ter de tornar o sistema de memria muito grande, conforme a densidade do sistema
de memria aumenta, as DRAMs se tornaram mais largas. Inicialmente, elas ofereciam um
modo de transferncia de 4 bits. Em 2010, as DRAMs DDR2 e DDR3 tinham barramentos
de at 16 bits.
A quarta inovao importante da DRAM para aumentar a largura de banda transferir
dados tanto na borda de subida quanto na borda de descida no sinal de clock da DRAM,
dobrando assim a taxa de dados de pico. Essa otimizao chamada taxa de dados dupla
(Double Data Rate DDR).
2.3 Tecnologia de memria e otimizaes 87

FIGURA 2.14 Taxas de clock, largura de banda e nomes de DRAMs e DIMMs DDR em 2010.
Observe o relacionamento numrico entre as colunas. A terceira coluna o dobro da segunda, e a quarta usa o nmero da terceira coluna no nome
dochip DRAM. A quinta coluna oito vezes a terceira coluna, e uma verso arredondada desse nmero usada no nome do DIMM. Embora no
aparecendo nessa figura, as DDRs tambm especificam a latncia em ciclos de clock. Por exemplo, o DDR3-2000 CL 9 tem latncias de 9-9-9-28.
O queisso significa? Com um clock de 1ns (o ciclo de clock metade da taxa de transferncia), isso indica 9ns para endereos de linha
para coluna (tempo RAS), 9ns para acesso de coluna aos dados (tempo CAS) e um tempo de leitura mnimo de 28ns. Fechar a linha leva 9ns
para pr-carregamento, mas ocorre somente quando as leituras da linha foram completadas. Em modo de exploso, o pr-carregamento no necessrio
at que toda a linha seja lida. O DDR4 ser produzido em 2013 e espera-se que atinja taxas de clock de 1.600MHz em 2014, quando se espera
que o DDR5 assuma. Os exerccios exploram esses detalhes.

Para fornecer algumas das vantagens do interleaving, alm de ajudar no gerenciamento de


energia, as SDRAMs tambm introduziram os bancos, afastando-se de uma nica SDRAM
para 2-8 blocos (nas DRAMs DDR3 atuais), que podem operar independentemente (j
vimos bancos serem usados em caches internas; muitas vezes, eles so usados em grandes
memrias principais). Criar mltiplos bancos dentro de uma DRAM efetivamente adiciona
outro segmento ao endereo, que agora consiste em nmero do banco, endereo da linha
e endereo da coluna. Quando enviado um endereo que designa um novo banco, esse
banco deve ser aberto, incorrendo em um atraso adicional. O gerenciamento de bancos
e buffers de linha manipulado completamente por interfaces modernas de controle de
memria, de modo que, quando um acesso subsequente especifica a mesma linha por
um banco aberto, o acesso pode ocorrer rapidamente, enviando somente o endereo da
coluna.
Quando as SDRAMs DDR so montadas como DIMMs, so rotuladas pela largura de banda
DIMM de pico, confusamente. Logo, o nome do DIMM PC2100 vem de 133MHz28
bytes ou 2.100MB/s. Sustentando a confuso, os prprios chips so rotulados como
nmero de bits por segundo, em vez da sua taxa de clock, de modo que um chip DDR de
133MHz chamado de DDR266. A Figura2.14 mostra o relacionamento entre a taxa de
clock, as transferncias por segundo por chip, nome de chip, largura de banda de DIMM
e nome de DIMM.
A DDR agora uma sequncia de padres. A DDR2 reduz a potncia diminuindo a
voltagem de 2,5 volts para 1,8 volt e oferece maiores taxas de clock: 266MHz, 333MHz
e 400MHz. A DDR3 reduz a voltagem para 1,5 volt e tem velocidade de clock mxima de
800MHz. A DDR4, prevista para entrar em produo em 2014, diminui a voltagem para
1-1,2 volts e tem taxa de clock mxima esperada de 1.600MHz. A DDR5 vir em 2014
ou 2015. (Como discutiremos na prxima seo, a GDDR5 uma RAM grfica e baseada
nas DRAMs DDR3.)
88 CAPTULO 2: Projeto de hierarquia de memria

RAMs de dados grficos


GDRAMs ou GSDRAMs (DRAMs grficas ou grficas sncronas) so uma classe especial
de DRAMs baseadas nos projetos da SDRAM, mas ajustadas para lidar com as exigncias
maiores de largura de banda das unidades de processamento grfico. A GDDR5 baseada
na DDR3, com as primeiras GDDRs baseadas na DDR2. Uma vez que as unidades de
processamento grfico (Graphics Processor Units GPUs; Cap.4) requerem mais
largura de banda por chip de DRAM do que as CPUs, as GDDRs tm vrias diferenas
importantes:
1. As GDDRs tm interfaces mais largas: 32 bits contra 4, 8 ou 16 nos projetos atuais.
2. As GDDRs tm taxa mxima de clock nos pinos de dados. Para permitir taxa
de transferncia maior sem incorrer em problemas de sinalizao, em geral as
GDRAMS se conectam diretamente GPU e so conectadas por solda placa, ao
contrrio das DRAMs, que costumam ser colocadas em um array barato de DIMMs.
Juntas, essas caractersticas permitem s GDDRs rodar com 2-5 vezes a largura de banda
por DRAM em comparao s DRAMs DDR3, uma vantagem significativa para suportar as
GPUs. Devido menor distncia entre as requisies de memria em um GPU, o modo
burst geralmente menos til para uma GPU, mas manter mltiplos bancos de memria
abertos e gerenciar seu uso melhora a largura de banda efetiva.

Reduzindo o consumo de energia nas SDRAMs


O consumo de energia em chips de memria dinmica consiste na potncia dinmica
usada em uma leitura ou escrita e na potncia esttica ou de stand-by. As duas dependem
da voltagem de operao. Nos SDRAMs DDR3 mais avanados, a voltagem de operao
caiu para 1,35-1,5 volt, reduzindo significativamente o consumo de energia em relao
s SDRAMs DDR2. A adio dos bancos tambm reduziu o consumo de energia, uma vez
que somente a ilha em um nico banco lida e pr-carregada.
Alm dessas mudanas, todas as SDRAMs recentes suportam um modo de power down,
que iniciado dizendo DRAM para ignorar o clock. O modo power down desabilita a
SDRAM, exceto pela atualizao interna automtica (sem a qual entrar no modo power
down por mais tempo do que o tempo de atualizao vai fazer o contedo da memria ser
perdido). A Figura2.15 mostra o consumo de energia em trs situaes em uma SDRAM

FIGURA 2.15 Consumo de energia para uma SDRAM DDR3 operando sob trs condies: modo de
baixa potncia (shutdown), modo de sistema tpico (a DRAM est ativa 30% do tempo para leituras e 15%
paraescritas) e modo totalmente ativo, em que a DRAM est continuamente lendo ou escrevendo quando
no est em pr-carregamento.
Leituras e escritas assumem burts de oito transferncias. Esses dados so baseados em um Micron 1,5 V de 2 Gb
DDR3-1066.
2.3 Tecnologia de memria e otimizaes 89

DDR3 de 2 GB. O atraso exato necessrio para retornar do modo de baixa potncia depende
da SDRAM, mas um tempo tpico da atualizao do modo de baixa potncia de 200
ciclos de clock. Pode ser necessrio tempo adicional para resetar o registrador de modo
antes do primeiro comando.

Memria Flash
A memria Flash um tipo de EEPROM (Electronically Erasable Programmable Read-Only
Memory), que normalmente se presta somente leitura, mas pode ser apagada. A outra
propriedade-chave da memria Flash que ela mantm seu contedo sem qualquer
alimentao.
A memria Flash usada como armazenamento de backup nos PMDs do mesmo modo
que um disco em um laptop ou servidor. Alm disso, uma vez que a maioria dos PMDs
tem quantidade limitada de DRAM, a memria Flash tambm pode agir como um nvel
da hierarquia de memria, muito mais do que precisaria ser no desktop ou no servidor
com uma memria principal que pode ser de 10-100 vezes maior.
A memria Flash usa uma arquitetura muito diferente e tem propriedades diferentes da
DRAM padro. As diferenas mais importantes so:
1. A memria Flash deve ser apagada (por isso o nome Flash, do processo flash
deapagar) antes que seja sobrescrita, e isso deve ser feito em blocos (em memrias
Flash de alta densidade, chamadas NAND Flash, usadas na maioria das aplicaes
de computador) em vez de bytes ou palavras individuais. Isso significa que, quando
dados precisam ser gravados em uma memria Flash, todo um bloco deve ser
montado, seja como um bloco de dados novos, seja mesclando os dados a serem
gravados e o resto do contedo do bloco.
2. A memria Flash esttica (ou seja, ela mantm seu contedo mesmo quando
no aplicada energia) e consome significativamente menos energia quando
noseest lendo ou gravando (de menos de metade em modo stand-by a zero
quando completamente inativa).
3. A memria Flash tem nmero limitado de ciclos de escrita em qualquer bloco (em
geral, pelo menos 100.000). Ao garantir a distribuio uniforme dos blocos escritos
por toda a memria, um sistema pode maximizar o tempo de vida de um sistema
de memria Flash.
4. Memrias Flash de alta densidade so mais baratas do que a SDRAM, porm so
mais caras do que discos: aproximadamente US$ 2/GB para Flash, US$ 20-40/GB
para SDRAM e US$ 0,09/GB para discos magnticos.
5. A memria Flash muito mais lenta do que a SDRAM, porm muito mais rpida
do que um disco. Por exemplo, uma transferncia de 256 bytes de uma memria
Flash tpica de alta densidade leva cerca de 6,5ms (usando uma transferncia em
modo de exploso similar, porm mais lenta do que a usada na SDRAM). Uma
transferncia comparvel de uma SDRAM DDR leva cerca de um quarto desse
tempo, e para um disco cerca de 1.000 vezes mais demorada. Para escritas, a
diferena consideravelmente maior, com a SDRAM sendo pelo menos 10 vezes
e no mximo 100 vezes mais rpida do que a memria Flash, dependendo das
circunstncias.
As rpidas melhorias na memria Flash de alta densidade na dcada passada tornaram
a tecnologia uma parte vivel das hierarquias de memria em dispositivos mveis e
tambm como substitutos dos discos. Conforme a taxa de aumento na densidade da
DRAM continua a cair, a memria Flash pode ter um papel cada vez maior nos sistemas
90 CAPTULO 2: Projeto de hierarquia de memria

de memria futuros, agindo tanto como um substituto para os discos rgidos quanto como
armazenamento intermedirio entre a DRAM e o disco.

Aumentando a confiabilidade em sistemas de memria


Caches e memrias principais grandes aumentam significativamente a possibilidade
de erros ocorrerem tanto durante o processo de fabricao quanto dinamicamente,
principalmente resultantes de raios csmicos que atingem a clula de memria. Esses
erros dinmicos, que so mudanas no contedo de uma clula, e no uma mudana
nos circuitos, so chamados soft errors. Todas as DRAMs, memrias Flash e muitas SRAMs
so fabricadas com linhas adicionais para que pequeno nmero de defeitos de fabricao
possa ser acomodado, programando a substituio de uma linha defeituosa por uma
linha adicional. Alm de erros de fabricao que podem ser reparados no momento da
configurao, tambm podem ocorrer na operao os hard errors, que so mudanas per-
manentes na operao de uma ou mais clulas de memria.
Erros dinmicos podem ser detectados por bits de paridades, detectados e corrigidos
pelo uso de cdigos de correo de erro (Error Correcting Codes ECCs). Uma vez
que as caches de instruo so somente para leitura, a paridade o suficiente. Em
caches de dados maiores e na memria principal, ECCs so usados para permitir que
os erros sejam detectados e corrigidos. A paridade requer somente um bit de overhead
para detectar um nico erro em uma sequncia de bits. J que um erro multibit no
seria detectado com paridade, os nmeros de bits protegidos por um bit de paridade
devem ser limitados. Um bit de paridade para 8 bits de dados uma razo tpica. ECCs
podem detectar dois erros e corrigir um nico erro com um custo de 8 bits de overhead
para 64 bits de dados.
Em sistema grandes, a possibilidade de mltiplos erros alm da falha completa em
um nico chip de memria se torna importante. O Chipkill foi lanado pela IBM para
solucionar esse problema, e vrios sistemas grandes, como servidores IBM e SUN e os
Google Clusters, usam essa tecnologia (a Intel chama sua verso de SDDC). Similar em
natureza tcnica RAID usada para discos, o Chipkill distribui os dados e informaes
de ECC para que a falha completa de um nico chip de memria possa ser tratada de
modo a dar suporte reconstruo dos dados perdidos a partir dos chips de memria
restantes. Usando uma anlise da IBM e considerando um servidor de 10.000 proces-
sadores com 4 GB por processador, gera as seguintes taxas de erros irrecuperveis em trs
anos de operao:
j Somente paridade cerca de 90.000 ou uma falha irrecupervel (ou no detectada)
a cada 17 minutos.
j Somente ECC cerca de 3.500 ou cerca de uma falha no detectada ou
irrecupervel a cada 7,5 horas.
j Chipkill 6 ou cerca de uma falha no detectada ou irrecupervel a cada dois
meses.
Outro modo de ver isso verificar o nmero mximo de servidores (cada um com 4 GB)
que pode ser protegido, ao mesmo tempo que temos a mesma taxa de erros demonstrada
para o Chipkill. Para a paridade, mesmo um servidor com um nico processador ter uma
taxa de erro irrecupervel maior do que um sistema de 10.000 servidores protegido por
Chipkill. Para a ECC, um sistema de 17 servidores teria aproximadamente a mesma taxa
de falhas que um sistema Chipkill com 10.000 servidores. Portanto, o Chipkill uma
exigncia para os servidores de 50.000-100.000 em computadores em escala warehouse
(Seo 6.8, no Cap.6).
2.4 Proteo: memria virtual e mquinas virtuais 91

2.4 PROTEO: MEMRIA VIRTUAL E MQUINAS


VIRTUAIS
Uma mquina virtual levada a ser uma duplicata eficiente e isolada da mquina
real. Explicamos essas noes por meio da ideia de um monitor de mquina
virtual (Virtual Machine Monitor VMM) um VMM possui trs caractersticas
essenciais: 1) oferece um ambiente para programas que basicamente idntico
ao da mquina original; 2) os programas executados nesse ambiente mostram,
no pior dos casos, apenas pequeno decrscimo na velocidade; 3) est no controle
total dos recursos do sistema.
Gerald Popek e Robert Goldberg

Formal requirements for virtualizable third generation architectures,


Communications of the ACM (julho de 1974).

Segurana e privacidade so dois dos desafios mais irritantes para a tecnologia da informa-
o em 2011. Roubos eletrnicos, geralmente envolvendo listas de nmeros de carto de
crdito, so anunciados regularmente, e acredita-se que muitos outros no sejam relatados.
Logo, tanto pesquisadores quanto profissionais esto procurando novas maneiras de
tornar os sistemas de computao mais seguros. Embora a proteo de informaes no
seja limitada ao hardware, em nossa viso segurana e privacidade reais provavelmente
envolvero a inovao na arquitetura do computador, alm dos sistemas de software.
Esta seo comea com uma reviso do suporte da arquitetura para proteger os processos
uns dos outros, por meio da memria virtual. Depois, ela descreve a proteo adicional
fornecida a partir das mquinas virtuais, os requisitos de arquitetura das mquinas virtuais
e o desempenho de uma mquina virtual. Como veremos no Captulo6, as mquinas
virtuais so uma tecnologia fundamental para a computao em nuvem.

Proteo via memria virtual


A memria virtual baseada em pgina, incluindo um TLB (Translation Lookaside Buffer),
que coloca em cache as entradas da tabela de pgina, o principal mecanismo que protege
os processos uns dos outros. As Sees B.4 e B.5, no Apndice B, revisam a memria
virtual, incluindo uma descrio detalhada da proteo via segmentao e paginao
no 80x86. Esta subseo atua como uma breve reviso; consulte essas sees se ela for
muito rpida.
A multiprogramao, pela qual vrios programas executados simultaneamente comparti-
lhariam um computador, levou a demandas por proteo e compartilhamento entre
programas e ao conceito de processo. Metaforicamente, processo o ar que um programa
respira e seu espao de vida, ou seja, um programa em execuo mais qualquer estado
necessrio para continuar executando-o. A qualquer instante, deve ser possvel passar de
um processo para outro. Essa troca chamada de troca de processo ou troca de contexto.
O sistema operacional e a arquitetura unem foras para permitir que os processos comparti-
lhem o hardware, sem interferir um com o outro. Para fazer isso, a arquitetura precisa
limitar o que um processo pode acessar ao executar um processo do usurio, permitindo
ainda que um processo do sistema operacional acesse mais. No mnimo, a arquitetura
precisa fazer o seguinte:
1. Oferecer pelo menos dois modos, indicando se o processo em execuo
dousurio ou do sistema operacional. Este ltimo processo, s vezes, chamado
de processo kernel ou processo supervisor.
92 CAPTULO 2: Projeto de hierarquia de memria

2. Oferecer uma parte do status do processador que um processo do usurio pode


usar, mas no escrever. Esse status inclui bit(s) de modo usurio/supervisor, bit de
ativar/desativar exceo e informaes de proteo de memria. Os usurios so
impedidos de escrever nesse status, pois o sistema operacional no poder controlar
os processos do usurio se eles puderem se dar privilgios de supervisor, desativar
excees ou alterar a proteo da memria.
3. Oferecer mecanismos pelos quais o processador pode ir do modo usurio para o
modo supervisor e vice-versa. A primeira direo normalmente alcanada por
uma chamada do sistema, implementada como uma instruo especial que transfere
o controle para um local determinado no espao de cdigo do supervisor. O PC
salvo a partir do ponto da chamada do sistema, e o processador colocado no
modo supervisor. O retorno ao modo usurio como um retorno de sub-rotina,
que restaura o modo usurio/supervisor anterior.
4. Oferecer mecanismos para limitar os acessos memria a fim de proteger o estado
da memria de um processo sem ter de passar o processo para o disco em uma troca
de contexto.
O Apndice A descreve vrios esquemas de proteo de memria, mas o mais popular
, sem dvida, a incluso de restries de proteo a cada pgina da memria virtual. As
pginas de tamanho fixo, normalmente com 4 KB ou 8 KB de extenso, so mapeadas a
partir do espao de endereos virtuais para o espao de endereos fsicos, por meio de uma
tabela de pgina. As restries de proteo esto includas em cada entrada da tabela de
pgina. As restries de proteo poderiam determinar se um processo do usurio pode
ler essa pgina, se um processo do usurio pode escrever nessa pgina e se o cdigo pode
ser executado a partir dessa pgina. Alm disso, um processo no poder ler nem escrever
em uma pgina se no estiver na tabela de pgina. Como somente o SO pode atualizar a
tabela de pgina, o mecanismo de paginao oferece proteo de acesso total.
A memria virtual paginada significa que cada acesso memria usa logicamente pelo
menos o dobro do tempo, com um acesso memria para obter o endereo fsico e um
segundo acesso para obter os dados. Esse custo seria muito alto. A soluo contar com
o princpio da localidade, se os acessos tiverem proximidade; ento, as tradues de acesso
para os acessos tambm precisam ter proximidade. Mantendo essas tradues de endereo
em uma cache especial, um acesso memria raramente requer um segundo acesso para
traduzir os dados. Essa cache de traduo de endereo especial conhecida como Trans-
lation Lookaside Buffer (TLB).
A entrada do TLB como uma entrada de cache em que a tag mantm partes do endereo
virtual e a parte de dados mantm um endereo de pgina fsico, campo de proteo,
bit de validade e normalmente um bit de utilizao e um bit de modificao. O sistema
operacional muda esses bits alterando o valor na tabela de pgina e depois invalidando
a entrada de TLB correspondente. Quando a entrada recarregada da tabela de pgina, o
TLB apanha uma cpia precisa dos bits.
Considerando que o computador obedece fielmente s restries nas pginas e mapeia os
endereos virtuais aos endereos fsicos, isso pode parecer o fim. As manchetes de jornal
sugerem o contrrio.
O motivo pelo qual isso no o fim que dependemos da exatido do sistema operacional
e tambm do hardware. Os sistemas operacionais de hoje consistem em dezenas de mi-
lhes de linhas de cdigo. Como os bugs so medidos em nmero por milhares de linhas
de cdigo, existem milhares de bugs nos sistemas operacionais em produo. As falhas
no SO levaram a vulnerabilidades que so exploradas rotineiramente.
2.4 Proteo: memria virtual e mquinas virtuais 93

Esse problema e a possibilidade de que no impor a proteo poderia ser muito mais cus-
toso do que no passado tm levado algumas pessoas a procurarem um modelo de proteo
com uma base de cdigo muito menor do que o SO inteiro, como as mquinas virtuais.

Proteo via mquinas virtuais


Uma ideia relacionada com a memria virtual que quase to antiga a de mquinas
virtuais (Virtual Machines VM). Elas foram desenvolvidas no final da dcada de 1960
e continuaram sendo uma parte importante da computao por mainframe durante anos.
Embora bastante ignoradas no domnio dos computadores monousurios nas dcadas de
1980 e 1990, recentemente elas ganharam popularidade devido:
j crescente importncia do isolamento e da segurana nos sistemas modernos;
j s falhas na segurana e confiabilidade dos sistemas operacionais padro;
j ao compartilhamento de um nico computador entre muitos usurios no
relacionados;
j aos aumentos drsticos na velocidade bruta dos processadores, tornando o overhead
das VMs mais aceitvel.
A definio mais ampla das VMs inclui basicamente todos os mtodos de emulao
que oferecem uma interface de software-padro, como a Java VM. Estamos interessados
nas VMs que oferecem um ambiente completo em nvel de sistema, no nvel binrio da
arquitetura do conjunto de instrues (Instruction Set Architecture ISA). Muitas vezes,
a VM suporta a mesma ISA que o hardware nativo. Entretanto, tambm possvel suportar
uma ISA diferente, e tais tcnicas muitas vezes so empregadas quando migramos entre
ISAs para permitir que o software da ISA original seja usado at que possa ser transferido
para a nova ISA. Nosso foco ser em VMs onde a ISA apresentada pela VM e o hardware
nativo combinam. Essas VMs so chamadas mquinas virtuais do sistema (operacional).
IBM VM/370, VMware ESX Server e Xen so alguns exemplos. Elas apresentam a iluso de
que os usurios de uma VM possuem um computador inteiro para si mesmos, incluindo
uma cpia do sistema operacional. Um nico computador executa vrias VMs e pode
dar suporte a uma srie de sistemas operacionais (SOs) diferentes. Em uma plataforma
convencional, um nico SO possui todos os recursos de hardware, mas com uma VM
vrios SOs compartilham os recursos do hardware.
O software que d suporte s VMs chamado monitor de mquina virtual (Virtual Machine
Monitor VMM) ou hipervisor; o VMM o corao da tecnologia de mquina virtual.
A plataforma de hardware subjacente chamada de hospedeiro (host), e seus recursos so
compartilhados entre as VMs de convidadas (guests). O VMM determina como mapear os
recursos virtuais aos recursos fsicos: um recurso fsico pode ser de tempo compartilhado,
particionado ou at mesmo simulado no software. O VMM muito menor do que um SO
tradicional; a parte de isolamento de um VMM talvez tenha apenas 10.000 linhas de cdigo.
Em geral, o custo de virtualizao do processador depende da carga de trabalho. Os pro-
gramas voltados a processador em nvel de usurio, como o SPEC CPU2006, possuem
zero overhead de virtualizao, pois o SO raramente chamado, de modo que tudo
executado nas velocidades nativas. Em geral, cargas de trabalho com uso intenso de E/S
tambm utilizam intensamente o SO, que executa muitas chamadas do sistema e ins-
trues privilegiadas, o que pode resultar em alto overhead de virtualizao. O overhead
determinado pelo nmero de instrues que precisam ser simuladas pelo VMM e pela
lentido com que so emuladas. Portanto, quando as VMs convidadas executam a mesma
ISA que o host, conforme presumimos aqui, o objetivo da arquitetura e da VMM executar
quase todas as instrues diretamente no hardware nativo. Por outro lado, se a carga de
94 CAPTULO 2: Projeto de hierarquia de memria

trabalho com uso intensivo de E/S tambm for voltada para E/S, o custo de virtualizao
do processador pode ser completamente ocultado pela baixa utilizao do processador,
pois ele est constantemente esperando pela E/S.
Embora nosso interesse aqui seja nas VMs para melhorar a proteo, elas oferecem dois
outros benefcios que so comercialmente significativos:
1. Gerenciamento de software. As VMs oferecem uma abstrao que pode executar um
conjunto de software completo, incluindo at mesmo sistemas operacionais antigos,
como o DOS. Uma implantao tpica poderia ser algumas VMs executando SOs
legados, muitas executando a verso atual estvel do SO e outras testando a prxima
verso do SO.
2. Gerenciamento de hardware. Um motivo para mltiplos servidores ter cada
aplicao executando com a verso compatvel do sistema operacional em
computadores separados, pois essa separao pode melhorar a dependncia.
As VMs permitem que esses conjuntos separados de software sejam executadas
independentemente, embora compartilhem o hardware, consolidando assim o
nmero de servidores. Outro exemplo que alguns VMMs admitem a migrao
de uma VM em execuo para um computador diferente, seja para balancear
a carga seja para abandonar o hardware que falha.
por essas duas razes que os servidores baseados na nuvem, como os da Amazon, contam
com mquinas virtuais.

Requisitos de um monitor de mquina virtual


O que um monitor de VM precisa fazer? Ele apresenta uma interface de software para o
software convidado, precisa isolar o status dos convidados uns dos outros e proteger-se
contra o software convidado (incluindo SOs convidados). Os requisitos qualitativos so:
j O software convidado deve se comportar em uma VM exatamente como se
estivesse rodando no hardware nativo, exceto pelo comportamento relacionado com o
desempenho ou pelas limitaes dos recursos fixos compartilhados por mltiplas VMs.
j O software convidado no dever ser capaz de mudar a alocao dos recursos reais
do sistema diretamente.
Para virtualizar o processador, o VMM precisa controlar praticamente tudo acesso ao
estado privilegiado, traduo de endereo, E/S, excees e interrupes , embora a VM
e o SO convidados em execuo os estejam usando temporariamente.
Por exemplo, no caso de uma interrupo de timer, o VMM suspenderia a VM convidada
em execuo, salvaria seu status, trataria da interrupo, determinaria qual VM convidada
ser executada em seguida e depois carregaria seu status. As VMs convidadas que contam
com interrupo de timer so fornecidas com um timer virtual e uma interrupo de timer
simulada pelo VMM.
Para estar no controle, o VMM precisa estar em um nvel de privilgio mais alto do que
a VM convidada, que geralmente executa no modo usurio; isso tambm garante que a
execuo de qualquer instruo privilegiada ser tratada pelo VMM. Os requisitos bsicos
das mquinas virtuais do sistema so quase idnticos queles para a memria virtual
paginada, que listamos anteriormente.
j Pelo menos dois modos do processador, sistema e usurio.
j Um subconjunto privilegiado de instrues, que est disponvel apenas no modo
do sistema, resultando em um trap se for executado no modo usurio. Todos os
recursos do sistema precisam ser controlveis somente por meio dessas instrues.
2.4 Proteo: memria virtual e mquinas virtuais 95

(Falta de) Suporte arquitetura de conjunto


de instrues para mquinas virtuais
Se as VMs forem planejadas durante o projeto da ISA, ser relativamente fcil reduzir o
nmero de instrues que precisam ser executadas por um VMM e o tempo necessrio
para simul-las. Uma arquitetura que permite que a VM execute diretamente no hardware
ganha o ttulo de virtualizvel, e a arquitetura IBM 370 orgulhosamente ostenta este ttulo.
Infelizmente, como as VMs s foram consideradas para aplicaes desktop e servidor
baseado em PC muito recentemente, a maioria dos conjuntos de instrues foi criada sem
que se pensasse na virtualizao. Entre esses culpados incluem-se o 80x86 e a maioria das
arquiteturas RISC.
Como o VMM precisa garantir que o sistema convidado s interaja com recursos virtuais, um
SO convidado convencional executado como um programa no modo usurio em cima do
VMM. Depois, se um SO convidado tentar acessar ou modificar informaes relacionadas
com os recursos do software por meio de uma instruo privilegiada por exemplo, lendo
ou escrevendo o ponteiro da tabela de pgina , ele gerar um trap para o VMM. O VMM
pode, ento, efetuar as mudanas apropriadas aos recursos reais correspondentes.
Logo, se qualquer instruo tentar ler ou escrever essas informaes sensveis ao trap,
quando executada no modo usurio, a VMM poder intercept-la e dar suporte a uma
verso virtual da informao sensvel, como o SO convidado espera.
Na ausncia de tal suporte, outras medidas precisam ser tomadas. Um VMM deve tomar
precaues especiais para localizar todas as instrues problemticas e garantir que se
comportem corretamente quando executadas por um SO convidado, aumentando assim
a complexidade do VMM e reduzindo o desempenho da execuo da VM.
As Sees 2.5 e 2.7 oferecem exemplos concretos de instrues problemticas na arqui-
tetura 80x86.

Impacto das mquinas virtuais sobre a memria virtual e a E/S


Outro desafio a virtualizao da memria virtual, pois cada SO convidado em cada
VM gerencia seu prprio conjunto de tabelas de pgina. Para que isso funcione, o VMM
separa as noes de memria real e memria fsica (que normalmente so tratadas como
sinnimos) e torna a memria real um nvel separado, intermedirio entre a memria
virtual e a memria fsica (alguns usam os nomes memria virtual, memria fsica e mem-
riade mquina para indicar os mesmos trs nveis). O SO convidado mapeia a memria
virtual memria real por meio de suas tabelas de pgina, e as tabelas de pgina do VMM
mapeiam a memria real dos convidados memria fsica. A arquitetura de memria
virtual especificada por meio de tabelas de pgina, como no IBM VM/370 e no 80x86,
ou por meio da estrutura de TLB, como em muitas arquiteturas RISC.
Em vez de pagar um nvel extra de indireo em cada acesso memria, o VMM mantm
uma tabela de pgina de sombra (shadow page table), que mapeada diretamente do espao
de endereo virtual do convidado ao espao do hardware. Detectando todas as modifica-
es tabela de pgina do convidado, o VMM pode garantir que as entradas da tabela de
pgina de sombra sendo usadas pelo hardware para tradues correspondam quelas do
ambiente do SO convidado, com a exceo das pginas fsicas corretas substitudas pelas
pginas reais nas tabelas convidadas. Logo, o VMM precisa interceptar qualquer tentativa
do SO convidado de alterar sua tabela de pgina ou de acessar o ponteiro da tabela de
pgina. Isso normalmente feito protegendo a escrita das tabelas de pgina convidadas
e interceptando qualquer acesso ao ponteiro da tabela de pgina por um SO convidado.
96 CAPTULO 2: Projeto de hierarquia de memria

Conforme indicamos, o ltimo acontecer naturalmente se o acesso ao ponteiro da tabela


de pgina for uma operao privilegiada.
A arquitetura IBM 370 solucionou o problema da tabela de pgina na dcada de 1970 com
um nvel adicional de indireo que gerenciado pelo VMM. O SO convidado mantm
suas tabelas de pgina como antes, de modo que as pginas de sombra so desnecessrias.
A AMD props um esquema semelhante para a sua reviso pacfica do 80x86.
Para virtualizar o TLB arquitetado em muitos computadores RISC, o VMM gerencia
o TLB real e tem uma cpia do contedo do TLB de cada VM convidada. Para liberar
isso, quaisquer instrues que acessem o TLB precisam gerar traps. Os TLBs com
tags Process ID podem aceitar uma mistura de entradas de diferentes VMs e o VMM,
evitando assim o esvaziamento do TBL em uma troca de VM. Nesse meio-tempo, em
segundo plano, o VMM admite um mapeamento entre os Process IDs virtuais da VM
e os Process IDs reais.
A ltima parte da arquitetura para virtualizar a E/S. Essa a parte mais difcil da vir-
tualizao do sistema, devido ao nmero crescente de dispositivos de E/S conectados ao
computador e diversidade crescente de tipos de dispositivo de E/S. Outra dificuldade
o compartilhamento de um dispositivo real entre mltiplas VMs, e outra ainda vem do
suporte aos milhares de drivers de dispositivo que so exigidos, especialmente se diferentes
OS convidados forem admitidos no mesmo sistema de VM. A iluso da VM pode ser
mantida dando-se a cada VM verses genricas de cada tipo de driver de dispositivo de
E/S e depois deixando para o VMM o tratamento da E/S real.
O mtodo para mapear um dispositivo de E/S virtual para fsico depende do tipo de dis-
positivo. Por exemplo, os discos fsicos normalmente so particionados pelo VMM para
criar discos virtuais para as VMs convidadas, e o VMM mantm o mapeamento de trilhas
e setores virtuais aos equivalentes fsicos. As interfaces de rede normalmente so comparti-
lhadas entre as VMs em fatias de tempo muito curtas, e a tarefa do VMM registrar as
mensagens para os endereos de rede virtuais a fim de garantir que as VMs convidadas
recebam apenas mensagens enviadas para elas.

Uma VMM de exemplo: a mquina virtual Xen


No incio do desenvolvimento das VMs, diversas ineficincias se tornaram aparentes. Por
exemplo, um SO convidado gerencia seu mapeamento de pgina, mas esse mapeamento
ignorado pelo VMM, que realiza o mapeamento real para as pginas fsicas. Em outras
palavras, quantidade significativa de esforo desperdiado gasta apenas para satisfazer
o SO convidado. Para reduzir tais ineficincias, os desenvolvedores de VMM decidiram
que pode valer a pena permitir que o SO convidado esteja ciente de que est rodando
em uma VM. Por exemplo, um SO convidado poderia pressupor uma memria real to
grande quanto sua memria virtual, de modo que nenhum gerenciamento de memria
ser exigido pelo SO convidado.
A permisso de pequenas modificaes no SO convidado para simplificar a virtualizao
conhecida como paravirtualizao, e o VMM Xen, de fonte aberto, um bom exem-
plo disso. O VMM Xen oferece a um SO convidado uma abstrao de mquina virtual
semelhante ao hardware fsico, mas sem muitas das partes problemticas. Por exemplo,
para evitar o esvaziamento do TBL, o Xen mapeado nos 64 MB superiores do espao
de endereos de cada VM. Ele permite que o SO convidado aloque pginas, apenas
cuidando para que no infrinja as restries de proteo. Para proteger o SO convidado
contra programas do usurio na VM, o Xen tira proveito dos quatro nveis de proteo
disponveis no 80x86. O VMM Xen executado no mais alto nvel de privilgio (0), o SO
2.5 Questes cruzadas: o projeto de hierarquias de memria 97

convidado executado no prximo nvel de privilgio (1) e as aplicaes so executadas


no nvel de privilgio mais baixo (3). A maioria dos SOs para o 80x86 mantm tudo nos
nveis de privilgio 0 ou 3.
Para que as sub-redes funcionem corretamente, o Xen modifica o SO convidado para
no usar partes problemticas da arquitetura. Por exemplo, a porta do Linux para o Xen
alterou cerca de 3.000 linhas, ou cerca de 1% do cdigo especfico do 80x86. Porm, essas
mudanas no afetam as interfaces binrias da aplicao do SO convidado.
Para simplificar o desafio de E/S das VMs, recentemente o Xen atribuiu mquinas virtuais
privilegiadas a cada dispositivo de E/S de hardware. Essas VMs especiais so chamadas
domnios de driver (o Xen chama suas VMs de domnios). Os domnios de driver executam
os drivers do dispositivo fsico, embora as interrupes ainda sejam tratadas pela VMM
antes de serem enviadas para o domnio de driver apropriado. As VMs regulares, chamadas
domnios de convidado, executam drivers de dispositivo virtuais simples, que precisam se
comunicar com os drivers de dispositivo fsicos nos domnios de driver sobre um canal para
acessar o hardware de E/S fsico. Os dados so enviados entre os domnios de convidado
e driver pelo remapeamento de pgina.

2.5 QUESTES CRUZADAS: O PROJETO


DE HIERARQUIAS DE MEMRIA
Esta seo descreve trs tpicos abordados em outros captulos que so fundamentais para
as hierarquias de memria.

Proteo e arquitetura de conjunto de instrues


A proteo um esforo conjunto de arquitetura e sistemas operacionais, mas os arquitetos
tiveram de modificar alguns detalhes esquisitos das arquiteturas de conjunto de instrues
existentes quando a memria virtual se tornou popular. Por exemplo, para dar suporte
memria virtual no IBM 370, os arquitetos tiveram de alterar a bem-sucedida arquitetura
do conjunto de instrues do IBM 360, que havia sido anunciada seis anos antes. Ajustes
semelhantes esto sendo feitos hoje para acomodar as mquinas virtuais.
Por exemplo, a instruo POPF do 80x86 carrega os registradores de flag do topo da pilha
para a memria. Um dos flags o flag Interrupt Enable (IE). Se voc executar a instruo
POPF no modo usurio, em vez de intercept-la, ela simplesmente mudar todos os flags,
exceto IE. No modo do sistema, ela no mudar o IE. Como um SO convidado executado
no modo usurio dentro de uma VM, isso um problema, pois ele espera ver o IE alterado.
Extenses da arquitetura 80x86 para suportar a virtualizao eliminaram esse problema.
Historicamente, o hardware de mainframe IBM e o VMM utilizavam trs passos para me-
lhorar o desempenho das mquinas virtuais:
1. Reduzir o custo da virtualizao do processador.
2. Reduzir o custo de overhead de interrupo devido virtualizao.
3. Reduzir o custo de interrupo direcionando as interrupes para a VM apropriada
sem invocar o VMM.
A IBM ainda o padro dourado da tecnologia de mquina virtual. Por exemplo, um
mainframe IBM executava milhares de VMs Linux em 2000, enquanto o Xen executava
25 VMs, em 2004 (Clark et al.,2004). Verses recentes de chipsets adicionaram instrues
especiais para suportar dispositivos em uma VM, para mascarar interrupes em nveis
inferiores de cada VM e para direcionar interrupes para a VM apropriada.
98 CAPTULO 2: Projeto de hierarquia de memria

Consistncia dos dados em cache


Os dados podem ser encontrados na memria e na cache. Desde que um processador
seja o nico dispositivo a alterar ou ler os dados e a cache fique entre o processador e a
memria, haver pouco perigo de o processador ver a cpia antiga ou desatualizada (stale).
Conforme mencionaremos no Captulo4, mltiplos processadores e dispositivos de E/S
aumentam a oportunidade de as cpias serem inconsistentes e de lerem a cpia errada.
A frequncia do problema de coerncia de cache diferente para multiprocessadores e
para E/S. Mltiplas cpias de dados so um evento raro para E/S que deve ser evitado
sempre que possvel , mas um programa em execuo em mltiplos processadores
desejar ter cpias dos mesmos dados em vrias caches. O desempenho de um programa
multiprocessador depende do desempenho do sistema ao compartilhar dados.
A questo de coerncia da cache de E/S esta: onde ocorre a E/S no computador entre o
dispositivo de E/S e a cache ou entre o dispositivo de E/S e a memria principal? Se a en-
trada colocar dados na cache e a sada ler dados da cache, tanto a E/S quanto o processador
vero os mesmos dados. A dificuldade dessa tcnica que ela interfere com o processadore
pode fazer com que o processador pare para a E/S. A entrada tambm pode interferir com
a cache, deslocando alguma informao com dados novos que provavelmente sero aces-
sados em breve.
O objetivo para o sistema de E/S em um computador com cache impedir o problema dos
dados desatualizados, enquanto interfere o mnimo possvel. Muitos sistemas, portanto,
preferem que a E/S ocorra diretamente na memria principal, com a memria principal
atuando como um buffer de E/S. Se uma cache write-through for usada, a memria ter
uma cpia atualizada da informao e no haver o problema de dados passados para a
sada (esse benefcio um motivo para os processadores usarem a cache write-through).
Infelizmente, hoje o write-through normalmente encontrado apenas nas caches de dados
de primeiro nvel, apoiados por uma cache L2 que use write-back.
A entrada requer algum trabalho extra. A soluo de software garantir que nenhum bloco
do buffer de entrada esteja na cache. Uma pgina contendo o buffer pode ser marcada
como no passvel de cache (noncachable), e o sistema operacional sempre poder en-
trar em tal pgina. Como alternativa, o sistema operacional pode esvaziar os endereos
de buffer da cache antes que ocorra a entrada. Uma soluo de hardware verificar os
endereos de E/S na entrada para ver se eles esto na cache. Se houver uma correspondncia
de endereos de E/S na cache, as entradas de cache sero invalidadas para evitar dados pas-
sados. Todas essas tcnicas tambm podem ser usadas para a sada com caches write-back.
A consistncia da cache do processador um assunto essencial na era dos processadores
multicore, e vamos examin-la em detalhes no Captulo5.

2.6 JUNTANDO TUDO: HIERARQUIA DE MEMRIA


NOARM CORTEX-A8 E INTEL CORE I7
Esta seo desvenda as hierarquias de memria do ARM Cortex-A8 (daqui em diante cha-
mado Cortex-A8) e do Intel Core i7 (daqui em diante chamado i7) e mostra o desempenho
de seus componentes para um conjunto de benchmarks de thread nico. Ns examinamos
o Cortex-A8 primeiro porque ele tem um sistema de memria mais simples. Vamos entrar
em mais detalhes sobre o i7 detalhando uma referncia de memria. Esta seo supe
que os leitores estejam familiarizados com a organizao de uma hierarquia de cache de
dois nveis usando caches indexadas virtualmente. Os elementos bsicos de tal sistema
de memria so explicados em detalhes no Apndice B, e os leitores que no esto acos-
2.6 Juntando tudo: hierarquia de memria noARM Cortex-A8 e Intel Core i7 99

tumados com a organizao desses sistemas so enfaticamente aconselhados a revisar o


exemplo do Opteron no Apndice B. Aps a compreenso da organizao do Opteron,
a breve explicao sobre o sistema Cortex-A8, que similar, ser fcil de acompanhar.

O ARM Cortex-A8
O Cortex-A8 um ncleo configurvel que d suporte arquitetura de conjunto de ins-
trues ARMv7. Ele fornecido como um ncleo IP (propriedade intelectual). Os ncleos
IP so a forma dominante de entrega de tecnologia nos mercados dos embarcados, PMD e
relacionados. Bilhes de processadores ARM e MIPS foram criados a partir desses ncleos
IP. Observe que eles so diferentes dos ncleos no Intel i7 ou AMD Athlon multicores.
Um ncleo IP (que pode ser, ele prprio, um multicore) projetado para ser incorporado
com outras lgicas (uma vez que ele o ncleo de um chip), incluindo processadores de
aplicao especfica (como um codificador ou um decodificador de vdeo), interfaces de
E/S e interfaces de memria, e ento fabricados para gerar um processador otimizado para
uma aplicao em particular. Por exemplo, o ncleo Cortex-A8 IP usado no Apple iPad
e smartphones de diversos fabricantes, incluindo Motorola e Samsung. Embora o ncleo
do processador seja quase idntico, os chips resultantes tm muitas diferenas.
Geralmente, os ncleos IP tm dois tipos: ncleos hard so otimizados para um fornecedor
particular de semicondutores e so caixas-pretas com interfaces externas (mas ainda no
chip). Em geral, permitem a parametrizao somente da lgica fora do ncleo, como
tamanhos de cache L2, sendo que o ncleo IP no pode ser modificado. Normalmente
ncleos soft so fornecidos em uma forma que usa uma biblioteca-padro de elementos
lgicos. Um ncleo soft pode ser compilado para diferentes fornecedores de semicondu-
tores e tambm pode ser modificado, embora modificaes extensas sejam difceis, devido
complexidade dos ncleos IP modernos. Em geral, ncleos hard apresentam melhor
desempenho e menor rea de substrato, enquanto os ncleos soft permitem o atendimento
a outros fornecedores e podem ser modificados mais facilmente.
O Cortex-A8 pode enviar duas instrues por clock a taxas de clock de at 1GHz. Ele
pode suportar uma hierarquia de cache de dois nveis, com o primeiro nvel sendo um
par de caches (para I & D), cada uma com 16 KB ou 32 KB organizados como associativos
por conjuntos de quatro vias e usando previso de via e susbstituio aleatria. O obje-
tivo ter latncia de acesso de ciclo nico para as caches, permitindo que o Cortex-A8
mantenha um atraso de carregamento para uso de um ciclo, busca de instrues mais
simples e menor penalidade por busca de instruo correta quando uma falta de desvio
faz com que a instruo errada seja lida na pr-busca. A cache de segundo nvel opcional,
quando presente, um conjunto associativo de oito vias e pode ser configurado com
128 KB at 1 MB. Ela organizada em 1-4 bancos para permitir que vrias transferncias
de memria ocorram ao mesmo tempo. Um barramento externo de 64-128 bits trata as
requisies de memria. A cache de primeiro nvel indexada virtualmente e taggeada
fisicamente, e a cache de segundo nvel indexada e taggeada fisicamente. Os dois nveis
usam um tamanho de bloco de 64 bytes. Para a D-cache de 32 KB e um tamanho de
pgina de 4 KB, cada pgina fsica pode mapear dois endereos de cache diferentes. Tais
instncias so evitadas por deteco de hardware em uma falta, como na Seo B.3 do
Apndice B.
O gerenciamento de memria feito por um par de TLBs (I e D), cada um dos quais
totalmente associativo com 32 entradas e tamanho de pgina varivel (4 KB, 16 KB, 64
KB, 1 MB e 16 MB). A substituio no TLB feita por um algoritmo round robin. As faltas
do TLB so tratadas no hardware, que percorre uma estrutura de tabela de pgina na
memria. A Figura2.16 mostra como o endereo virtual de 32 bits usado para indexar
100 CAPTULO 2: Projeto de hierarquia de memria

FIGURA 2.16 Endereo virtual, endereo fsico, ndices, tags e blocos de dados para as caches de dados e TLB
de dados do ARM Cortex A-8.
Uma vez que as hierarquias de instruo e dados so simtricas, mostramos somente uma. A TLB (instruo ou dados)
totalmente associativa com 32 entradas. A cache L1 associativa por conjunto de quatro vias com blocos de 64 bytes
ecapacidade de 32 KB. A cache L2 associativa por conjunto com oito vias com blocos de 64 bytes e capacidade de 1 MB.
Esta figura no mostra os bits de validade e bits de proteo para as caches e TLB nem o uso de bits de modo de predio
que ditam o banco de predio da cache L1.

a TLB e as caches, supondo caches primrias de 32 KB e uma cache secundria de 512 KB


com tamanho de pgina de 16 KB.

Desempenho da hierarquia de memria do ARM Cortex-A8


A hierarquia de memria do Cortex-A8 foi simulada com caches primrias de 32 KB e uma
cache L2 associativa por conjunto de oito vias de 1 MB, usando os benchmarks inteiros
Minnespec (KleinOswski e Lilja, 2002). O Minnespec um conjunto de benchmarksque
consiste nos benchmarks SPEC2000, porm com entradas diferentes que reduzem ostem-
pos de execuo em vrias ordens de magnitude. Embora o uso de entradas menores no
mude o mix de instrues, ele afeta o comportamento da cache. Por exemplo, em mcf, o
benchmark inteiro mais pesado em termos de memria do SPEC2000, o Minnespec, tem
taxa de falta, para uma cache de 32 KB, de somente 65% da taxa de falta para a verso
SPEC completa. Para uma cache de 1 MB, a diferena um fator de 6! Em muitos outros
benchmarks, as taxas so similares quelas do mcf, mas as taxas de falta absolutas so
muito menores. Por essa razo, no possvel comparar os benchmarks Minnespec com
os benchmarks SPEC2000. Em vez disso, os dados so teis para a anlise do impacto
relativo s faltas em L1 e L2 e na CPI geral, como faremos no prximo captulo.
As taxas de falta da cache de instruo para esses benchmarks (e tambm para as verses
completas do SPEC2000, nas quais o Minnespec se baseia) so muito pequenas, mesmo
2.6 Juntando tudo: hierarquia de memria noARM Cortex-A8 e Intel Core i7 101

para o L1: perto de zero para a maioria e abaixo de 1% para todos eles. Essa taxa baixa
provavelmente resulta da natureza computacionalmente intensa dos programas SPEC e da
cache associativa por conjunto de quatro vias, que elimina a maioria das faltas por conflito.
A Figura2.17 mostra os resultados da cache de dados, que tem taxas de falta significativas
para L1 e L2. A penalidade de falta do L1 para um Cortex-A8 de 1GHz de 11 ciclos de
clock, enquanto a penalidade de falta do L2 de 60 ciclos de clock, usando SDRAMs
DDR como memria principal. Usando essas penalidades de falta, a Figura2.18 mostra
a penalidade mdia por acesso aos dados. No Captulo3, vamos examinar o impacto das
faltas de cache na CPI geral.

O Intel Core i7
O i7 suporta a arquitetura de conjunto de instrues x86-64, uma extenso de 64 bits da
arquitetura 80x86. O i7 um processador de execuo fora de ordem que inclui quatro
ncleos. Neste captulo, nos concentramos no projeto do sistema de memria e desempe-
nho do ponto de vista de um nico ncleo. O desempenho do sistema dos projetos de
multiprocessador, incluindo o i7 multicore, ser examinado em detalhes no Captulo5.
Cada ncleo em um i7 pode executar at quatro instrues 80x86 por ciclo de clock,
usando um pipeline de 16 estgios, dinamicamente escalonados, que descreveremos em
detalhes no Captulo3. O i7 pode tambm suportar at dois threads simultneos por
processador, usando uma tcnica chamada multithreading simultneo, que ser descrita

FIGURA 2.17 A taxa de falta de dados para o ARM com uma L1 de 32 KB e a taxa de falta de dados
globais de uma L2 de 1 MB usando os benchmarks inteiros do Minnespec afetada significativamente pelas
aplicaes.
As aplicaes com necessidades de memria maiores tendem a ter taxas de falta maiores, tanto em L1 quanto em L2.
Note que a taxa de L2 a taxa de falta global, que considera todas as referncias, incluindo aquelas que acertam em
L1. O Mcf conhecido como cache buster.
102 CAPTULO 2: Projeto de hierarquia de memria

FIGURA 2.18 A penalidade mdia de acesso memria por referncia da memria de dados vindo de L1
e L2 mostrada para o processador ARM executando o Minnespec.
Embora as taxas de falta para L1 sejam significativamente maiores, a penalidade de falta de L2, que mais de cinco
vezes maior, significa que as faltas de L2 podem contribuir significativamente.

no Captulo4. Em 2010, o i7 mais rpido tinha taxa de clock de 3,3GHz, que gera um
pico de taxa de execuo de instrues de 13,2 bilhes de instrues por segundo, ou mais
de 50 bilhes de instrues por segundo para o projeto de quatro ncleos.
O i7 pode suportar at trs canais de memria, cada qual consistindo em um conjunto de
DIMMs separados, e cada um dos quais pode transferir em paralelo. Usando DDR3-1066
(DIMM PC8500), o i7 tem pico de largura de banda de memria pouco acima de 25GB/s.
O i7 usa endereos virtuais de 48 bits e endereos fsicos de 36 bits, gerando uma memria
fsica mxima de 36 GB. O gerenciamento de memria tratado com um TLB de dois
nveis (Apndice B, Seo B.3), resumido na Figura2.19.
A Figura2.20 resume a hierarquia de cache em trs nveis do i7. As caches de primeiro nvel
so indexadas virtualmente e taggeadas fisicamente (Apndice B, Seo B.3), enquanto as
caches L2 e L3 so indexadas fisicamente. A Figura2.21 mostra os passos de um acesso
hierarquia de memria. Primeiro, o PC enviado para a cache de instrues. O ndice da
cache de instrues

Tamanho da cache 32K


2ndice = = = 128 = 27
Tamanho do bloco Associabilidade do conjunto 64 4

ou 7 bits. A estrutura de pgina do endereo da instruo (36=4812 bits) enviada para


o TLB de instruo (passo 1). Ao mesmo tempo, o ndice de 7 bits (mais 2 bits adicionais
para o offset do bloco para selecionar os 16 bytes apropriados, a quantidade de busca
de instruo) do endereo virtual enviado para a cache de instruo (passo 2). Observe
2.6 Juntando tudo: hierarquia de memria noARM Cortex-A8 e Intel Core i7 103

FIGURA 2.19 Caractersticas da estrutura de TLB do i7, que tem TLBs de primeiro nvel de instrues e
dados separadas, as duas suportadas, em conjunto, por um TLB de segundo nvel.
Os TLBs de primeiro nvel suportam o tamanho-padro de pgina de 4 KB, alm de ter nmero limitado de entradas de
pginas grandes de 2-4 MB. Somente as pginas de 4 KB so suportadas no TLB de segundo nvel.

FIGURA 2.20 Caractersticas da hierarquia de cache em trs nveis no i7.


Os trs caches usam write-back e tamanho de bloco de 64 bytes. As caches L1 e L2 so separadas para cada ncleo,
enquanto a cache L3 compartilhada entre os ncleos em um chip e tem um total de 2 MB por ncleo. As trs caches
no possuem bloqueio e permitem mltiplas escritas pendentes. Um write buffer merge usado para a cache L1, que
contm dados no evento de que a linha no est presente em L1 quando ela escrita (ou seja, a falta de escrita em
L1 no faz com que a linha seja alocada). L3 inclusivo de L1 e L2; exploramos essa propriedade em detalhes quando
explicamos as caches multiprocessador. A substituio por uma variante na pseudo-LRU: no caso de L3, o bloco
substitudo sempre a via de menor nmero cujo bit de acesso esteja desligado. Isso no exatamente aleatrio, mas
fcil de computar.

que, para a cache de instruo associativa de quatro vias, 13 bits so necessrios para o
endereo de cache: 7 bits para indexar a cache, mais 6 bits de offset de bloco para bloco
de 64 bytes, mas o tamanho da pgina de 4 KB=212, o que significa que 1 bit do ndice
de cache deve vir do endereo virtual. Esse uso de 1 bit de endereo virtual significa que
o bloco correspondente poderia, na verdade, estar em dois lugares diferentes da cache,
uma vez que o endereo fsico correspondente poderia ser um 0 ou 1 nesse local. Para
instrues, isso no um problema, uma vez que, mesmo que uma instruo aparea
na cache em dois locais diferentes, as duas verses devem ser iguais. Se tal duplicao de
dados, ou aliasing, for permitida, a cache dever ser verificada quando o mapa da pgina
for modificado, o que um evento pouco frequente. Observe que um uso muito simples da
colorizao de pgina (Apndice B, Seo B.3) pode eliminar a possibilidade desses aliases.
Se pginas virtuais de endereo par forem mapeadas para pginas fsicas de endereo par
(e o mesmo ocorrer com as pginas mpares), esses aliases podero no ocorrer, porque
os bits de baixa ordem no nmero das pginas virtual e fsica sero idnticos.
A TBL de instruo acessada para encontrar uma correspondncia entre o endereo e
uma entrada de tabela de pgina (Page Table Entry PTE) vlida (passos 3 e 4). Alm de
traduzir o endereo, a TBL verifica se a PTE exige que esse acesso resulte em uma exceo,
devido a uma violao de acesso.
104 CAPTULO 2: Projeto de hierarquia de memria

FIGURA 2.21 A hierarquia de memria do Intel i7 e os passos no acesso s instrues e aos dados.
Mostramos somente as leituras de dados. As escritas so similares, no sentido de que comeam com uma leitura (uma vez que as
caches so write-back). Faltas so tratadas simplesmente colocando os dados em um buffer de escrita, uma vez que a cache L1 no
alocado para escrita.

Uma falta de TLB de instruo primeiro vai para a TLB L2, que contm 512 PTEs com
tamanho de pgina de 4 KB, e associativa por conjunto com quatro vias. Ela leva dois
ciclos de clock para carregar a TLB L1da TLB L2. Se a TLB L2 falhar, um algoritmo de
hardware ser usado para percorrer a tabela da pgina e atualizar a entrada da TLB. No
pior caso, a pgina no estar na memria, e o sistema operacional recuperar a pgina
do disco. Uma vez que milhes de instrues podem ser executadas durante uma falha
2.6 Juntando tudo: hierarquia de memria noARM Cortex-A8 e Intel Core i7 105

de pgina, o sistema operacional vai realizar outro processo se um estiver esperando para
ser executado. Se no houver exceo de TLB, o acesso cache de instruo continuar.
O campo de ndice do endereo enviado para os quatro bancos da cache de instruo
(passo 5). A tag da cache de instruo tem 367 bits (ndice) 6 bits (offset de bloco),
ou 23 bits. As quatro tags e os bits vlidos so comparados estrutura fsica da pgina a
partir da TLB de instruo (passo 6). Como o i7 espera 16 bytes a cada busca de instruo,
2 bits adicionais so usados do offset de bloco de 6 bits para selecionar os 16 bytes apro-
priados. Portanto, 7+2 ou 9 bits so usados para enviar 16 bytes de instrues para o
processador. A cache L1 pipelining e a latncia de um acerto de quatro ciclos de clock
(passo 7). Uma falta vai para a cache de segundo nvel.
Como mencionado, a cache de instruo virtualmente endereada e fisicamente taggeada.
Uma vez que as caches de segundo nvel so endereadas fisicamente, o endereo fsico
da pgina da TLB composta com o offset de pgina para criar um endereo para acessar
a cache L2. O ndice L2

Tamanho da cache 256K


2ndice = = = 512 = 29
Tamanho do bloco Associabilidade do conjunto 64 8

ento o endereo de bloco de 30 bits (endereo fsico de 36 bits offset de bloco de 6 bits)
dividido em uma tag de 21 bits e um ndice 9 bits (passo 8). Uma vez mais, o ndice e a
tag so enviados para os oitos bancos da cache L2 unificada (passo 9), que so comparados
em paralelo. Se um corresponder e for vlido (passo 10), retornado ao bloco em ordem
sequencial aps a latncia inicial de 10 ciclos a uma taxa de 8 bytes por ciclo de clock.
Se a cache L2 falhar, a cache L3 ser acessada. Para um i7 de quatro ncleos, que tem uma
L3 de 8 MB, o tamanho do ndice

Tamanho da cache 8M
2ndice = = = 8.192 = 213
Tamanho do bloco Associabilidade do conjunto 64 16

O ndice de 13 bits (passo 11) enviado para os 16 bancos de L3 (passo 12). A tag L3,
que tem 36 (13+6)=17 bits, comparada com o endereo fsico da TLB (passo 13).
Se ocorrer um acerto, o bloco retornado depois de uma latncia inicial a uma taxa de 16
bytes por clock e colocado em L1 e L3. Se L3 falhar, um acesso de memria ser iniciado.
Se a instruo no for encontrada na cache L3, o controlador de memria do chip dever
obter o bloco da memria principal. O i7 tem trs canais de memria de 64 bits, que
podem agir como um canal de 192 bits, uma vez que existe somente um controlador de
memria e o mesmo endereo enviado nos dois canais (passo 14). Transferncias am-
plas ocorrem quando os dois canais tm DIMMs idnticos. Cada canal pode suportar at
quatro DIMMs DDR (passo 15). Quando os dados retornam, so posicionados em L3 e
L1 (passo 16), pois L3 inclusiva.
A latncia total da falta de instruo atendida pela memria principal de aproxima-
damente 35 ciclos de processador para determinar que uma falta de L3 ocorreu, mais a
latncia da DRAM para as instrues crticas. Para uma SDRAM DDR1600 de banco nico
e uma CPU de 3,3GHz, a latncia da DRAM de cerca de 35ns ou 100 ciclos de clock
para os primeiros 16 bytes, levando a uma penalidade de falta total de 135 ciclos de clock.
O controlador de memria preenche o restante do bloco de cache de 64 bytes a uma taxa
de 16 bits por ciclo de clock de memria, o que leva mais 15ns ou 45 ciclos de clock.
Uma vez que a cache de segundo nvel uma cache write-back, qualquer falta pode levar
reescrita de um bloco velho na memria. O i7 tem um write buffer merge de 10 entradas
que escreve linhas modificadas de cache quando o prximo nvel da cache no usado
106 CAPTULO 2: Projeto de hierarquia de memria

para uma leitura. O buffer de escrita pesquisado em busca de qualquer falta para ver ser
a linha de cache existe no buffer; em caso positivo, a falta preenchida a partir do buffer.
Um buffer similar usado entre as caches L1 e L2.
Se essa instruo inicial for um load, o endereo de dados ser enviado para a cache de
dados e TLBs de dados, agindo de modo muito similar a um acesso de cache de instruo
com uma diferena-chave. A cache de dados de primeiro nvel um conjunto associativode
oito vias, o que significa que o ndice de 6 bits (contra 7da cache de instruo) e o
endereo usado para acessar a cache o mesmo do offset de pgina. Portanto, aliases na
cache de dados no so um problema.
Suponha que a instruo seja um store em vez de um load. Quando o store iniciado,
ele realiza uma busca na cache de dados, assim como um load. Uma falta faz com que o
bloco seja posicionado em um buffer de escrita, uma vez que a cache L1 no aloca o bloco
em uma falta de escrita. Em um acerto, o store no atualiza a cache L1 (ou L2) at mais
tarde, depois que se sabe que ele no especulativo. Durante esse tempo, o store reside
em uma fila load-store, parte do mecanismo de controle fora de ordem do processador.
O i7 tambm suporta pr-busca para L1 e L2 do prximo nvel na hierarquia. Na maioria
dos casos, a linha pr-obtida simplesmente o prximo bloco da cache. Ao executar a pr-
-busca somente para L1 e L2, so evitadas as buscas caras e desnecessrias na memria.

Desempenho do sistema de memria do i7


Ns avaliamos o desempenho da estrutura de cache do i7 usando 19 dos benchmarks SPEC
CPU2006 (12 inteiros e sete de ponto flutuante), que foram descritos no Captulo1. Os
dados desta seo foram coletados pelo professor Lu Peng e pelo doutorando Ying Zhang,
ambos da Universidade do Estado da Louisiana.
Comeamos com a cache L1. A cache de instruo associativa por conjunto com quatro
vias leva a uma taxa de falta de instruo muito baixa, especialmente porque a pr-busca
de instruo no i7 bastante efetiva. Obviamente, avaliar a taxa de falta um pouco com-
plicado, j que o i7 no gera requisies individuais para unidades de instruo nicas,
mas, em vez disso, pr-busca 16 bytes de dados de instruo (em geral, 4-5 instrues).
Se, por simplicidade, examinarmos a taxa de falta da cache de instruo como tratamos
as referncias de instruo nicas, a taxa de falta de cache de instruo do L1 variar entre
0,1-1,8%, com uma mdia pouco acima de 0,4%. Essa taxa est de acordo com outros
estudos do comportamento da cache de instruo para os benchmarks SPEC CPU2006,
que mostraram baixas taxas de falta da cache de instruo.
A cache de dados L1 mais interessante e tambm a mais complicada de avaliar por trs razes:
1. Como a cache de dados L1 no alocada para escrita, as escritas podem acertar mas
nunca errar de verdade, no sentido de que uma escrita que no acerta simplesmente
coloca seus dados no buffer de escrita e no registra uma falha.
2. Como, s vezes, a especulao pode estar errada (veja discusso detalhada no Cap.3),
existem referncias cache de dados L1 que no correspondem a loads ou stores que
eventualmente completam a execuo. Como tais faltas deveriam ser tratadas?
3. Por fim, a cache de dados L1 realiza pr-busca automtica. As pr-buscas que falham
deveriam ser contadas? Caso afirmativo, como?
Para tratar desses problemas e ao mesmo tempo manter uma quantidade de dados
razovel, a Figura2.22 mostra as faltas de cache de dados L1 de dois modos: 1) relativas
ao nmero de loads que realmente so completados (muitas vezes chamados graduao
ou aposentadoria) e 2) relativas a todos os acessos a cache de dados L1 por qualquer fonte.
2.7 Falcias e armadilhas 107

FIGURA 2.22 A taxa de falta da cache de dados L1 para 17 benchmarks SPEC CPU2006 mostrada
de dois modos: relativa s cargas reais que completam com sucesso a execuo e relativa a todas as
referncias a L1, que tambm inclui pr-buscas, cargas especulativas que no so completadas, e escritas,
que contam como referncias, mas no geram faltas.
Esses dados, como o resto desta seo, foram coletados pelo professor Lu Peng e pelo doutorando Ying Zhang, ambos
da Universidade do Estado da Louisiana, com base em estudos anteriores do Intel Core Duo e outros processadores
(Peng et al., 2008).

Como veremos, a taxa de faltas, quando medida em comparao somente com os loads
completos, 1,6 vez maior (uma mdia de 9,5% contra 5,9%). A Figura2.23 mostra os
mesmos dados em forma de tabela.
Com as taxas de falta da cache de dados L1 sendo de 5-10%, e s vezes mais alta, a impor-
tncia das caches L2 e L3 deve ser bvia. A Figura2.24 mostra as taxas de falta das caches
L2 e L3 contra o nmero de referncias de L1 (e a Fig.2.25 mostra os dados em forma
de tabela). Uma vez que o custo de uma falta para a memria de mais de 100 ciclos e a
taxa mdia de falta de dados em L2 de 4%, L3 obviamente crtico. Sem L3 e supondo
que cerca de metade das instrues de loads ou stores, as faltas da cache L2 poderiam
adicionar dois ciclos por instruo para a CPI! Em comparao, a taxa de falta de dados em
L3, de 1%, ainda significativa, mas quatro vezes menor do que a taxa de falta de L2 e seis
vezes menor do que a taxa de falta de L1. No Captulo3, vamos examinar o relacionamento
entre a CPI do i7 e as faltas de cache, assim como outros efeitos de pipeline.

2.7 FALCIAS E ARMADILHAS


Como a mais naturalmente quantitativa das disciplinas da arquitetura de computador,
a hierarquia de memria poderia parecer menos vulnervel a falcias e armadilhas. En-
tretanto, fomos limitados aqui no pela falta de advertncias, mas pela falta de espao!
108 CAPTULO 2: Projeto de hierarquia de memria

FIGURA 2.23 As faltas da cache de dados primrios so mostradas em comparao com todos
oscarregamentos que so completados e todas as referncias (que incluem requisies especulativas
epr-buscas).

Falcia. Prever o desempenho da cache de um programa a partir de outro.


A Figura2.26 mostra as taxas de falta de instruo e as taxas de falta de dados para trs
programas do pacote de benchmark SPEC2000 medida que o tamanho da cache varia.
Dependendo do programa, as faltas de dados por mil instrues para uma cachede
4.096 KB de 9, 2 ou 90, e as faltas de instruo por mil instrues para uma cache
de 4 KB de 55, 19 ou 0,0004. Programas comerciais, como os bancos de dados,
tero taxas de falta significativas at mesmo em grandes caches de segundo nvel,
o que geralmente no o caso para os programas SPEC. Claramente, generalizar o
desempenho da cache de um programa para outro no sensato. Como a Figura2.24
nos lembra, h muita variao, e as previses sobre as taxas de falta relativas de pro-
gramas pesados em inteiros e ponto flutuante podem estar erradas, como o mcf eo
sphinx3 nos lembram!
Armadilha. Simular instrues suficientes para obter medidas de desempenho precisas da
hierarquia de memria.
Existem realmente trs armadilhas aqui. Uma tentar prever o desempenho de uma
cache grande usando um rastreio pequeno. Outra que o comportamento da localidade
de um programa no constante durante a execuo do programa inteiro. A terceira
que o comportamento da localidade de um programa pode variar de acordo com a
entrada.
2.7 Falcias e armadilhas 109

FIGURA 2.24 As taxas de falta das caches de dados L2 e L3 para 17 benchmarks SPEC CPU2006 so
mostradas em relao s referncias a L1, que tambm incluem pr-buscas, carregamentos especulativos
que no so completados e carregamentos e armazenamentos gerados por programa.
Esses dados, como o resto desta seo, foram coletados pelo professor Lu Peng e pelo doutorando Ying Zhang, ambos
da Universidade do Estado da Louisiana.

A Figura2.27 mostra as faltas de instruo mdias acumuladas por mil instrues para
cinco entradas em um nico programa SPEC2000. Para essas entradas, a taxa de falta
mdia para o primeiro 1,9 bilho de instrues muito diferente da taxa de falta mdia
para o restante da execuo.
Armadilha. No oferecer largura de banda de memria alta em um sistema baseado em cache.
As caches ajudam na latncia mdia de memria cache, mas no podem oferecer grande
largura de banda de memria para uma aplicao que precisa ir at a memria principal.
O arquiteto precisa projetar uma memria com grande largura de banda por trs da cache
para tais aplicaes. Vamos revisitar essa armadilha nos Captulos4 e5.
Armadilha. Implementar um monitor de mquina virtual em uma arquitetura de conjunto de
instrues que no foi projetado para ser virtualizvel.
Nas dcadas de 1970 e 1980, muitos arquitetos no tinham o cuidado de garantir que
todas as instrues de leitura ou escrita de informaes relacionadas com a informaes
de recursos de hardware fossem privilegiadas. Essa atitude laissez-faire causa problemas
para os VMMs em todas essas arquiteturas, incluindo 80x86, que usamos aqui como
exemplo.
A Figura2.28 descreve as 18 instrues que causam problemas para a virtualizao (Robin
e Irvine,2000). As duas classes gerais so instrues que
110 CAPTULO 2: Projeto de hierarquia de memria

FIGURA 2.25 Taxas de falta de L2 e L3 mostradas em forma de tabela em comparao com o nmero de
requisies de dados.

FIGURA 2.26 Faltas de instrues e dados por 1.000 instrues medida que o tamanho da cache varia
de 4 KB a 4.096 KB.
As faltas de instrues para gcc so 30.000-40.000 vezes maiores do que para o lucas e, reciprocamente, as faltas
de dados para o lucas so 2-60 vezes maiores do que para o gcc. Os programas gap, gcc e lucas so do pacote
debenchmark SPEC2000.

j leem registradores de controle no modo usurio, que revela que o sistema


operacional est rodando em uma mquina virtual (como POPF, mencionada
anteriormente); e
j verificam a proteo exigida pela arquitetura segmentada, mas presumem que o
sistema operacional est rodando no nvel de privilgio mais alto.
2.7 Falcias e armadilhas 111

FIGURA 2.27 Faltas de instruo por 1.000 referncias para cinco entradas no benchmark perl do
SPEC2000.
Existem poucas variaes nas faltas e poucas diferenas entre as cinco entradas para o primeiro 1,9 bilho de
instrues. A execuo at o trmino mostra como as faltas variam durante a vida do programa e como elas dependem
da entrada. O grfico superior mostra as faltas mdias de execuo para o primeiro 1,9 bilho de instrues, que
comea em cerca de 2,5 e termina em cerca de 4,7 faltas por 1.000 referncias para todas as cinco entradas.
O grfico inferior mostra as faltas mdias de execuo para executar at o trmino, que ocupa 16-41 bilhes de
instrues, dependendo da entrada. Aps o primeiro 1,9 bilho de instrues, as faltas por 1.000 referncias variam
de 2,4-7,9, dependendo da entrada. As simulaes foram para o processador Alpha usando caches L1 separadas
para instrues e dados, cada qual de 64 KB em duas vias com LRU, e uma cache L2 unificada de 1 MB, mapeada
diretamente.

A memria virtual tambm desafiadora. Como os TLBs do 80x86 no admitem tags de


ID (identificao) de processo, assim como a maioria das arquiteturas RISC, mais dis-
pendioso para o VMM e os SOs convidados compartilhar o TLB; cada mudana de espao
de endereo normalmente exige um esvaziamento do TLB.
A virtualizao da E/S tambm um desafio para o 80x86, em parte porque ele admite
E/S mapeada na memria e possui instrues de E/S separadas, e em parte o que mais
importante porque existe um nmero muito grande e enorme variedade de tipos de
dispositivos e drivers de dispositivo para PCs, para o VMM tratar. Os vendedores terceiros
fornecem seus prprios drivers, e eles podem no virtualizar corretamente. Uma soluo
112 CAPTULO 2: Projeto de hierarquia de memria

FIGURA 2.28 Resumo das 18 instrues do 80x86 que causam problemas para a virtualizao (Robin e
Irvine,2000).
As cinco primeiras instrues do grupo de cima permitem que um programa no modo usurio leia um registrador
de controle como os registradores da tabela de descritor, sem causar um trap. A instruo pop flags modifica um
registrador de controle com informaes sensveis, mas falha silenciosamente quando est no modo usurio. A
verificao de proteo da arquitetura segmentada do 80x86 a runa do grupo de baixo, pois cada uma dessas
instrues verifica o nvel de privilgio implicitamente como parte da execuo da instruo quando l um registrador
de controle. A verificao pressupe que o SO precisa estar no nvel de privilgio mais alto, que no o caso para VMs
convidadas. Somente o MOVE para o registrador de segmento tenta modificar o estado de controle, e a verificao de
proteo prejudicada.

para as implementaes convencionais de uma VM carregar os drivers de dispositivo


reais diretamente no VMM.
Para simplificar as implementaes de VMMs no 80x86, tanto a AMD quanto a Intel
propuseram extenses arquitetura. O VT-x da Intel oferece um novo modo de execuo
para executar VMs, uma definio arquitetada do estado da VM, instrues para trocar
VMs rapidamente e um grande conjunto de parmetros para selecionar as circunstncias
em que um VMM precisa ser invocado. Em conjunto, o VT-x acrescenta 11 novas ins-
trues para o 80x86. A Secure Virtual Machine (SVM) da AMD tem uma funcionalidade
similar.
Depois de ativar o modo que habilita o suporte do VT-x (por meio da instruo VMXON),
o VT-x oferece quatro nveis de privilgio para o SO convidado, que so inferiores em
prioridade aos quatro originais. O VT-x captura todo o estado de uma mquina virtual no
Virtual Machine Control State (VMCS) e depois oferece instrues indivisveis para salvar
e restaurar um VMCS. Alm do estado crtico, o VMCS inclui informaes de configurao
para determinar quando invocar o VMM e, depois, especificamente, o que causou a in-
vocao do VMM. Para reduzir o nmero de vezes que o VMM precisa ser invocado, esse
modo acrescenta verses de sombra de alguns registradores sensveis e acrescenta ms-
caras que verificam se os bits crticos de um registrador sensvel sero alterados antes da
interceptao. Para reduzir o custo da virtualizao da memria virtual, a SVM da AMD
acrescenta um nvel de indireo adicional, chamado tabelas de pgina aninhadas. Isso torna
as tabelas de pgina de sombra desnecessrias.
2.8 Comentrios finais: olhando para o futuro 113

2.8 COMENTRIOS FINAIS: OLHANDO PARA O FUTURO


Ao longo dos ltimos trinta anos tem havido diversas previses do fim eminente
[sic] da taxa de melhoria do desempenho dos computadores. Todas essas
previses estavam erradas, pois foram articuladas sobre suposies derrubadas
por eventos subsequentes. Ento, por exemplo, a falha em prever a mudana
doscomponentes discretos para os circuitos integrados levou a uma previso
deque a velocidade da luz limitaria a velocidade dos computadores a vrias
ordens de magnitude a menos do que as velocidades atuais. Provavelmente,
nossa previso sobre a barreira de memria tambm est errada, mas ela sugere
que precisamos comear a pensar fora da caixa.
Wm. A. Wulf e Sally A. McKee

Hitting the Memory Wall: Implications of the Obvious


Departamento de Cincia da Computao, Universidade da Virginia (dezembro
de 1994); (Esse artigo introduziu o nome memory wall barreira de memria).

A possibilidade de usar uma hierarquia de memria vem desde os primeiros dias dos com-
putadores digitais de uso geral, no final dos anos 1940 e comeo dos anos 1950. A memria
virtual foi introduzida nos computadores de pesquisa, no comeo dos anos 1960, e nos main-
frames IBM, nos anos 1970. As caches apareceram na mesma poca. Os conceitos bsicos
foram expandidos e melhorados ao longo do tempo para ajudar a diminuir a diferena do
tempo de acesso entre a memria e os processadores, mas os conceitos bsicos permanecem.
Uma tendncia que poderia causar mudana significativa no projeto das hierarquias de
memria uma reduo contnua de velocidade, tanto em densidade quanto em tempo
de acesso nas DRAMs. Na ltima dcada, essas duas tendncias foram observadas. Embora
algumas melhorias na largura de banda de DRAM tenham sido alcanadas, diminuies
no tempo de acesso vieram muito mais lentamente parcialmente porque, para limitar o
consumo de energia, os nveis de voltagem vm caindo. Um conceito que vem sendo ex-
plorado para aumentar a largura de banda ter mltiplos acessos sobrepostos por banco.
Isso fornece uma alternativa para o aumento do nmero de bancos e permite maior largura
de banda. Desafios de manufatura para o projeto convencional de DRAM, que usa um
capacitor em cada clula, tipicamente posicionada em uma lacuna profunda, tambm
levaram a redues na taxa de aumento na densidade. J existem DRAM que no utilizam
capacitores, acarretando a continuidade da melhoria da tecnologia DRAM.
Independentemente das melhorias na DRAM, a memria Flash provavelmente ter um
papel maior, devido s possveis vantagens em termos de potncia e densidade. Obviamen-
te, em PMDs, a memria Flash j substituiu os drives de disco e oferece vantagens, como
ativao instantnea, que muitos computadores desktop no fornecem. A vantagem
potencial da memria Flash sobre as DRAMs a ausncia de um transistor por bit para
controlar a escrita tambm seu calcanhar de Aquiles. A memria Flash deve usar
ciclos de apagar-reescrever em lotes consideravelmente mais lentos. Como resultado,
diversos PMDs, como o Apple iPad, usam uma memria principal SDRAM relativamente
pequena combinada com Flash, que age como sistema de arquivos e como sistema de
armazenamento de pgina para tratar a memria virtual.
Alm disso, diversas abordagens totalmente novas memria esto sendo exploradas. Elas
incluem MRAMs, que usam armazenamento magntico de dados, e RAMs de mudana
de fase (conhecidas como PCRAM, PCME e PRAM), que usam um vidro que pode mudar
entre os estados amorfo e cristalino. Os dois tipos de memria so no volteis e ofere-
cem densidades potencialmente maiores do que as DRAMs. Essas ideias no so novas;
114 CAPTULO 2: Projeto de hierarquia de memria

tecnologias de memria magnetorresistivas e memrias de mudana de fase esto por a h


dcadas. Qualquer uma dessas tecnologias pode tornar-se uma alternativa memria Flash
atual. Substituir a DRAM uma tarefa muito mais difcil. Embora as melhorias nas DRAMs
tenham diminudo, a possibilidade de uma clula sem capacitor e outras melhorias em
potencial tornam difcil apostar contra as DRAMs pelo menos durante a dcada seguinte.
Por alguns anos, foram feitas vrias previses sobre a chegada da barreira de memria (veja
artigo citado no incio desta seo), que levaria a redues fundamentais no desempenho do
processador. Entretanto, a extenso das caches para mltiplos nveis, esquemas mais sofisticados
de recarregar e pr-busca, maior conhecimento dos compiladores e dos programadores sobre a
importncia da localidade, e o uso de paralelismo para ocultar a latncia que ainda existir, vm
ajudando a manter a barreira de memria afastada. A introduo de pipelines fora de ordem
com mltiplas faltas pendentes permitiu que o paralelismo em nvel de instruo disponvel
ocultasse a latncia de memria ainda existente em um sistema baseado em cache. A introduo
do multithreading e de mais paralelismo no nvel de thread levou isso alm, fornecendo mais
paralelismo e, portanto, mais oportunidades de ocultar a latncia. provvel que o uso de
paralelismo em nvel de instruo e thread seja a principal ferramenta para combater quaisquer
atrasos de memria encontrados em sistemas de cache multinvel modernos.
Uma ideia que surge periodicamente o uso de scratchpad controlado pelo programador
ou outras memrias de alta velocidade, que veremos ser usadas em GPUs. Tais ideias
nunca se popularizaram por vrias razes: 1) elas rompem com o modelo de memria,
introduzindo espaos de endereo com comportamento diferente; 2) ao contrrio das
otimizaes de cache baseadas em compilador ou em programador (como a pr-busca),
transformaes de memria com scratchpads devem lidar completamente com o rema-
peamento a partir do espao de endereo da memria principal para o espao de endereo
do scratchpad. Isso torna tais transformaes mais difceis e limitadas em aplicabilidade.
No caso das GPUs (Cap.4), onde memrias scratchpad locais so muito usadas, o peso
de gerenci-las atualmente recai sobre o programador.
Embora seja necessrio muito cuidado quanto a prever o futuro da tecnologia da compu-
tao, a histria mostrou que o uso de caches uma ideia poderosa e altamente amplivel
que provavelmente vai nos permitir continuar construindo computadores mais rpidos
e garantindo que a hierarquia de memria entregue as instrues e os dados necessrios
para manter tais sistemas funcionando bem.

2.9 PERSPECTIVAS HISTRICAS E REFERNCIAS


Na Seo L.3 (disponvel on-line), examinaremos a histria das caches, memria virtual
e mquinas virtuais. A IBM desempenha um papel proeminente na histria dos trs. As
referncias para leitura adicional esto includas nessa seo.
Estudos de caso e exerccios por Norman P. Jouppi

ESTUDOS DE CASO COM EXERCCIOS POR NORMAN P.


JOUPPI, NAVEEN MURALIMANOHAR E SHENG LI
Estudo de caso 1: otimizando o desempenho da cache por meio
de tcnicas avanadas
Conceitos ilustrados por este estudo de caso
j Caches sem bloqueio
j Otimizaes de compilador para as caches
Estudos de caso com exerccios por Norman P. Jouppi, Naveen Muralimanohar e Sheng Li 115

j Pr-busca de software e hardware


j Clculo de impacto do desempenho da cache sobre processadores mais complexos
A transposio de uma matriz troca suas linhas e colunas e ilustrada a seguir:

A11 A12 A13 A14 A11 A 21 A31 A 41


A 21 A 22 A 23 A 24 A12 A 22 A32 A 42
A31 A32 A33 A34 A13 A 23 A33 A 43

A 41 A 42 A 43 A 44 A14 A 24 A34 A 44

Aqui est um loop simples em C para mostrar a transposio:

Considere que as matrizes de entrada e sada sejam armazenadas na ordem principal de


linha (ordem principal de linha significa que o ndice de linha muda mais rapidamente).
Suponha que voc esteja executando uma transposio de preciso dupla de 256256
em um processador com cache de dados de 16 KB totalmente associativa (de modo que
no precise se preocupar com conflitos de cache) nvel 1 por substituio LRU, com
blocos de 64 bytes. Suponha que as faltas de cache de nvel 1 ou pr-buscas exijam 16
ciclos, sempre acertando na cache de nvel 2, e a cache de nvel 2 possa processar uma
solicitao a cada dois ciclos de processador. Suponha que cada iterao do loop interno
acima exija quatro ciclos se os dados estiverem presentes na cache de nvel 1. Suponha
que a cache tenha uma poltica escrever-alocar-buscar na escrita para as faltas de escrita.
Suponha, de modo no realista, que a escrita de volta dos blocos modificados de cache
exija 0 ciclo.
2.1 [10/15/15/12/20] <2.2> Para a implementao simples mostrada anteriormente,
essa ordem de execuo seria no ideal para a matriz de entrada. Porm, a
aplicao de uma otimizao de troca de loops criaria uma ordem no ideal
para a matriz de sada. Como a troca de loops no suficiente para melhorar seu
desempenho, ele precisa ser bloqueado.
a. [10] <2.2> Que tamanho de bloco deve ser usado para preencher
completamente a cache de dados com um bloco de entrada e sada?
b. [15] <2.2> Como os nmeros relativos de faltas das verses bloqueada
eno bloqueada podem ser comparados se a cache de nvel 1 for mapeada
diretamente?
c. [15] <2.2> Escreva um cdigo para realizar transposio com um parmetro
de tamanho de bloco B que usa BB blocos.
d. [12] <2.2> Qual a associatividade mnima requerida da cache L1
paradesempenho consistente independentemente da posio dos dois arrays
na memria?
e. [20] <2.2> Tente as transposies bloqueada e no bloqueada de uma matriz
de 256256 em um computador. Quanto os resultados se aproximam
desuas expectativas com base no que voc sabe sobre o sistema de memria
do computador? Explique quaisquer discrepncias, se possvel.
2.2 [10] <2.2> Suponha que voc esteja reprojetando um hardware de pr-busca para
o cdigo de transposio de matriz no bloqueado anterior. O tipo mais simples de
116 CAPTULO 2: Projeto de hierarquia de memria

hardware de pr-busca s realiza a pr-busca de blocos de cache sequenciais aps


uma falta. Os hardwares de pr-busca de passos (strides) no unitrios mais
complicados podem analisar um fluxo de referncia de falta e detectar e pr-buscar
passos no unitrios. Ao contrrio, a pr-busca via software pode determinar
passos no unitrios to facilmente quanto determinar os passos unitrios.
Suponha que as pr-buscas escrevam diretamente na cache sem nenhuma
poluio (sobrescrever dados que precisam ser usados antes que os dados sejam
pr-buscados). No estado fixo do loop interno, qual o desempenho (em ciclos
por iterao) quando se usa uma unidade ideal de pr-busca de passo no unitrio?
2.3 [15/20] <2.2> Com a pr-busca via software, importante ter o cuidado de fazer
com que as pr-buscas ocorram em tempo para o uso, mas tambm minimizar
o nmero de pr-buscas pendentes, a fim de viver dentro das capacidades da
microarquitetura e minimizar a poluio da cache. Isso complicado pelo fato de
os diferentes processadores possurem diferentes capacidades e limitaes.
a. [15] <2.2> Crie uma verso bloqueada da transposio de matriz com
pr-busca via software.
b. [20] <2.2> Estime e compare o desempenho dos cdigos bloqueado e no
bloqueado com e sem pr-busca via software.

Estudo de caso 2: juntando tudo: sistemas de memria


altamente paralelos
Conceito ilustrado por este estudo de caso
j Questes cruzadas: O projeto de hierarquias de memria
O programa apresentado na Figura2.29 pode ser usado para avaliar o comportamento
de um sistema de memria. A chave ter temporizao precisa e depois fazer com que o
programa corra pela memria para invocar diferentes nveis da hierarquia. A Figura2.29
mostra o cdigo em C. A primeira parte um procedimento que usa um utilitrio-padro
para obter uma medida precisa do tempo de CPU do usurio; talvez esse procedimento
tenha de mudar para funcionar em alguns sistemas. A segunda parte um loop aninhado
para ler e escrever na memria em diferentes passos e tamanhos de cache. Para obter tempos
de cache precisos, esse cdigo repetido muitas vezes. A terceira parte temporiza somente o
overhead do loop aninhado, de modo que possa ser subtrado dos tempos medidos em geral
para ver quanto tempo os acessos tiveram. Os resultados so enviados para o formato de
arquivo .csv, para facilitar a importao em planilhas. Voc pode ter de mudar CACHE_MAX,
dependendo da pergunta a que estiver respondendo e do tamanho da memria no sistema
que estiver medindo. A execuo do programa no modo monousurio ou pelo menos sem
outras aplicaes ativas dar resultados mais coerentes. O cdigo mostrado na Figura2.29
foi derivado de um programa escrito por Andrea Dusseau, da U.C. Berkeley, baseado em uma
descrio detalhada encontrada em Saavedra-Barrera (1992). Ele foi modificado para resolver
uma srie de problemas com mquinas mais modernas e para executar sob o Microsoft
Visual C++. Ele pode ser baixado em <www.hpl.hp.com/research/cacti/aca_ch2_cs2.c>.
O programa mostrado anteriormente considera que os endereos de memria rastreiam os
endereos fsicos, o que verdadeiro em algumas mquinas que usam caches endereadas
virtualmente, como o Alpha 21264. Em geral, os endereos virtuais costumam acompa-
nhar os endereos fsicos logo depois da reinicializao, de modo que voc pode ter de
reinicializar a mquina a fim de conseguir linhas suaves nos seus resultados. Para fazer os
exerccios, considere que os tamanhos de todos os componentes da hierarquia de memria
sejam potncias de 2. Considere ainda que o tamanho da pgina muito maior do que o
tamanho de um bloco em uma cache de segundo nvel (se houver uma) e que o tamanho
Estudos de caso com exerccios por Norman P. Jouppi, Naveen Muralimanohar e Sheng Li 117

FIGURA 2.29 Programa em C para avaliar os sistemas de memria.


118 CAPTULO 2: Projeto de hierarquia de memria

de um bloco de cache de segundo nvel maior ou igual ao tamanho de um bloco em uma


cache de primeiro nvel. Um exemplo da sada do programa desenhado na Figura2.30,
com a chave listando o tamanho do array que exercitado.
2.4 [12/12/12/10/12] <2.6> Usando os resultados do programa de exemplo na
Figura2.30:
a. [12] <2.6> Quais so o tamanho geral e o tamanho de bloco da cache de
segundo nvel?
b. [12] <2.6> Qual a penalidade de falta da cache de segundo nvel?
c. [12] <2.6> Qual a associatividade da cache de segundo nvel?
d. [10] <2.6> Qual o tamanho da memria principal?
e. [12] <2.6> Qual ser o tempo de paginao se o tamanho da pgina for de 4 KB?
2.5 [12/15/15/20] <2.6> Se necessrio, modifique o cdigo na Figura2.29 para
medir as seguintes caractersticas do sistema. Desenhe os resultados experimentais
com o tempo decorrido no eixo y e o stride da memria no eixo x. Use escalas
logartmicas para os dois eixos e desenhe uma linha para cada tamanho de cache.
a. [12] <2.6> Qual o tamanho de pgina do sistema?
b. [15] <2.6> Quantas entradas existem no translation lookaside buffer (TLB)?
c. [15] <2.6> Qual a penalidade de falta para o TLB?
d. [20] <2.6> Qual a associatividade do TLB?
2.6 [20/20] <2.6> Em sistemas de memria de multiprocessadores, nveis inferiores
da hierarquia de memria podem no ser capazes de ser saturados por um nico
processador, mas devem ser capazes de ser saturados por mltiplos processadores
trabalhando juntos. Modifique o cdigo na Figura2.29 e execute mltiplas cpias
ao mesmo tempo. Voc pode determinar:
a. [20] <2.6> Quantos processadores reais esto no seu sistema de computador
equantos processadores de sistema so s contextos mutithread adicionais?
b. [20] <2.6> Quantos controladores de memria seu sistema tem?

FIGURA 2.30 Resultados de exemplo do programa da Figura2.29.


Estudos de caso com exerccios por Norman P. Jouppi, Naveen Muralimanohar e Sheng Li 119

2.7 [20] <2.6> Voc pode pensar em um modo de testar algumas das caractersticas
de uma cache de instruo usando um programa? Dica: O compilador pode gerar
grande nmero de instrues no bvias de um trecho de cdigo. Tente usar
instrues aritmticas simples de comprimento conhecido da sua arquitetura de
conjunto de instrues (ISA).

Exerccios
2.8 [12/12/15] <2.2> As perguntas a seguir investigam o impacto de caches pequenas
e simples usando CACTI e presumindo uma tecnologia de 65nm (0,065mm). (O
CACTI est disponvel on-line em <http://quid.hpl.hp.com:9081/cacti/>).
a. [12] <2.2> Compare os tempos de acesso das caches de 64 KB com blocos
de 64 bytes em um nico banco. Quais so os tempos de acesso relativos de
caches associativas por conjunto de duas e quatro vias em comparao com uma
organizao mapeada de modo diferente?
b. [12] <2.2 Compare os tempos de acesso de caches associativas por conjunto
de quatro vias com blocos de 64 bytes e um nico banco. Quais so os tempos
relativos de acesso de caches de 32 KB e 64 KB em comparao com uma cache
de 16 KB?
c. [15] <2.2> Para uma cache de 64 KB, encontre a associatividade de cache entre
1 e 8 com o menor tempo mdio de acesso memria, dado que as faltas por
instruo para certa carga de trabalho de 0,00664 para mapeamento direto,
0,00366 para associativas por conjunto de duas vias, 0,000987 para associativas
por conjunto de quatro vias e 0,000266 para cache de associativas por conjunto
de oito vias. Em geral existem 0,3 referncia de dados por instruo. Suponha
que as faltas de cache levem 10ns em todos os modelos. Para calcular o tempo
de acerto em ciclos, suponha a sada de tempo de ciclo usando CACTI, que
corresponde frequncia mxima em que uma cache pode operar sem bolhas
no pipeline.
2.9 [12/15/15/10] <2.2> Voc est investigando os possveis benefcios de uma
cache L1 com previso de via. Considere que a cache de dados L1 com 64
KB, associativas por conjunto com duas vias e nico banco, seja atualmente
o limitador do tempo de ciclo. Como organizao de cache alternativa, voc
est considerando uma cache com previso de via modelado como uma cache
mapeada diretamente de 64 KB, com 80% de exatido na previso. A menos que
indicado de outra forma, considere um acesso via mal previsto que chegue
cache utilizando mais um ciclo. Considere as taxas de falta e as penalidades de
falta da Questo 2.8, item (c).
a. [12] <2.2> Qual o tempo mdio de acesso memria da cache atual (em
ciclos) contra a cache com previso de via?
b. [15] <2.2> Se todos os outros componentes pudessem operar com o tempo
de ciclo de clock com previso de via mais rpido (incluindo a memria
principal), qual seria o impacto sobre o desempenho de usar a cache com
previso de via?
c. [15] <2.2> As caches com previso de via normalmente s tm sido usadas
para caches de instruo que alimentam uma fila de instruo ou buffer.
Imagine que voc deseje experimentar a previso de via em uma cache
de dados. Suponha que voc tenha 80% de exatido na previso e que as
operaes subsequentes (p.ex., acesso da cache de dados de outras instrues,
dependentes das operaes) sejam emitidas pressupondo uma previso de via
correta. Assim, um erro de previso de via necessita de um esvaziamento de
pipe e interceptao da repetio, o que exige 15 ciclos. A mudana no tempo
120 CAPTULO 2: Projeto de hierarquia de memria

mdio de acesso memria por instruo de carregamento com previso


devia na cache de dados positiva ou negativa? Quanto?
d. [10] <2.2> Como alternativa previso de via, muitas caches associativas
grandes L2 serializam o acesso a tags e dados, de modo que somente o array
do conjunto de dados exigido precisa ser ativado. Isso economiza energia,
mas aumenta o tempo de acesso. Use a interface Web detalhada do CACTI
para uma cache associativa por conjunto de quatro vias, com 1 MB e processo
de 0,065mm com blocos de 64 bytes, 144 bits lidos, um banco, somente
umaporta de leitura/escrita e tags de 30 bits. Quais so a razo de energias
de leitura dinmica total por acesso e a razo dos tempos de acesso para
serializar o acesso a tags e dados em comparao com o acesso paralelo?
2.10 [10/12] <2.2> Voc recebeu a tarefa de investigar o desempenho relativo de uma cache
de dados nvel 1 em banco contra outro em pipeline para um novo microprocessador.
Considere uma cache associativa por conjunto de duas vias e 64 KB, com blocos
de 64 bytes. A cache em pipeline consistiria em dois estgios de pipe, semelhante
cache de dados do Alpha 21264. Uma implementao em banco consistiria em dois
bancos associativos por conjunto de duas vias e 32 KB. Use o CACTI e considere uma
tecnologia de 90nm (0,09mm) na resposta s perguntas a seguir.
a. [10] <2.2> Qual o tempo de ciclo da cache em comparao com o seu
tempo de acesso? Quantos estgios de pipe a cache ocupar (at duas casas
decimais)?
b. [12] <2.2> Compare a energia de leitura dinmica total e de rea por acesso
do projeto com pipeline com o projeto com bancos. Diga qual ocupa menos
rea e qual requer mais potncia, e explique o porqu.
2.11 [12/15] <2.2> Considere o uso de palavra crtica primeiro e o reincio antecipado
em faltas de cache L2. Suponha uma cache L2 de 1 MB com blocos de 64 bytes
e uma via de recarregar com 16 bytes de largura. Suponha que o L2 possa ser
escrito com 16 bytes a cada quatro ciclos de processador, o tempo para receber
o primeiro bloco de 16 bytes do controlador de memria de 120 ciclos, cada
bloco adicional de 16 bytes da memria principal requer 16 ciclos, e os dados
podem ser enviados diretamente para a porta de leitura da cache L2. Ignore
quaisquer ciclos para transferir a requisio de falta para a cache L2 e os dados
requisitados para a cache L1.
a. [12] <2.2> Quantos ciclos levaria para atender uma falta de cache L2
com e sem palavra crtica primeiro e reincio antecipado?
b. [15] <2.2> Voc acha que a palavra crtica primeiro e o reincio antecipado
seriam mais importantes para caches L1 e L2? Que fatores contribuiriam para
sua importncia relativa?
2.12 [12/12] <2.2> Voc est projetando um buffer de escrita entre uma cache
write-through L1 e uma cache write-back L2. O barramento de dados de escrita
da cache de L2 tem 16 bytes de largura e pode realizar escrita em um endereo
de cache independente a cada quatro ciclos do processador.
a. [12] <2.2> Quantos bytes de largura cada entrada do buffer de escrita dever ter?
b. [15] <2.2> Que ganho de velocidade poderia ser esperado no estado
constante usando um write buffer merge em vez de um buffer sem mesclagem
quando a memria estiver sendo zerada pela execuo de armazenamentos
de 64 bits, se todas as outras instrues puderem ser emitidas em paralelo
comos armazenamentos e os blocos estiverem presentes na cache L2?
c. [15] <2.2> Qual seria o efeito das possveis faltas em L1 no nmero de
entradas necessrias de buffer de escrita para sistemas com caches com blocos
e sem blocos?
Estudos de caso com exerccios por Norman P. Jouppi, Naveen Muralimanohar e Sheng Li 121

2.13 [10/10/10] <2.3> Considere um sistema de desktop com um processador


conectado a uma DRAM de 2 GB com cdigo de correo de erro (ECC). Suponha
que exista somente um canal de memria com largura de 72 bits para 64 bits para
dados e 8 bits para ECC.
a. [10] <2.3> Quantos chips DRAM esto na DIMM, se forem usados chips
deDRAM 1 GB, e quantas E/S de dados cada DRAM deve ter se somente
umaDRAM se conecta a cada pino de dados da DIMM?
b. [10] <2.3> Que durao de burst necessria para suportar blocos de cache
L2 de 32 KB?
c. [10] <2.3> Calcule o pico de largura de banda para as DIMMs DDR2-667
eDDR2-533 para leituras de uma pgina ativa excluindo o overhead do ECC.
2.14 [10/10] <2.3> Um exemplo de diagrama de temporizao SDRAM DDR2 aparece
na Figura2.31. tRCD o tempo exigido para ativar uma linha em um banco,
enquanto a latncia CAS (CL) o nmero de ciclos exigidos para ler uma coluna
em uma linha. Considere que a RAM esteja em um DIMM DDR2 com ECC tendo
72 linhas de dados. Considere tambm extenses de burst de 8 que leem 8 bits
por linha de dados, ou um total de 64 bytes do DIMM. Considere tRCD=CAS
(ou CL)* frequncia_clock e frequncia_clock=transferncias_por_segundo/2.
A latncia no chip em uma falta de cache atravs dos nveis 1 e 2 e de volta,
semincluir o acesso DRAM, de 20ns.
a. [10] <2.3> Quanto tempo necessrio da apresentao do comando de
ativao at que o ltimo bit de dados solicitado das transies de DRAM
de vlido para invlido para a DIMM DDR2-667 de 1 GB CL-5? Suponha
que, para cada requisio, fazemos a pr-busca automaticamente de outra
linha de cache adjacente na mesma.
b. [10] <2.3> Qual a latncia relativa quando usamos a DIMM DDR2-667 de
uma leitura requerendo um banco ativo em vez de um para uma pgina j aberta,
incluindo o tempo necessrio para processar a falta dentro do processador?
2.15 [15] <2.3> Considere que um DIM DDR2-667 de 2 GB com CL=5 esteja
disponvel por US$ 130 e uma DIMM DDR2-533 de 2 GB com CL=4 esteja
disponvel por US$ 100. Considere o desempenho do sistema usando as DIMMs
DDR2-667 e DDR2-533 em uma carga de trabalho com 3,33 faltas em L2 por
1K instrues, e suponha que 80% de todas as leituras de DRAM exijam uma
ativao. Qual o custo-desempenho de todo o sistema quando usamos as
diferentes DIMMs, presumindo que somente uma falta em L2 seja pendente
em dado momento e um ncleo em ordem com uma CPI de 1,5 no inclua
tempo de acesso memria para falta de cache?
2.16 [12] <2.3> Voc est provisionando um servidor com CMP de oito ncleos
de 3GHz, que pode executar uma carga de trabalho com uma CPI geral de 2,0
(supondo que os recarregamentos de falta de cache L2 no sejam atrasados). O
tamanho de linha da cache L2 de 32 bytes. Supondo que o sistema use DIMMs

FIGURA 2.31 Diagrama de temporizao da SDRAM DDR2.


122 CAPTULO 2: Projeto de hierarquia de memria

DDR2-667, quantos canais independentes de memria devem ser provisionados


para que o sistema no seja limitado pela largura de banda da memria se a
largura de banda necessria for algumas vezes o dobro da mdia? As cargas de
trabalho incorrem, em mdia, em 6,67 faltas de L2 por 1K instrues.
2.17 [12/12] <2.3> Grande quantidade (mais de um tero) de potncia de DRAM
pode ser devida ativao da pgina (<http://download.micron.com/pdf/
technotes/ddr2/TN4704.pdf> e <www.micron.com/systemcalc>). Suponha que
voc esteja montando um sistema com 2 GB de memria usando DRAMs DDR2
de 2 GB x8 com oito bancos ou DRAMs de 1 GB8 com oito bancos, as duas
com a mesma classe de velocidade. Ambas utilizam tamanho de pgina de 1 KB,
e o tamanho da linha de cache do ltimo nvel de 64 bytes. Suponha que as
DRAMs que no esto ativas estejam em stand-by pr-carregado e dissipem uma
potncia insignificante. Suponha que o tempo para a transio de stand-by para
ativo no seja significativo.
a. [12] <2.3> Qual tipo de DRAM voc acha que resultaria em menor potncia?
Explique o porqu.
b. [12] <2.3> Como uma DIMM de 2GB composta de DRAMs DDR2 de 1
GB x8 se compara em termos de potncia com uma DIMM com capacidade
similar composta DRAM DDR2 de 1 GB x4?
2.18 [20/15/12] <2.3> Para acessar dados de uma DRAM tpica, primeiro temos
de ativar a linha apropriada. Suponha que isso traga uma pgina inteira com
tamanho de 8 KB para o buffer de linha. Ento, ns selecionamos determinada
coluna do buffer de linha. Se acessos subsequentes DRAM forem feitos mesma
pgina, poderemos pular o passo da ativao. Caso contrrio, precisaremos fechar
a pgina atual e pr-carregar as linhas de bit para a prxima ativao. Outra
poltica popular de DRAM fechar proativamente uma pgina e pr-carregar
linhas de bits assim que um acesso for encerrado. Suponha que todas as leituras
ou escritas para a DRAM sejam de 64 bytes e a latncia do barramento DDR
(dados de sada na Figura2.30) para enviar 512 bits seja Tddr.
a. [20] <2.3> Considerando a DDR2-667, se ela levar cinco ciclos para pr-carregar,
cinco ciclos para se ativar e quatro ciclos para ler uma coluna, para que valor da
taxa de acerto do buffer de linha (r) voc vai escolher uma poltica no lugar da
outra para obter o melhor tempo de acesso? Suponha que cada acesso DRAM
seja separado por tempo suficiente para terminar um novo acesso aleatrio.
b. [15] <2.3> Se 10% dos acessos totais DRAM acontecessem back to back
ou continuamente, sem intervalo de tempo, como sua deciso mudaria?
c. [12] <2.3> Calcule a diferena na energia mdia da DRAM por acesso
entre as duas polticas usando a taxa de acerto de buffer de linhas calculada
anteriormente. Suponha que o pr-carregamento requeira 2 nJ e a ativao
requeira 4 nJ, e que 100pJ/bit sejam necessrios para ler ou escrever a partir
do buffer de linha.
2.19 [15] <2.3> Sempre que um computador est inativo, podemos coloc-lo em
stand-by (onde a DRAM ainda est ativa) ou deix-lo hibernar. Suponha que, para
a hibernao, tenhamos que copiar somente o contedo da DRAM para um meio
no voltil, como uma memria Flash. Se ler ou escrever em uma linha de cache
de tamanho 64 bytes para Flash requerer 2,56mJ e a DRAM requerer 0,5 nJ, e se a
potncia em estado inativo para a DRAM for de 1,6W (para 8 GB), quanto tempo
um sistema dever permanecer inativo para se beneficiar da hibernao? Suponha
uma memria principal com 8 GB de tamanho.
2.20 [10/10/10/10/10] <2.4> As mquinas virtuais (VMs) possuem o potencial de
incluir muitas capacidades benficas aos sistemas de computador, resultando, por
Estudos de caso com exerccios por Norman P. Jouppi, Naveen Muralimanohar e Sheng Li 123

exemplo, em custo total da posse (Total Cost of Ownership TCO) melhorado


ou disponibilidade melhorada. As VMs poderiam ser usadas para fornecer as
capacidades a seguir? Caso afirmativo, como elas poderiam facilitar isso?
a. [10] <2.4> Testar aplicaes em ambientes de produo usando mquinas de
desenvolvimento?
b. [10] <2.4> Reimplementao rpida de aplicaes em caso de desastre ou
falha?
c. [10] <2.4> Desempenho mais alto nas aplicaes com uso intensivo das E/S?
d. [10] <2.4> Isolamento de falha entre aplicaes diferentes, resultando em
maior disponibilidade dos servios?
e. [10] <2.4> Realizar manuteno de software nos sistemas enquanto as
aplicaes esto sendo executadas sem interrupo significativa?
2.21 [10/10/12/12] <2.4> As mquinas virtuais podem perder desempenho devido
a uma srie de eventos, como a execuo de instrues privilegiadas, faltas de
TLB, traps e E/S. Esses eventos normalmente so tratados no cdigo do sistema.
Assim, um modo de estimar a lentido na execuo sob uma VM a porcentagem
de tempo de execuo da aplicao no sistema contra o modo usurio. Por
exemplo, uma aplicao gastando 10% de sua execuo no modo do sistema
poderia retardar em 60% quando fosse executada em uma VM. A Figura2.32
lista o desempenho inicial de diversas chamadas de sistema sob execuo
nativa, virtualizao pura e paravirtualizao para LMbench usando Xen em um
sistema Itanium com tempos medidos em microssegundos (cortesia de Matthew
Chapman da Universidade de New South Wales).
a. [10] <2.4> Que tipos de programa poderiam ter maior lentido quando
executados sob VMs?
b. [10] <2.4> Se a lentido fosse linear, como funo do tempo do sistema, dada
a lentido anterior, quo mais lentamente um programa ser executado se
estiver gastando 20% de sua execuo no tempo do sistema?
c. [12] <2.4> Qual a lentido mdia das funes na tabela sob a virtualizao
pura e paravirtualizao?
d. [12] <2.4> Quais funes da tabela possuem os menores atrasos? Qual voc
acha que poderia ser a causa disso?
2.22 [12] <2.4> A definio de uma mquina virtual de Popek e Goldberg estabelecia
que ela seria indistinguvel de uma mquina real, exceto por seu desempenho. Neste
exerccio, usaremos essa definio para descobrir se temos acesso execuo nativa

FIGURA 2.32 Desempenho inicial de diversas chamadas do sistema sob execuo nativa, virtualizao
pura e paravirtualizao.
124 CAPTULO 2: Projeto de hierarquia de memria

em um processador ou se estamos executando em uma mquina virtual. A tecnologia


VT-x da Intel, efetivamente, oferece um segundo conjunto de nveis de privilgio para
o uso da mquina virtual. O que uma mquina virtual sendo executada sobre outra
mquina virtual precisaria fazer, considerando a tecnologia VT-x?
2.23 [20/25] <2.4> Com a adoo do suporte virtualizao na arquitetura x86, as
mquinas virtuais esto ativamente evoluindo e se popularizando. Compare
e contraste a virtualizao das tecnologias Intel VT-x e da AMD AMD-V.
(Informaes sobre a AMD-V podem ser encontradas em <http://sites.amd.com/
us/business/it-solutions/virtualization/Pages/resources.aspx>.)
a. [20] <2.4> Qual delas proporcionaria maior desempenho para aplicaes
intensas no uso da memria com grande necessidade de memria?
b. [25] <2.4> Informaes sobre o suporte IOMMU para E/S virtualizadas da
AMD podem ser encontradas em <http://developer.amd.com/documentation/
articles/pages/892006101.aspx>. O que a tecnologia de virtualizao e uma
unidade de gerenciamento de entrada/sada (IOMMU) podem fazer para
melhorar o desempenho das E/S virtualizadas?
2.24 [30] <2.2, 2.3> Como o paralelismo em nvel de instruo tambm pode
ser explorado efetivamente nos processadores superescalares em ordem e
VLIWs com especulao, um motivo importante para montar um processador
superescalar fora de ordem (out-of-order-OOO) a capacidade de tolerar
a latncia de memria imprevisvel causada por faltas de cache. Logo, voc
pode pensar no hardware que suporta a emisso OOO como fazendo parte do
sistema de memria! Veja a planta baixa do Alpha 21264 na Figura2.33 para
descobrir a rea relativa das filas de emisso e mapeadores de inteiros e ponto
flutuante contra as caches. As filas programam as instrues por emisso, e

FIGURA 2.33 Planta baixa do Alpha 21264 (Kessler,1999).


Estudos de caso com exerccios por Norman P. Jouppi, Naveen Muralimanohar e Sheng Li 125

os mapeadores renomeiam os especificadores de registrador. Logo, estes so


acrscimosnecessrios para dar suporte emisso OOO. O 21264 s possui
caches de dados e instrues de nvel 1 no chip, e ambos so associativas por
conjunto com duas vias e 64 KB. Use um simulador superescalar OOO, como
oSimplescalar (www.cs.wisc.edu/mscalar/simplescalar.html) nos benchmarks
com uso intensivo de memria para descobrir quanto desempenho perdido
se a rea das filas de emisso e mapeadores for usada para a rea da cache de
dados de nvel 1 adicional em um processador superescalar em ordem, em vez da
emisso OOO em um modelo do 21264. Certifique-se de que os outros aspectos
da mquina sejam os mais semelhantes possveis para tornar a comparao justa.
Ignore qualquer aumento no tempo de acesso ou ciclo a partir de caches maiores
e os efeitos da cache de dados maior na planta baixa do chip. (Observe que essa
comparao no ser totalmente justa, pois o cdigo no ter sido programado
para o processador fora de ordem pelo compilador.)
2.25 [20/20/20] <2.6> O analisador de desempenho VTune da Intel pode ser usado
para realizar muitas medies do comportamento da cache. Uma verso gratuita
para avaliao do VTune para Windows e Linux pode ser encontrada em <http://
software.intel.com/enus/articles/intel-vtune-amplifier-xe/>. O programa (aa.ch2.
cs2.c) usado no Estudo de Caso 2 foi modificado para funcionar prontamente
com o VTune em Microsoft Visual C++. O programa pode ser obtido em <www.
hpl.hp.com/research/cacti/aca_ch2_cs2_vtune.c>. Foram adicionadas funes
especiais do VTunes para excluir a inicializao e o overhead de loop durante
o processo de anlise de desempenho. Instrues detalhadas da configurao
do VTunes so dadas na seo README do programa. O programa permanece
em loop por 20 segundos para cada configurao. No experimento a seguir
voc poder descobrir os efeitos do tamanho dos dados sobre a cache e sobre
o desempenho geral do processador. Execute o programa no VTube em um
processador Intel com os tamanhos de conjunto de dados de 8 KB, 128 KB, 4 MB
e 32 MB, e mantenha um passo de 64 bytes (um passo de uma linha de cache nos
processadores Intel i7). Colete estatsticas sobre o desempenho geral e das caches
de dados L1, L2 e L3.
a. [20] <2.6> Liste o nmero de faltas por 1K instrues da cache de dados L1,
L2 e L3 para cada tamanho de conjunto de dados e seu modelo e velocidade
de processador. Com base nos resultados, o que voc pode dizer sobre os
tamanhos de cache de dados L1, caches L2 e L3 do seu processador? Explique
suas observaes.
b. [20] <2.6> Liste as instrues por clock (IPC) para cada tamanho de conjunto
de dados e seu modelo e velocidade de processador. Com base nos resultados,
o que voc pode dizer sobre as penalidades de falta de L1, L2 e L3 do seu
processador? Explique suas observaes.
c. [20] <2.6> Execute o programa no VTune com tamanho de conjunto de
dados de 8 KB e 125 KB em um processador OOO Intel. Liste o nmero
de faltas da cache de dados L1 e cache L2 por 1K instrues e a CPI para
as duas configuraes. O que voc pode dizer sobre a eficcia das tcnicas
de ocultamento de latncia da memria em processadores OOO de alto
desempenho? Dica: Voc precisa encontrar a latncia de falta da cache de
dados L1 do seu processador. Para processadores Intel i7 recentes, ela de
aproximadamente 11 ciclos.
CAPTULO 3

Paralelismo em nvel de instruo e sua


explorao

Quem o primeiro?
Amrica.
Quem o segundo?
Senhor, no existe segundo.
Dilogo entre dois observadores da corrida de veleiro chamada Copa da
Amrica, realizada de alguns em alguns anos a inspirao para John Cocke
nomear o processador em pesquisa da IBM como Amrica.
Esse processador foi o precursor da srie RS/6000 e o primeiro microprocessador
superescalar.

3.1 Paralelismo em nvel de instruo: conceitos e desafios.................................................................127


3.2 Tcnicas bsicas de compilador para expor o ILP............................................................................135
3.3 Reduo de custos com previso de desvio avanado.....................................................................140
3.4 Contornando hazards de dados com o escalonamento dinmico....................................................144
3.5 Escalonamento dinmico: exemplos e algoritmo..............................................................................152
3.6 Especulao baseada em hardware...................................................................................................158
3.7 Explorando o ILP com mltiplo despacho e escalonamento esttico..............................................167
3.8 Explorando o ILP com escalonamento dinmico, mltiplo despacho e especulao.....................170
3.9 Tcnicas avanadas para o despacho de instrues e especulao...............................................175
3.10 Estudos das limitaes do ILP..........................................................................................................185
3.11 Questes cruzadas: tcnicas de ILP e o sistema de memria.......................................................192
3.12 Multithreading: usando suporte do ILP para explorar o paralelismo
em nvel de thread.............................................................................................................................193
3.13 Juntando tudo: Intel Core i7 e o ARM Cortex-A8...........................................................................202
3.14 Falcias e armadilhas........................................................................................................................209
3.15 Comentrios finais: o que temos frente?......................................................................................213
3.16 Perspectivas histricas e referncias...............................................................................................215
Estudos de caso e exerccios por Jason D. Bakos e Robert P. Colwell...................................................215

3.1 PARALELISMO EM NVEL DE INSTRUO:


CONCEITOS E DESAFIOS
Desde cerca de 1985, todos os processadores utilizam pipelining para sobrepor a execuo
de instrues e melhorar o desempenho. Essa potencial sobreposio das instrues
chamada paralelismo em nvel de instruo (Instruction-Level Parallelism ILP), pois as 127
128 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

instrues podem ser avaliadas em paralelo. Neste captulo e no Apndice H, veremos


grande variedade de tcnicas para ampliar os conceitos bsicos de pipelining, aumentando
a quantidade de paralelismo explorada entre as instrues.
Este captulo est em um nvel consideravelmente mais avanado do que o material bsico
sobre pipelining, no Apndice C. Se voc no estiver acostumado com as ideias desse
apndice, dever rev-lo antes de se aventurar por este captulo.
Comearemos o captulo examinando a limitao imposta pelos hazards de dados e
hazards de controle, e depois passaremos para o tpico relacionado com o aumento da
capacidade do compilador e do processador de explorar o paralelismo. Essas sees in-
troduziro grande quantidade de conceitos, que acumulamos no decorrer deste captulo e
do Captulo4. Embora parte do material mais bsico deste captulo pudesse ser entendida
sem todas as ideias das duas primeiras sees, esse material bsico importante para
outras sees deste captulo.
Existem duas abordagens altamente separveis para explorar o ILP: 1) uma que conta com
o hardware para ajudar a descobrir e explorar o paralelismo dinamicamente e 2) uma
que conta com a tecnologia de software para encontrar o paralelismo, estaticamente, no
momento da compilao. Os processadores usando a abordagem dinmica, baseada no
hardware, incluindo a srie Core da Intel, dominam os mercados de desktop e servidor.
No mercado de dispositivos pessoais mveis, no qual muitas vezes a eficincia energtica
o objetivo principal, os projetistas exploram nveis inferiores de paralelismo em nvel
de instruo. Assim, em 2011, a maior parte dos processadores para o mercado de PMDs
usa abordagens estticas, como veremos no ARM Cortex-A8. Entretanto, processadores
futuros (p.ex., o novo ARM Cortex-A9) esto usando abordagens dinmicas. Abordagens
agressivas baseadas em compilador foram tentadas diversas vezes desde os anos 1980 e
mais recentemente na srie Intel Itanium. Apesar dos enormes esforos, tais abordagens
no obtiveram sucesso fora da estreita gama de aplicaes cientficas.
Nos ltimos anos, muitas das tcnicas desenvolvidas para uma abordagem tm sido
exploradas dentro de um projeto que conta basicamente com a outra. Este captulo in-
troduz os conceitos bsicos e as duas abordagens. Uma discusso sobre as limitaes das
abordagens ILP includa neste captulo, e foram tais limitaes que levaram diretamente
ao movimento para o multicore. Entender as limitaes ainda importante para equilibrar
o uso de ILP e paralelismo em nvel de thread.
Nesta seo, discutiremos recursos de programas e processadores que limitam a quantidade
de paralelismo que pode ser explorada entre as instrues, alm do mapeamento crtico
entre a estrutura do programa e a estrutura do hardware, que a chave para entender se uma
propriedade do programa realmente limitar o desempenho e em quais circunstncias.
O valor do CPI (ciclos por instrues) para um processador em pipeline a soma do CPI
base e todas as contribuies de stalls:

CPI de pipeline = CPI de pipeline ideal + Stalls estruturais


+ Stalls de hazard de dados + Stalls de controle

O CPI de pipeline ideal uma medida do desempenho mximo que pode ser obtida pela
implementao. Reduzindo cada um dos termos do lado direito, minimizamos o CPI de
pipeline geral ou, como alternativa, aumentamos o valor do IPC (instrues por clock).
A equao anterior nos permite caracterizar o uso de diversas tcnicas que permitem a
reduo dos componentes do CPI geral. A Figura3.1 mostra as tcnicas que examinaremos
neste captulo e no Apndice H, alm dos tpicos abordados no material introdutrio do
3.1 Paralelismo em nvel de instruo: conceitos e desafios 129

FIGURA 3.1 As principais tcnicas examinadas no Apndice C, no Captulo 3 ou no Apndice H aparecem com o componente da equao
do CPI afetado pela tcnica.

Apndice C. Neste captulo, veremos que as tcnicas introduzidas para diminuir o CPI de
pipeline ideal podem aumentar a importncia de lidar com os hazards.

O que paralelismo em nvel de instruo?


Todas as tcnicas deste captulo exploram o paralelismo entre as instrues. A quantidade
de paralelismo disponvel dentro de um bloco bsico uma sequncia de cdigo em li-
nha reta, sem desvios para dentro, exceto na entrada, e sem desvios para fora, exceto na
sada muito pequena. Para os programas MIPS tpicos, a frequncia mdia de desvio
dinmico normalmente fica entre 15-25%, significando que 3-6 instrues so executadas
entre um par de desvios. Como essas instrues provavelmente dependem umas das
outras, a quantidade de sobreposio que podemos explorar dentro de um bloco bsico
provavelmente ser menor que o tamanho mdio desse bloco. Para obter melhorias de
desempenho substanciais, temos que explorar o ILP entre os diversos blocos bsicos.
A maneira mais simples e mais comum de aumentar o ILP explorar o paralelismo entre
iteraes de um loop. Esse tipo de paralelismo normalmente chamado paralelismo em
nvel de loop. A seguir damos um exemplo simples de loop, que soma dois arrays de 1.000
elementos e completamente paralelo:

Cada iterao do loop pode sobrepor qualquer outra iterao, embora dentro de cada
uma delas exista pouca ou nenhuma oportunidade para sobreposio.
Existem diversas tcnicas que examinaremos para converter esse paralelismo em nvel de
loop em paralelismo em nvel de instruo. Basicamente, essas tcnicas funcionam des-
dobrando o loop estaticamente pelo compilador (como na seo seguinte) ou dinamica-
mente pelo hardware (como nas Sees 3.5 e 3.6).
Um mtodo alternativo importante para explorar o paralelismo em nvel de loop o uso
de SIMD tanto em processadores vetoriais quanto em unidades de processamento grfico
130 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

(GPUs), ambos abordados no Captulo4. Uma instruo SIMD explora o paralelismo


em nvel de dados, operando sobre um nmero pequeno a moderado de itens de dados
em paralelo (geralmente 2-8). Uma instruo vetorial explora o paralelismo em nvel de
dados, operando sobre itens de dados em paralelo. Por exemplo, a sequncia de cdigo
anterior, que de forma simples requer sete instrues por iterao (dois loads, um ass,
um store, dois adress updates e um brach) para um total de 7.000 instrues, poderia ser
executada com um quarto das instrues em algumas arquiteturas SIMD, onde quatro itens
de dados so processados por instruo. Em alguns processadores vetoriais, a sequncia
poderia usar somente quatro instrues: duas instrues para carregar os vetores x e y da
memria, uma instruo para somar os dois vetores e uma instruo para armazenar o
vetor de resultado. Naturalmente, essas instrues seriam canalizadas em um pipeline e
teriam latncias relativamente longas, mas essas latncias podem ser sobrepostas.

Dependncias de dados e hazards


Determinar como uma instruo depende de outra fundamental para determinar quanto
paralelismo existe em um programa e como esse paralelismo pode ser explorado. Particu-
larmente, para explorar o paralelismo em nvel de instruo, temos de determinar quais
instrues podem ser executadas em paralelo. Se duas instrues so paralelas, elas podem
ser executadas simultaneamente em um pipeline de qualquer profundidade sem causar
quaisquer stalls, supondo que o pipeline tenha recursos suficientes (logo, no existem
hazards estruturais). Se duas instrues forem dependentes, elas no sero paralelas e
precisam ser executadas em ordem, embora normalmente possam ser parcialmente sobre-
postas. O segredo, nos dois casos, determinar se uma instruo dependente de outra.

Dependncias de dados
Existem trs tipos diferentes de dependncia: dependncias de dados (tambm chamadas
dependncias de dados verdadeiras), dependncias de nome e dependncias de controle. Uma
instruo j dependente de dados da instruo i se um dos seguintes for verdadeiro:
j a instruo i produz um resultado que pode ser usado pela instruo j; ou
j a instruo j dependente de dados da instruo k, e a instruo k dependente de
dados da instruo i.
A segunda condio afirma simplesmente que uma instruo dependente de outra se
houver uma cadeia de dependncias do primeiro tipo entre as duas instrues. Essa cadeia
de dependncia pode ter o tamanho do programa inteiro. Observe que uma dependncia
dentro de uma nica instruo (como ADDD R1,R1,R1) no considerada dependncia.
Por exemplo, considere a sequncia de cdigo MIPS a seguir, que incrementa um vetor de
valores na memria (comeando com 0(R1), e com o ltimo elemento em 8(R2)), por
um escalar no registrador F2 (para simplificar, no decorrer deste captulo nossos exemplos
ignoram os efeitos dos delayed branches).

As dependncias de dados nessa sequncia de cdigo envolvem tanto dados de ponto


flutuante
3.1 Paralelismo em nvel de instruo: conceitos e desafios 131

quanto dados inteiros:

As duas sequncias dependentes anteriores, conforme mostrado pelas setas, tm cada ins-
truo dependendo da anterior. As setas aqui e nos exemplos seguintes mostram a ordem
que deve ser preservada para a execuo correta. A seta sai de uma instruo que deve
preceder a instruo para a qual ela aponta.
Se duas instrues forem dependentes de dados, elas no podero ser executadas simultanea-
mente nem ser completamente sobrepostas. A dependncia implica que haver uma cadeia
de um ou mais hazards de dados entre as duas instrues (ver no Apndice C uma rpida
descrio dos hazards de dados, que definiremos com exatido mais adiante). A execuo
simultnea das instrues far um processador com pipeline interlock (e uma profundidade
de pipeline maior que a distncia entre as instrues em ciclos) detectar um hazard e parar
(stall), reduzindo ou eliminando assim a sobreposio. Em um processador sem interlock,
que conta com o escalonamento do compilador, o compilador no pode escalonar ins-
trues dependentes de modo que elas sejam totalmente sobrepostas, pois o programa no
ser executado corretamente. A presena de dependncia de dados em uma sequncia de
instrues reflete uma dependncia de dados no cdigo-fonte a partir do qual a sequncia
de instrues foi gerada. O efeito da dependncia de dados original precisa ser preservado.
As dependncias so uma propriedade dos programas. Se determinada dependncia resulta
em um hazard real sendo detectado e se esse hazard realmente causa um stall, essas so
propriedades da organizao do pipeline. Essa diferena essencial para entender como o
paralelismo em nvel de instruo pode ser explorado.
Uma dependncia de dados transmite trs coisas: 1) a possibilidade de um hazard; 2) a
ordem em que os resultados podem ser calculados; e 3) um limite mximo de paralelismo
a ser explorado. Esses limites sero explorados em detalhes na Seo3.10 e no Apndice H.
Como uma dependncia de dados pode limitar a quantidade de paralelismo em nvel
de instruo que podemos explorar, um foco importante deste captulo contornar essas
limitaes. Uma dependncia pode ser contornada de duas maneiras diferentes: mantendo
a dependncia, mas evitando o hazard, e eliminando uma dependncia, transformando
o cdigo. O escalonamento do cdigo o mtodo principal utilizado para evitar hazards
sem alterar uma dependncia, e esse escalonamento pode ser feito tanto pelo compilador
quanto pelo hardware.
Um valor de dados pode fluir entre as instrues ou por registradores ou por locais da
memria. Quando o fluxo de dados ocorre em um registrador, a deteco da dependncia
direta, pois os nomes dos registradores so fixos nas instrues, embora ela fique mais
complicada quando os desvios intervm e questes de exatido foram o compilador ou
o hardware a ser conservador.
As dependncias que fluem pelos locais da memria so mais difceis de se detectar, pois
dois endereos podem referir-se ao mesmo local, mas podem aparecer de formas diferentes.
Por exemplo, 100(R4) e 20(R6) podem ser endereos de memria idnticos. Alm disso,
o endereo efetivo de um load ou store pode mudar de uma execuo da instruo para
outra (de modo que 20(R4) e 20(R4) podem ser diferentes), complicando ainda mais a
deteco de uma dependncia.
Neste captulo, examinaremos o hardware para detectar as dependncias de dados que
envolvem locais de memria, mas veremos que essas tcnicas tambm possuem limitaes.
132 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

As tcnicas do compilador para detectar essas dependncias so crticas para desvendar o


paralelismo em nvel de loop.

Dependncias de nome
O segundo tipo de dependncia uma dependncia de nome. Uma dependncia de nome ocorre
quando duas instrues usam o mesmo registrador ou local de memria, chamado nome, mas
no existe fluxo de dados entre as instrues associadas a ele. Existem dois tipos de depen-
dncias de nome entre uma instruo i que precede uma instruo j na ordem do programa:
1. Uma antidependncia entre a instruo i e a instruo j ocorre quando a instruo j
escreve, em um registrador ou local de memria, que a instruo i l. A ordenao
original precisa ser preservada para garantir que i leia o valor correto. No exemplo das
pginas 130 e 131, existe uma antidependncia entre S.D e DADDIU no registrador R1.
2. Uma dependncia de sada ocorre quando a instruo i e a instruo j escrevem no
mesmo registrador ou local de memria. A ordenao entre as instrues precisa ser
preservada para garantir que o valor finalmente escrito corresponda instruo j.
As antidependncias e as dependncias de sada so dependncias de nome, ao contrrio
das verdadeiras dependncias de dados, pois no existe valor sendo transmitido entre as
instrues. Como uma dependncia de nome no uma dependncia verdadeira, as ins-
trues envolvidas em uma dependncia de nome podem ser executadas simultaneamente
ou ser reordenadas se o nome (nmero de registrador ou local de memria) usado nas
instrues for alterado de modo que as instrues no entrem em conflito.
Essa renomeao pode ser feita com mais facilidade para operandos registradores, quando
chamada renomeao de registrador. A renomeao de registrador pode ser feita estaticamente
por um compilador ou dinamicamente pelo hardware. Antes de descrever as dependncias
que surgem dos desvios, vamos examinar o relacionamento entre as dependncias e os
hazards de dados do pipeline.

Hazards de dados
Um hazard criado sempre que existe uma dependncia entre instrues, e elas esto
prximas o suficiente para que a sobreposio durante a execuo mude a ordem de
acesso ao operando envolvido na dependncia. Devido dependncia, temos de preservar
a chamada ordem do programa, ou seja, a ordem em que as instrues seriam executadas
se executadas sequencialmente uma de cada vez, conforme determinado pelo programa
original. O objetivo do nosso software e das tcnicas de hardware explorar o paralelismo,
preservando a ordem do programa somente onde afeta o resultado do programa. A deteco
e a preveno dos hazards garantem a preservao da ordem necessria do programa.
Os hazard de dados, que so descritos informalmente no Apndice C, podem ser clas-
sificados em um de trs tipos, dependendo da ordem de acessos de leitura e escrita nas
instrues. Por conveno, os hazards so nomeados pela ordenao no programa, que
precisa ser preservada pelo pipeline. Considere duas instrues i e j, com i precedendo j
na ordem do programa. Os hazards de dados possveis so:
j RAW (Read After Write leitura aps escrita) j tenta ler um fonte antes que i
escreva nele, de modo que j apanha incorretamente o valor antigo. Esse hazard o
tipo mais comum e corresponde a uma dependncia de dados verdadeira. A ordem
do programa precisa ser preservada para garantir que j recebe o valor de i.
j WAW (Write After Write escrita aps escrita) j tenta escrever um operando
antes que ele seja escrito por i. As escritas acabam sendo realizadas na ordem errada,
deixando o valor escrito por i em vez do valor escrito por j no destino. Esse hazard
3.1 Paralelismo em nvel de instruo: conceitos e desafios 133

corresponde a uma dependncia de sada. Hazards WAW esto presentes apenas


em pipelines que escrevem em mais de um estgio de pipe ou permitem que uma
instruo prossiga mesmo quando uma instruo anterior parada.
j WAR (Write After Read escrita aps leitura) j tenta escrever um destino antes
que seja lido por i, de modo que i incorretamente apanha o valor novo. Esse hazard
surge de uma antidependncia. Hazards WAR no podem ocorrer na maioria
dos pipelines de despacho esttico at mesmo os pipelines mais profundos
ou pipelines de ponto flutuante , pois todas as leituras vm cedo (em ID) e
todas as escritas vm tarde (em WB) (para se convencer, Apndice A). Um hazard
WAR ocorre quando existem algumas instrues que escrevem resultados cedo no
pipeline de instrues e outras instrues que leem um fonte tarde no pipeline ou
quando as instrues so reordenadas, como veremos neste captulo.
Observe que o caso RAR (Read After Read leitura aps leitura) no um hazard.

Dependncias de controle
O ltimo tipo de dependncia uma dependncia de controle. Uma dependncia de con-
trole determina a ordenao de uma instruo i com relao a uma instruo de desvio,
de modo que essa instruo seja executada na ordem correta do programa e somente
quando precisar. Cada instruo, exceto aquelas no primeiro bloco bsico do programa,
dependente de controle em algum conjunto de desvios e, em geral, essas dependncias de
controle precisam ser preservadas para preservar a ordem do programa. Um dos exemplos
mais simples de uma dependncia de controle a dependncia das instrues na parte
then de uma instruo if no desvio. Por exemplo, no segmento de cdigo

S1 dependente de controle de p1, e S2 dependente de controle de p2, mas no de p1.


Em geral, existem duas restries impostas pelas dependncias de controle:
1. Uma instruo que dependente de controle em um desvio no pode ser movida
antes do desvio, de modo que sua execuo no mais controlada por ele. Por
exemplo, no podemos apanhar uma instruo da parte then de uma instruo if e
mov-la para antes da instruo if.
2. Uma instruo que no dependente de controle em um desvio no pode ser movida
para depois do desvio, de modo que sua execuo controlada pelo desvio. Por exemplo,
no podemos apanhar uma instruo antes da instruo if e mov-la para a parte then.
Quando os processadores preservam a ordem estrita do programa, eles garantem que as
dependncias de controle tambm sejam preservadas. Porm, podemos estar querendo
executar instrues que no deveriam ter sido executadas, violando assim as dependncias
de controle, se pudermos fazer isso sem afetar a exatido do programa. A dependncia
de controle no a propriedade crtica que precisa ser preservada. Em vez disso, as duas
propriedades crticas exatido do programa e normalmente preservadas mantendo-se
a dependncia de dados e o controle so o comportamento de exceo e o fluxo de dados.
A preservao do comportamento de exceo significa que quaisquer mudanas na ordem
de execuo da instruo no devero mudar o modo como as excees so geradas no
programa. Normalmente, isso significa que a reordenao da execuo da instruo no
dever causar quaisquer novas excees no programa. Um exemplo simples mostra como a
134 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

manuteno das dependncias de controle e dados pode impedir tais situaes. Considere
essa sequncia de cdigo:

Nesse caso, fcil ver que, se no mantivermos a dependncia de dados envolvendo R2,
poderemos alterar o resultado do programa. Menos bvio o fato de que, se ignorarmos a
dependncia de controle e movermos as instrues load para antes do desvio, elas podero
causar uma exceo de proteo de memria. Observe que nenhuma dependncia de dados
nos impede de trocar o BEQZ e o LW; essa apenas a dependncia de controle. Para per-
mitir que reordenemos essas instrues (e ainda preservemos a dependncia de dados),
gostaramos apenas de ignorar a exceo quando o desvio for tomado. Na Seo 3.6,
veremos uma tcnica de hardware, a especulao, que nos permite contornar esse problema
de exceo. O Apndice H examina as tcnicas de software para dar suporte especulao.
A segunda propriedade preservada pela manuteno das dependncias de dados e das
dependncias de controle o fluxo de dados. O fluxo de dados o fluxo real dos valores
de dados entre as instrues que produzem resultados e aquelas que os consomem.
Os desvios tornam o fluxo de dados dinmico, pois permitem que a fonte de dados
para determinada instruo venha de muitos pontos. Em outras palavras, insuficiente
apenas manter dependncias de dados, pois uma instruo pode ser dependente de dados
em mais de um predecessor. A ordem do programa o que determina qual predecessor
realmente entregar um valor de dados a uma instruo. A ordem do programa garantida
mantendo-se as dependncias de controle.
Por exemplo, considere o seguinte fragmento de cdigo:

Neste exemplo, o valor de R1 usado pela instruo OR depende de o desvio ser tomado
ou no. A dependncia de dados sozinha no suficiente para preservar a exatido. A
instruo OR dependente de dados nas instrues DADDU e DSUBU, mas somente
preservar essa ordem insuficiente para a execuo correta.
Em vez disso, quando as instrues so executadas, o fluxo de dados precisa ser preservado:
se o desvio no for tomado, o valor de R1 calculado pelo DSUBU deve ser usado pelo OR
e, se o desvio for tomado, o valor de R1 calculado pelo DADDU deve ser usado pelo OR.
Preservando a dependncia de controle do OR no desvio, impedimos uma mudana ilegal
no fluxo dos dados. Por motivos semelhantes, a instruo DSUBU no pode ser movida
para cima do desvio. A especulao, que ajuda com o problema de exceo, tambm nos
permite suavizar o impacto da dependncia de controle enquanto ainda mantm o fluxo
de dados, conforme veremos na Seo 3.6.
s vezes, podemos determinar que a violao da dependncia de controle no pode afetar o
comportamento da exceo ou o fluxo de dados. Considere a sequncia de cdigo a seguir:
3.2 Tcnicas bsicas de compilador para expor o ILP 135

Suponha que saibamos que o destino do registrador da instruo DSUBU (R4) no


foi usado depois da instruo rotulada com skip (a propriedade que informa se um
valor ser usado por uma instruo vindoura chamada de liveness). Se R4 no fosse
utilizado, a mudana do valor de R4 imediatamente antes do desvio no afetaria o fluxo
de dados, pois R4 estaria morto (em vez de vivo) na regio do cdigo aps skip. Assim,
se R4 estivesse morto e a instruo DSUBU existente no pudesse gerar uma exceo
(outra alm daquelas das quais o processador retoma o processo), poderamos mover
a instruo DSUBU para antes do desvio, pois o fluxo de dados no poderia ser afetado
por essa mudana.
Se o desvio for tomado, a instruo DSUBU ser executada e no ter utilidade, mas
no afetar os resultados do programa. Esse tipo de escalonamento de cdigo tambm
uma forma de especulao, normalmente chamada de especulao de software, pois o
compilador est apostando no resultado do desvio; nesse caso, a aposta que o desvio
normalmente no tomado. O Apndice H discute mecanismos mais ambiciosos de es-
peculao do compilador. Normalmente ficar claro, quando dissermos especulao ou
especulativo, se o mecanismo um mecanismo de hardware ou software; quando isso
no for claro, melhor dizer especulao de hardware ou especulao de software.
A dependncia de controle preservada pela implementao da deteco de hazard de
controlar um stall de controle. Stalls de controle podem ser eliminados ou reduzidos por
diversas tcnicas de hardware e software, que examinaremos na Seo 3.3.

3.2 TCNICAS BSICAS DE COMPILADOR PARA EXPOR


O ILP
Esta seo examina o uso da tecnologia simples de compilao para melhorar a capacidade
de um processador de explorar o ILP. Essas tcnicas so cruciais para os processadores
que usam despacho esttico e escalonamento esttico. Armados com essa tecnologia de
compilao, examinaremos rapidamente o projeto e o desempenho de processadores
usando despacho esttico. O Apndice H investigar esquemas mais sofisticados de
compilao e hardware associado, projetados para permitir que um processador explore
mais o paralelismo em nvel de instruo.

Escalonamento bsico de pipeline e desdobramento de loop


Para manter um pipeline cheio, o paralelismo entre as instrues precisa ser explorado
encontrando-se sequncias de instrues no relacionadas que possam ser sobrepostas
no pipeline. Para evitar stall de pipeline, uma instruo dependente precisa ser separada
da instruo de origem por uma distncia em ciclos de clock igual latncia do pipeline
dessa instruo de origem. A capacidade de um compilador de realizar esse escalonamento
depende da quantidade de ILP disponvel no programa e das latncias das unidades
funcionais no pipeline. A Figura3.2 mostra as latncias da unidade de PF que conside-
ramos neste captulo, a menos que latncias diferentes sejam indicadas explicitamente.
Consideramos o pipeline de inteiros-padro de cinco estgios, de modo que os desvios
possuem um atraso de um ciclo de clock. Consideramos que as unidades funcionais so
totalmente pipelined ou replicadas (tantas vezes quanto for a profundidade do pipeline),
de modo que uma operao de qualquer tipo possa ser enviada em cada ciclo de clock e
no haja hazards estruturais.
Nesta subseo, examinaremos como o compilador pode aumentar a quantidade de
ILP disponvel transformando loops. Esse exemplo serve tanto para ilustrar uma tcnica
importante quanto para motivar as transformaes de programa mais poderosas, descritas
136 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

FIGURA 3.2 Latncias de operaes de PF usadas neste captulo.


A ltima coluna o nmero de ciclos de clock interferindo, necessrios para evitar um stall. Esses nmeros so
semelhantes s latncias mdias que veramos em uma unidade de PF. A latncia de um load de ponto flutuante para
um store 0, pois o resultado do load pode ser contornado sem protelar o store. Vamos continuar considerando uma
latncia de load de inteiros igual a 1 e uma latncia de operao da ALU igual a 0.

no Apndice H. Vamos nos basear no seguinte segmento de cdigo, que acrescenta um


valor escalar a um vetor:

Podemos ver que esse loop paralelo, observando que o corpo de cada iterao inde-
pendente. Formalizaremos essa noo no Apndice H, descrevendo como podemos testar
se as iteraes do loop so independentes no momento da compilao. Primeiro, vejamos
o desempenho desse loop, mostrando como podemos usar o paralelismo para melhorar
seu desempenho para um pipeline MIPS com as latncias indicadas antes.
O primeiro passo traduzir o segmento anterior para a linguagem assembly MIPS. No
segmento de cdigo a seguir, R1 inicialmente o endereo do elemento no array com o
endereo mais alto, e F2 contm o valor escalar s. O registrador R2 pr-calculado, de
modo que 8(R2) o endereo do ltimo elemento a ser processado.
O cdigo MIPS direto, no escalonado para o pipeline, se parece com este:

Vamos comear vendo como esse loop funcionar quando programado em um pipeline
simples para MIPS com as latncias da Figura3.2.

Exemplo Mostre como o loop ficaria no MIPS, escalonado e no escalonado, incluindo quais-
quer stalls ou ciclos de clock ociosos. Escalone para os atrasos das operaes de
ponto flutuante, mas lembre-se de que estamos ignorando os delayed branches.
Resposta Sem qualquer escalonamento, o loop ser executado da seguinte forma,
usando nove ciclos:
Ciclo de clock emitido
1
2
3
4
5
6
7
8
9
3.2 Tcnicas bsicas de compilador para expor o ILP 137

Podemos escalonar o loop para obter apenas dois stalls e reduzir o tempo
para sete ciclos:

Os stalls aps ADD.D so para uso do S.D.

No exemplo anterior, completamos uma iterao de loop e armazenamos um elemento


do array a cada sete ciclos de clock, mas o trabalho real de operar sobre o elemento do
array leva apenas trs (load, add e store) desses sete ciclos de clock. Os quatro ciclos de
clock restantes consistem em overhead do loop o DADDUI e o BNE e dois stalls.
Para eliminar esses quatro ciclos de clock, precisamos apanhar mais operaes relativas
ao nmero de instrues de overhead.

Um esquema simples para aumentar o nmero de instrues relativas s instrues de


desvio e overhead o desdobramento de loop. O desdobramento simplesmente replica o
corpo do loop vrias vezes, ajustando o cdigo de trmino do loop.

O desdobramento de loop tambm pode ser usado para melhorar o escalonamento.


Por eliminar o desvio, ele permite que instrues de diferentes iteraes sejam es-
calonadas juntas. Nesse caso, podemos eliminar os stalls de uso de dados criando
instrues independentes adicionais dentro do corpo do loop. Se simplesmente
replicssemos as instrues quando desdobrssemos o loop, o uso resultante dos
mesmos registradores poderia nos impedir de escalonar o loop com eficincia. Assim,
desejaremos usar diferentes registradores para cada iterao, aumentando o nmero
de registradores exigidos.

Exemplo Mostre nosso loop desdobrado de modo que haja quatro cpias do corpo do
loop, considerando que R1 R2 (ou seja, o tamanho do array) inicialmente
um mltiplo de 32, o que significa que o nmero de iteraes do loop um
mltiplo de 4. Elimine quaisquer clculos obviamente redundantes e no
reutilize qualquer um dos registradores.
Resposta Aqui est o resultado depois de mesclar as instrues DADDUI e remover as
operaes BNE desnecessrias que so duplicadas durante o desdobramento.
Observe que agora R2 precisa ser definido de modo que 32(R2) seja o endereo
inicial dos quatro ltimos elementos.
138 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

Eliminamos trs desvios e trs decrementos de R1. Os endereos nos loads


e stores foram compensados para permitir que as instrues DADDUI em
R1 sejam mescladas. Essa otimizao pode parecer trivial, mas no ; ela
exige substituio simblica e simplificao. A substituio simblica e a
simplificao rearrumaro expresses de modo a permitir que constantes
sejam reduzidas, possibilitando que uma expresso como ((i + 1) + 1) seja
reescrita como (i + (1 + 1)) e depois simplificada para (i + 2). Veremos as
formas mais gerais dessas otimizaes que eliminam clculos dependentes
no Apndice H.
Sem o escalonamento, cada operao no loop desdobrado seguida por uma
operao dependente e, assim, causar um stall. Esse loop ser executado em
27 ciclos de clock cada LD tem um stall, cada ADDD tem dois, o DADDUI
tem um mais 14 ciclos de despacho de instruo ou 6,75 ciclos de clock para
cada um dos quatro elementos, mas ele pode ser escalonado para melhorar
significativamente o desempenho. O desdobramento do loop normalmente
feito antes do processo de compilao, de modo que clculos redundantes
podem ser expostos e eliminados pelo otimizador.

Em programas reais, normalmente no sabemos o limite superior no loop. Suponha que


ele seja n e que gostaramos de desdobrar o loop para criar k cpias do corpo. Em vez de
um nico loop desdobrado, geramos um par de loops consecutivos. O primeiro executa
(n mod k) vezes e tem um corpo que o loop original. O segundo o corpo desdobrado,
cercado por um loop externo que repete (n/k) vezes (como veremos no Captulo4, essa
tcnica similar a uma tcnica chamada strip mining, usada em compiladores para proces-
sadores vetoriais). Para valores grandes de n, a maior parte do tempo de execuo ser
gasta no corpo do loop desdobrado.
No exemplo anterior, o desdobramento melhora o desempenho desse loop, eliminando
as instrues de overhead, embora aumente o tamanho do cdigo substancialmente.
Como o loop desdobrado funcionar quando for escalonado para o pipeline descrito
anteriormente?

Exemplo Mostre o loop desdobrado no exemplo anterior aps ter sido escalonado para
o pipeline com as latncias mostradas na Figura3.2.
Resposta

O tempo de execuo do loop caiu para um total de 14 ciclos de clock ou 3,5


ciclos de clock por elemento, em comparao com os nove ciclos por elemento
antes de qualquer desdobramento ou escalonamento e sete ciclos quando
escalonado, mas no desdobrado.

O ganho vindo do escalonamento no loop desdobrado ainda maior que no loop original.
Esse aumento surge porque o desdobramento do loop expe mais computao que pode
ser escalonada para minimizar os stalls; o cdigo anterior no possui stalls. Dessa forma, o
3.2 Tcnicas bsicas de compilador para expor o ILP 139

escalonamento do loop necessita da observao de que os loads e stores so independentes


e podem ser trocados.

Resumo do desdobramento e escalonamento de loop


No decorrer deste captulo e no Apndice H, veremos uma srie de tcnicas de hardware
e software que nos permitiro tirar proveito do paralelismo em nvel de instruo para
utilizar totalmente o potencial das unidades funcionais em um processador. A chave para
a maioria dessas tcnicas saber quando e como a ordenao entre as instrues pode ser
alterada. No nosso exemplo, fizemos muitas dessas mudanas, que, para ns, como seres
humanos, eram obviamente permissveis. Na prtica, esse processo precisa ser realizado
em um padro metdico, seja por um compilador, seja pelo hardware. Para obter o cdigo
desdobrado final, tivemos de tomar as seguintes decises e transformaes:
j Determinar que o desdobramento do loop seria til descobrindo que as iteraes
do loop eram independentes, exceto para o cdigo de manuteno do loop.
j Usar diferentes registradores para evitar restries desnecessrias que seriam
foradas pelo uso dos mesmos registradores para diferentes clculos.
j Eliminar as instrues extras de teste e desvio, e ajustar o cdigo de trmino
e iterao do loop.
j Determinar que os loads e stores no loop desdobrado podem ser trocados,
observando que os loads e stores de diferentes iteraes so independentes. Essa
transformao requer analisar os endereos de memria e descobrir que eles no
se referem ao mesmo endereo.
j Escalonar o cdigo preservando quaisquer dependncias necessrias para gerar
o mesmo resultado do cdigo original.
O requisito-chave por trs de todas essas transformaes o conhecimento de como uma
instruo depende de outra e como as instrues podem ser alteradas ou reordenadas
dadas as dependncias.
Existem trs tipos de limite diferentes para os ganhos que podem ser alcanados pelo
desdobramento do loop: 1) diminuio na quantidade de overhead amortizado com
cada desdobramento; 2) limitaes de tamanho de cdigo e 3) limitaes do compilador.
Vamos considerar primeiro a questo do overhead do loop. Quando desdobramos o loop
quatro vezes, ele gerou paralelismo suficiente entre as instrues em que o loop poderia
ser escalonado sem ciclos de stall. De fato, em 14 ciclos de clock, somente dois ciclos
foram overhead do loop: o DADDUI, que mantm o valor de ndice, e o BNE, que termina
o loop. Se o loop for desdobrado oito vezes, o overhead ser reduzido de 1/2 ciclo por
iterao original para 1/4.
Um segundo limite para o desdobramento o consequente crescimento no tamanho do
cdigo. Para loops maiores, o crescimento no tamanho do cdigo pode ser um problema,
particularmente se causar aumento na taxa de falha da cache de instrues.
Outro fator normalmente mais importante que o tamanho do cdigo o dficit em
potencial de registradores, que criado pelo desdobramento e pelo escalonamento agres-
sivo. Esse efeito secundrio que resulta do escalonamento de instrues em segmentos
de cdigo grandes chamado presso de registradores. Ele surge porque escalonar o cdigo
para aumentar o ILP faz com que o nmero de valores vivos seja aumentado. Talvez
depois do escalonamento de instruo agressivo no seja possvel alocar todos os valores
vivos aos registradores. O cdigo transformado, embora teoricamente mais rpido, pode
perder parte de sua vantagem ou toda ela, pois gera uma escassez de registradores. Sem
desdobramento, o escalonamento agressivo suficientemente limitado pelos desvios, de
140 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

modo que a presso de registradores raramente um problema. Entretanto, a combinao


de desdobramento e escalonamento agressivo pode causar esse problema. O problema
se torna especialmente desafiador nos processadores de mltiplo despacho, que exigem
a exposio de mais sequncias de instrues independentes, cuja execuo pode ser
sobreposta. Em geral, o uso de transformaes de alto nvel sofisticadas, cujas melhorias
em potencial so difceis de medir antes da gerao de cdigo detalhada, levou a aumentos
significativos na complexidade dos compiladores modernos.
O desdobramento de loop um mtodo simples, porm til, para aumentar o tamanho
dos fragmentos de cdigo direto que podem ser escalonados com eficincia. Essa trans-
formao til em diversos processadores, desde pipelines simples, como aqueles que
examinamos at aqui, at os superescalares e VLIWs de mltiplo despacho, explorados
mais adiante neste captulo.

3.3 REDUO DE CUSTOS COM PREVISO DE DESVIO


AVANADO
Devido necessidade de forar as dependncias de controle por meio dos hazards de dados
e stalls, os desvios atrapalharo o desempenho do pipeline. O desdobramento de loop
uma forma de reduzir o nmero de hazards de desvio; tambm podemos reduzir as perdas
de desempenho prevendo como elas se comportaro. O comportamento dos desvios pode
ser previsto estaticamente no momento da compilao e dinamicamente pelo hardware
no momento da execuo. As previses de desvio esttico s vezes so usadas nos proces-
sadores em que a expectativa de que o comportamento do desvio seja altamente previsvel
no momento da compilao; a previso esttica tambm pode ser usada para auxiliar na
previso dinmica.

Correlacionando esquemas de previso de desvio


Os esquemas de previso de 2 bits utilizam apenas o comportamento recente de um nico
desvio para prever o comportamento futuro desse desvio. Talvez seja possvel melhorar a
exatido da previso se tambm virmos o comportamento recente dos outros desvios em vez
de vermos apenas o desvio que estamos tentando prever. Considere um pequeno fragmento
de cdigo, do benchmark eqntott, um membro dos primeiros pacotes de benchmark SPEC
que exibiam comportamento de previso de desvio particularmente ruins:

Aqui est o cdigo MIPS que normalmente geraramos para esse fragmento de cdigo,
considerando que aa e bb so atribudos aos registradores R1 e R2:

Vamos rotular esses desvios como b1, b2 e b3. A principal observao que o comporta-
mento do desvio b3 correlacionado com o comportamento dos desvios b1 e b2. Obvia-
mente, se os desvios b1 e b2 no forem tomados (ou seja, se as condies forem avaliadas
3.3 Reduo de custos com previso de desvio avanado 141

como verdadeira e aa e bb receberem o valor 0), ento b3 ser tomado, pois aa e bb so


nitidamente iguais. Um esquema de previso que utiliza o comportamento de um nico
desvio para prever o resultado desse desvio nunca poder capturar esse comportamento.
Os esquemas de previso de desvio que usam o comportamento de outros desvios para fazer
uma previso so chamados previsores de correlao ou previsores de dois nveis. Os previsores
de correlao existentes acrescentam informaes sobre o comportamento da maioria dos
desvios recentes para decidir como prever determinado desvio. Por exemplo, um esquema
de previso (1,2) utiliza o comportamento do ltimo desvio para escolher dentre um par de
previsores de desvio de 2 bits na previso de determinado desvio. No caso geral, um esquema
de previso (m,n) utiliza o comportamento dos ltimos m desvios para escolher dentre 2m
previsores de desvio, cada qual sendo um previsor de n bits para um nico desvio. A atrao
desse tipo de previsor de desvio de correlao que ele pode gerar taxas de previso mais altas
do que o esquema de 2 bits e exige apenas uma quantidade trivial de hardware adicional.
A simplicidade do hardware vem de uma observao simples: a histria global dos m des-
vios mais recentes pode ser registrada em um registrador de desvio de m bits, onde cada
bit registra se o desvio foi tomado ou no. O buffer de previso de desvio pode, ento, ser
indexado usando uma concatenao dos bits de baixa ordem a partir do endereo de desvio
com um histrico global de m bits. Por exemplo, em um buffer (2,2) com 64 entradas no
total, os 4 bits de endereo de baixa ordem do desvio (endereo de palavra) e os 2 bits
globais representando o comportamento dos dois desvios executados mais recentemente
formam um ndice de 6 bits que pode ser usado para indexar os 64 contadores.
Quo melhor os previsores de desvio de correlao funcionam quando comparados
com o esquema-padro de 2 bits? Para compar-los de forma justa, temos de comparar
os previsores que utilizam o mesmo nmero de bits de status. O nmero de bits em um
previsor de (m,n)

2m n Nmero de entradas de previso selecionadas pelo endereo de desvio

Um esquema de previso de 2 bits sem histrico global simplesmente um previsor (0,2).

Exemplo Quantos bits existem no previsor de desvio (0,2) com 4 K entradas? Quantas
entradas existem em um previsor (2,2) com o mesmo nmero de bits?
Resposta O previsor com 4K entradas possui
20 2 4 K = 8K bits

Quantas entradas selecionadas de desvio existem em um previsor (2,2) que


tem um total de 8K bits no buffer de previso? Sabemos que
22 2 Nmerodeentradasde previsoselecionadaspelodesvio = 8K

Logo, o nmero de entradas de previso selecionadas pelo desvio=1K.

A Figura3.3 compara as taxas de erro de previso do previsor anterior (0,2) com 4K


entradas e um previsor (2,2) com 1K entrada. Como voc pode ver, esse previsor de
correlao no apenas ultrapassa o desempenho de um previsor simples de 2 bits com o
mesmo nmero total de bits de status, mas normalmente superior a um previsor de 2
bits com um nmero ilimitado de entradas.

Previsores de torneio: combinando previsores locais e globais


adaptativamente
A principal motivao para correlacionar previsores de desvio veio da observao de que
o previsor de 2 bits padro usando apenas informaes locais falhou em alguns desvios
142 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

FIGURA 3.3 Comparao de previsores de 2 bits.


Primeiro previsor no correlacionado para 4.096 bits, seguido por um previsor no correlacionado de 2 bits com
entradas ilimitadas e um previsor de 2 bits com 2 bits de histrico global e um total de 1.024 entradas. Embora
esses dados sejam para uma verso mais antiga de SPEC, dados para benchmarks SPEC mais recentes mostrariam
diferenas similares em preciso.

importantes e que, acrescentando informaes globais, esse desempenho poderia ser me-
lhorado. Os previsores de torneio levam essa compreenso para o prximo nvel, usando
vrios previsores, normalmente um baseado em informaes globais e outro em informa-
es locais, e combinando-os com um seletor. Os previsores de torneio podem conseguir
melhor exatido em tamanhos mdios (8-32K bits) e tambm utilizar nmeros muito
grandes de bits de previso com eficincia. Os previsores de torneio existentes utilizam um
contador de saturao de 2 bits por desvio para escolher entre dois previsores diferentes
com base em qual previsor (local, global ou at mesmo alguma mistura) foi mais eficaz
nas previses recentes. Assim como no previsor de 2 bits simples, o contador de saturao
requer dois erros de previso antes de alterar a identidade do previsor preferido.
A vantagem de um previsor de torneio a sua capacidade de selecionar o previsor certo
para determinado desvio, o que particularmente crucial para os benchmarks de inteiros.
Um previsor de torneio tpico selecionar o previsor global em quase 40% do tempo para
os benchmarks de inteiros SPEC e em menos de 15% do tempo para os benchmarks de
PF SPEC. Alm dos processadores Alpha, que foram pioneiros dos previsores de torneio,
processadores AMD recentes, incluindo o Opteron e o Phenom, vm usando previsores
no estilo previsor de torneio.
A Figura3.4 examina o desempenho de trs previsores diferentes (um previsor local de
2 bits, um de correlao e um de torneio) para diferentes quantidades de bits usando
o SPEC89 como benchmark. Como vimos anteriormente, a capacidade de previso do
3.3 Reduo de custos com previso de desvio avanado 143

FIGURA 3.4 Taxa de erro de previso para trs previsores diferentes no SPEC89 medida que o nmero
total de bits aumentado.
Os previsores so um previsor de 2 bits local, um previsor de correlao, que idealmente estruturado em seu uso de
informaes globais e locais em cada ponto no grfico, e um previsor de torneio. Embora esses dados sejam para uma
verso mais antiga do SPEC, os dados para benchmarks SPEC mais recentes mostrariam comportamento semelhante,
talvez convergindo para o limite assinttico em tamanhos de previsores ligeiramente maiores.

previsor local no melhora alm de certo tamanho. O previsor de correlao mostra


uma melhoria significativa, e o previsor de torneio gera um desempenho ligeiramente
melhor. Para verses mais recentes do SPEC, os resultados seriam semelhantes, mas o
comportamento assintomtico no seria alcanado at que houvesse previsores de tama-
nho ligeiramente maior.
O previsor local consiste em um previsor de dois nveis. O nvel superior uma tabela de
histrico consistindo em 1.024 entradas de 10 bits; cada entrada de 10 bits corresponde
aos 10 resultados de desvio mais recentes para a entrada. Ou seja, se o desvio foi tomado
10 ou mais vezes seguidas em uma linha, a entrada na tabela local de histrico, sero
todos 1s. Se o desvio for alternadamente tomado e no tomado, a entrada no histrico
consistir em 0s e 1s alternados. Esse histrico de 10 bits permite que padres de at 10
desvios sejam descobertos e previstos. A entrada selecionada da tabela de histrico local
usada para indexar uma tabela de 1K entradas consistindo em contadores de saturao
de 3 bits, que oferecem a previso local. Essa combinao, que usa um total de 29K bits,
leva a alta preciso na previso do desvio.

O previsor de desvio Intel Core i7


A Intel liberou somente informaes limitadas sobre o previsor de desvio do Core i7,
que se baseia em previsores anteriores usados no chip Core Duo. O i7 usa um previsor
de dois nveis que tem um previsor menor de primeiro nvel, projetado para atender s
restries de ciclo de previso de um desvio a cada ciclo de clock, e um previsor maior
de segundo nvel como backup. Cada previsor combina trs previsores diferentes: 1) um
previsor simples de dois bits, que foi apresentado no Apndice C (e usado no previsor
de torneio discutido anteriormente); 2) um previsor de histrico global, como aqueles
que acabamos de ver; e 3) um previsor de sada de loop. O previsor de sada de loop
usa um contador para prever o nmero exato de desvios tomados (que o nmero de
iteraes de loop) para um desvio que detectado como um desvio de loop. Para cada
144 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

FIGURA 3.5 A taxa de erro de previso para 19 dos benchmarks SPEC CPU2006 em comparao com o
nmero de desvios removidos com sucesso em mdia para os benchmarks inteiros para PF (4% versus 3%).
O mais importante que ela muito mais alta para poucos benchmarks.

desvio, a melhor previso selecionada entre os trs previsores rastreando a preciso de


cada previso, como um previsor de torneio. Alm desse previsor multinvel principal,
uma unidade separada prev endereos-alvo para desvios indiretos e usada tambm uma
pilha para prever endereos de retorno.
Como em outros casos, a especulao cria alguns desafios na avaliao do previsor, uma
vez que um desvio previsto de modo incorreto pode facilmente levar a busca e inter-
pretao incorretas de outro desvio. Para manter a simplicidade, examinamos o nmero
de previses incorretas como uma porcentagem do nmero de desvios completados
com sucesso (aqueles que no foram resultado de especulao incorreta). A Figura3.5
mostra esses dados para 19 dos benchmarks SPEC CPU2006. Esses benchmarks so
consideravelmente maiores do que o SPEC89 ou o SPEC2000, implicando que as taxas
de previso incorreta sejam ligeiramente maiores do que aquelas na Figura3.4, mesmo
com uma combinao mais elaborada de previsores. Uma vez que a previso incorreta de
desvios leva especulao ineficaz, ela contribui para o trabalho perdido, como veremos
mais adiante neste captulo.

3.4 CONTORNANDO HAZARDS DE DADOS


COM O ESCALONAMENTO DINMICO
Um pipeline simples escalonado estaticamente carrega uma instruo e a envia, a menos
que haja uma dependncia de dados entre uma instruo j no pipeline e a instruo
carregada, que no pode ser escondida com o bypassing ou o encaminhamento (a lgica
de encaminhamento reduz a latncia efetiva do pipeline, de modo que certas dependncias
no resultam em hazards). Se houver uma dependncia de dados que no possa ser es-
condida, o hardware de deteco de hazard forar um stall no pipeline, comeando com
a instruo que usa o resultado. Nenhuma instruo nova carregada ou enviada at que
a dependncia seja resolvida.
3.4 Contornando hazards de dados com o escalonamento dinmico 145

Nesta seo, exploramos o escalonamento dinmico, em que o hardware reorganiza a


execuo da instruo para reduzir os stalls enquanto mantm o fluxo de dados e o
comportamento da exceo. O escalonamento dinmico oferece diversas vantagens:
ele permite o tratamento de alguns casos quando as dependncias so desconhecidas
durante a compilao (p.ex., podem envolver uma referncia memria) e simplifica
o compilador. E, talvez, o mais importante: ele permite que o processador tolere atrasos
imprevistos, como falhas de cache, executando outro cdigo enquanto espera que a
falha seja resolvida. Quase to importante, o escalonamento dinmico permite que o
cdigo compilado com um pipeline em mente seja executado de forma eficiente em um
pipeline diferente. Na Seo 3.6, exploraremos a especulao de hardware, uma tcnica
com vantagens significativas no desempenho, que baseada no escalonamento dinmico.
Conforme veremos, as vantagens do escalonamento dinmico so obtidas custa de um
aumento significativo na complexidade do hardware.
Embora um processador dinamicamente escalonado no possa mudar o fluxo de dados,
ele tenta evitar os stalls quando as dependncias esto presentes. Ao contrrio, o escalona-
mento esttico do pipeline pelo compilador (explicado na Seo3.2) tenta minimizar os
stalls separando instrues dependentes de modo que no levem a hazards. Naturalmente,
o escalonamento de pipeline do compilador tambm pode ser usado no cdigo destinado
a executar em um processador com um pipeline escalonado dinamicamente.

Escalonamento dinmico: a ideia


Uma limitao importante das tcnicas de pipelining simples que elas utilizam o des-
pacho e a execuo de instrues em ordem: as instrues so enviadas na ordem do
programa e, se uma instruo for protelada no pipeline, nenhuma instruo posterior
poder prosseguir. Assim, se houver uma dependncia entre duas instrues prximas no
pipeline, isso levar a um hazard e ocorrer um stall. Se houver vrias unidades funcionais,
essas unidades podero ficar ociosas. Se a instruo j depender de uma instruo de longa
execuo i, em execuo no pipeline, ento todas as instrues depois de j precisaro ser
proteladas at que i termine e j possa ser executada. Por exemplo, considere este cdigo:

A instruo SUB.D no pode ser executada, porque a dependncia de ADD.D em DIV.D


faz com que o pipeline fique em stall; mesmo assim, SUB.D no dependente de dados
de qualquer coisa no pipeline. Esse hazard cria uma limitao de desempenho que pode
ser eliminada por no exigir que as instrues sejam executadas na ordem do programa.
No pipeline clssico em cinco estgios, os hazards estruturais e de dados poderiam ser
verificados durante a decodificao da instruo (ID): quando uma instruo pudesse ser
executada sem hazards, ela seria enviada pela ID sabendo que todos os hazards de dados
foram resolvidos.
Para que possamos comear a executar o SUB.D no exemplo anterior, temos de dividir o
processo em duas partes: verificar quaisquer hazards estruturais e esperar pela ausncia de
um hazard de dados. Ainda assim usamos o despacho de instrues na ordem (ou seja,
instrues enviadas na ordem do programa), mas queremos que uma instruo comece
sua execuo assim que seus operandos de dados estiverem disponveis. Esse pipeline
realiza a execuo fora de ordem, que implica em trmino fora de ordem.
A execuo fora de ordem introduz a possibilidade de hazards WAR e WAW, que no
existem no pipeline de inteiros de cinco estgios, e sua extenso lgica a um pipeline de
146 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

ponto flutuante em ordem. Considere a sequncia de cdigos de ponto flutuante MIPS


a seguir:

Existe uma antidependncia entre o ADD.D e o SUB.D e, se o pipeline executar o SUB.D


antes do ADD.D (que est esperando por DIV.D), ele violar a antidependncia, gerando
um hazard WAR. De modo semelhante, para evitar violar as dependncias de sada, como
a escrita de F6 por MUL.D, os hazards WAW precisam ser tratados. Conforme veremos,
esses dois hazards so evitados pelo uso da renomeao de registradores.
O trmino fora de ordem tambm cria complicaes importantes no tratamento de
excees. O escalonamento dinmico com o trmino fora de ordem precisa preservar o
comportamento da exceo no sentido de que exatamente as excees que surgiriam se o
programa fosse executado na ordem estrita do programa realmente surjam. Processadores
escalonados dinamicamente preservam o comportamento de exceo garantindo que
nenhuma instruo possa gerar uma exceo at que o processador saiba que a instruo
que levanta a exceo ser executada; veremos brevemente como essa propriedade pode
ser garantida.
Embora o comportamento de exceo tenha de ser preservado, os processadores es-
calonados dinamicamente podem gerar excees imprecisas. Uma exceo imprecisa se
o estado do processador quando uma exceo for levantada no se parecer exatamente
como se as instrues fossem executadas sequencialmente na ordem estrita do programa.
Excees imprecisas podem ocorrer devido a duas possibilidades:
1. O pipeline pode ter instrues j completadas, que esto mais adiante na ordem do
programa do que a instruo que causa a exceo.
2. O pipeline pode ainda no ter completado algumas instrues, que esto mais atrs na
ordem do programa do que a instruo que causa a exceo.
As excees imprecisas dificultam o reincio da execuo aps uma exceo. Em vez de
resolver esses problemas nesta seo, discutiremos na Seo3.6 uma soluo que oferece
excees precisas no contexto de um processador com especulao. Para excees de ponto
flutuante, outras solues foram usadas, conforme discutiremos no Apndice J.
Para permitir a execuo fora de ordem, basicamente dividimos o estgio ID do nosso
pipeline simples de cinco estgios em dois estgios:
1. Despacho. Decodificar instrues, verificar hazards estruturais.
2. Leitura de operandos. Esperar at que no haja hazards de dados, depois ler
operandos.
Um estgio de load de instruo precede o estgio de despacho e pode carregar tanto de
um registrador de instruo quanto de uma fila de instrues pendentes; as instrues so
ento enviadas a partir do registrador ou da fila. O estgio EX segue o estgio de leitura
de operandos, assim como no pipeline de cinco estgios. A execuo pode levar vrios
ciclos, dependendo da operao.
Distinguimos quando uma instruo inicia a execuo e quando ela termina a execuo;
entre os dois momentos, a instruo est em execuo. Nosso pipeline permite que vrias
instrues estejam em execuo ao mesmo tempo e, sem essa capacidade, uma vantagem
importante do escalonamento dinmico perdida. Ter vrias instrues em execuo ao
mesmo tempo exige vrias unidades funcionais, unidades funcionais pipelined ou ambas.
3.4 Contornando hazards de dados com o escalonamento dinmico 147

Como essas duas capacidades unidades funcionais pipelined e mltiplas unidades


funcionais so essencialmente equivalentes para fins de controle de pipeline, vamos
considerar que o processador tem vrias unidades funcionais.
Em um pipeline escalonado dinamicamente, todas as instrues passam de maneira
ordenada pelo estgio de despacho (despacho na ordem); porm, elas podem ser pro-
teladas ou contornadas entre si no segundo estgio (leitura de operandos) e, assim,
entrar na execuo fora de ordem. O scoreboarding uma tcnica para permitir que as ins-
trues sejam executadas fora de ordem quando houver recursos suficientes e nenhuma
dependncia de dados; recebu esse nome aps o CDC 6600 scoreboard, que desenvolveu
essa capacidade, e ns a discutiremos no Apndice A. Aqui, enfocamos uma tcnica mais
sofisticada, chamada algoritmo de Tomasulo, que apresenta vrias melhorias importantes em
relao ao scoreboarding. Adicionalmente, o algoritmo de Tomasulo pode ser estendido
para lidar com especulao, uma tcnica para reduzir o efeito das dependncias de controle
prevendo o resultado de um desvio, executando instrues no endereo de destino previsto
e realizando aes de previso quando a previso estiver incorreta. Embora provavelmente
o uso de scoreboarding seja suficiente para suportar um superescalar simples de dois nveis
como o ARM A8, um processador mais agressivo, como o Intel i7 de quatro despachos,
se beneficia do uso da execuo fora de ordem.

Escalonamento dinmico usando a tcnica de Tomasulo


A unidade de ponto flutuante IBM 360/91 usava um esquema sofisticado para permitir a
execuo fora de ordem. Esse esquema, inventado por Robert Tomasulo, verifica quando
os operandos para as instrues esto disponveis, para minimizar os hazards RAW e in-
troduz a renomeao de registrador para minimizar os hazards WAW e WAR. Nos proces-
sadores modernos existem muitas variaes desse esquema, embora os principais conceitos
do rastreamento de dependncia de instruo para permitir a execuo assim que os
operandos estiverem disponveis e a renomeao de registradores para evitar os hazards
WAR e WAW sejam caractersticas comuns.
O objetivo da IBM foi conseguir alto desempenho de ponto flutuante a partir de um
conjunto de instrues e de compiladores projetados para toda a famlia de computadores
360, em vez de compiladores especializados para os processadores de ponta. A arquitetura
360 tinha apenas quatro registradores de ponto flutuante de preciso dupla, o que limita
a eficcia do escalonamento do compilador; esse fato foi outra motivao para a tcnica
de Tomasulo. Alm disso, o IBM 360/91 tinha longos acessos memria e longos atrasos
de ponto flutuante, o que o algoritmo de Tomasulo foi projetado para contornar. Ao final
desta seo, veremos que o algoritmo de Tomasulo tambm pode admitir a execuo
sobreposta de vrias iteraes de um loop.
Explicamos o algoritmo, que enfoca a unidade de ponto flutuante e a unidade de load-sto-
re, no contexto do conjunto de instrues do MIPS. A principal diferena entre o MIPS
e o 360 a presena das instrues registrador-memria na segunda arquitetura. Como
o algoritmo de Tomasulo utiliza uma unidade funcional de load, nenhuma mudana
significativa necessria para acrescentar os modos de endereamento registrador-me-
mria. O IBM 360/91 tambm tinha unidades funcionais pipelined, em vez de mltiplas
unidades funcionais, mas descrevemos o algoritmo como se houvesse mltiplas unidades
funcionais. Essa uma extenso conceitual simples para tambm utilizar o pipeline nessas
unidades funcionais.
Conforme veremos, os hazards RAW so evitados executando-se uma instruo apenas
quando seus operandos estiverem disponveis. Hazards WAR e WAW, que surgem das
dependncias de nomes, so eliminados pela renomeao de registrador. A renomeao
148 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

de registradores elimina esses hazards renomeando todos os registradores de destino,


incluindo aqueles com leitura ou escrita pendente de uma instruo anterior, de modo
que a escrita fora de ordem no afeta quaisquer instrues que dependam de um valor
anterior de um operando.
Para entender melhor como a renomeao de registradores elimina os hazards WAR e
WAW, considere o exemplo de sequncia de cdigo a seguir, que inclui um hazard WAR
e um WAW em potencial:

Existe uma antidependncia entre o ADD.D e o SUB.D e uma dependncia de sada entre
o ADD.D e o MUL.D, levando a dois hazards possveis, um hazard WAR no uso de F8
por ADD.D e um hazard WAW, pois o ADD.D pode terminar depois do MUL.D. Tambm
existem trs dependncias de dados verdadeiras: entre o DIV.D e o ADD.D, entre o SUB.D
e o MUL.D, e entre o ADD.D e o S.D.
Essas duas dependncias de nome podem ser eliminadas pela renomeao de registrador.
Para simplificar, considere a existncia de dois registradores temporrios, S e T. Usando S
e T, a sequncia pode ser reescrita sem quaisquer dependncias como:

Alm disso, quaisquer usos subsequentes de F8 precisam ser substitudos pelo registrador
T. Nesse segmento de cdigo, o processo de renomeao pode ser feito estaticamente pelo
compilador. A descoberta de quaisquer usos de F8 que estejam mais adiante no cdigo
exige anlise sofisticada do compilador ou suporte do hardware, pois podem existir des-
vios entre o segmento de cdigo anterior e um uso posterior de F8. Conforme veremos,
o algoritmo de Tomasulo pode lidar com a renomeao entre desvios.
No esquema de Tomasulo, a renomeao de registrador fornecida por estaes de reserva,
que colocam em buffer os operandos das instrues esperando para serem enviadas. A
ideia bsica que uma estao de reserva apanhe e coloque um operando em um buffer
assim que ele estiver disponvel, eliminando a necessidade de carregar o operando de um
registrador. Alm disso, instrues pendentes designam a estao de reserva que fornecer
seu suporte. Finalmente, quando escritas sucessivas em um registrador forem superpostas
na execuo, somente a ltima ser realmente utilizada para atualizar o registrador.
medida que as instrues forem enviadas, os especificadores de registrador para operandos
pendentes sero trocados para os nomes da estao de reserva, que oferecer renomeao
de registrador.
Como pode haver mais estaes de reserva do que registradores reais, a tcnica pode
at mesmo eliminar hazards que surgem das dependncias de nome que no poderiam
ser eliminadas por um compilador. medida que explorarmos os componentes do es-
quema de Tomasulo, retornaremos ao tpico de renomeao de registradores e veremos
exatamente como ocorre a renomeao e como ela elimina os hazards WAR e WAW.
O uso de estaes de reserva, em vez de um banco de registradores centralizado, leva a
duas outras propriedades importantes: 1) a deteco de hazard e o controle de execuo
3.4 Contornando hazards de dados com o escalonamento dinmico 149

so distribudos: a informao mantida nas estaes de reserva em cada unidade funcional


determina quando uma instruo pode iniciar a execuo nessa unidade; 2) os resultados
so passados diretamente para as unidades funcionais a partir das estaes de reserva,
onde so mantidos em buffer em vez de passarem pelos registradores. Esse bypass feito
com um barramento de resultados comum, que permite que todas as unidades esperando
por um operando sejam carregadas simultaneamente (no 360/91, isso chamado de
barramento de dados comum ou CDB). Em pipelines com mltiplas unidades de execuo e
enviando mltiplas instrues por clock, ser necessrio o uso de mais de um barramento
de resultados.
A Figura3.6 mostra a estrutura bsica de um processador baseado em Tomasulo, incluindo
a unidade de ponto flutuante e a unidade de load-store; nenhuma das tabelas do controle
de execuo aparece. Cada estao de reserva mantm uma instruo que foi enviada e
est esperando a execuo em uma unidade funcional e outros valores operando para essa
instruo, se j tiverem sido calculados, ou ento os nomes das estaes de reserva que
oferecero os valores de operando.

FIGURA 3.6 Estrutura bsica de uma unidade de ponto flutuante MIPS usando o algoritmo de Tomasulo.
As instrues so enviadas da unidade de instruo para a fila de instrues, da qual so enviadas na ordem FIFO.
As estaes de reserva incluem a operao e os operandos reais, alm das informaes usadas para detectar e
resolver hazards. Buffers de load possuem trs funes: manter os componentes do endereo efetivo at que ele seja
calculado, rastrear loads pendentes que esto aguardando na memria e manter os resultados dos loads completados
que esto esperando pelo CDB. De modo semelhante, os buffers de store possuem trs funes: 1) manter os
componentes do endereo efetivo at que ele seja calculado; 2) manter os endereos de memria de destino dos
stores pendentes que esto aguardando pelo valor de dado para armazenar; e 3) manter o endereo e o valor a
armazenar at que a unidade de memria esteja disponvel. Todos os resultados das unidades de PF ou da unidade
de load so colocados no CDB, que vai para o banco de registradoreses de PF e tambm para as estaes de reserva
e buffers de store. Os somadores de PF implementam adio e subtrao, e os multiplicadores de PF realizam a
multiplicao e a diviso.
150 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

Os buffers de load e os buffers de store mantm dados ou endereos vindo e indo para
a memria, comportando-se quase exatamente como estaes de reserva, de modo que
os distinguimos somente quando necessrio. Os registradores de ponto flutuante esto
conectados por um par de barramentos para as unidades funcionais e por um nico
barramento para os buffers de store. Todos os resultados das unidades funcionais e da
memria so enviados no barramento de dados comum, que vai para toda parte, exceto
para o buffer de load. Todas as estaes de reserva possuem campos de tag, empregados
pelo controle do pipeline.

Antes de descrevermos os detalhes das estaes de reserva e do algoritmo, vejamos as etapas


pelas quais uma instruo passa. Existem apenas trs etapas, embora cada uma possa usar
um nmero arbitrrio de ciclos de clock:

1. Despacho. Carregue a prxima instruo do incio da fila de instruo, que mantida


na ordem FIFO para garantir a manuteno do fluxo de dados correto. Se houver
determinada estao de reserva que esteja vazia, a instruo ser enviada para a
estao com os valores de operando, se estiverem nos registradores. Se no houver
uma estao de reserva vazia, haver um hazard estrutural, e a instruo ficar em
stall at que uma estao ou um buffer seja liberado. Se os operandos no estiverem
nos registradores, registre as unidades funcionais que produziro os operandos. Essa
etapa renomeia registradores, eliminando os hazards WAR e WAW. (Esse estgio, s
vezes, chamado de despacho em um processador com escalonamento dinmico.)
2. Execuo. Se um ou mais operandos ainda no estiver disponvel, monitore o
barramento de dados comum enquanto espera que ele seja calculado. Quando um
operando estiver disponvel, ele ser colocado em qualquer estao de reserva que
o esperar. Quando todos os operandos estiverem disponveis, a operao poder ser
executada na unidade funcional correspondente. Adiando a execuo da instruo
at que os operandos estejam disponveis, os hazards RAW sero evitados. (Alguns
processadores com escalonamento dinmico chamam essa etapa de despacho,
mas usamos o termo execuo, que foi usado no primeiro processador com
escalonamento dinmico, o CDC 6600.)

Observe que vrias instrues poderiam ficar prontas no mesmo ciclo de clock para
a mesma unidade funcional. Embora as unidades funcionais independentes possam
iniciar a execuo no mesmo ciclo de clock para diferentes instrues, se mais de uma
instruo estiver pronta para uma nica unidade funcional a unidade ter de escolher
entre elas. Para as estaes de reserva de ponto flutuante, essa escolha pode ser feita
arbitrariamente; porm, loads e stores apresentam uma complicao adicional.

Loads e stores exigem um processo de execuo em duas etapas. A primeira etapa


calcula o endereo efetivo quando o registrador de base estiver disponvel, e ento o
endereo efetivo colocado no buffer de load ou store. Loads no buffer de load so
executados assim que a unidade de memria est disponvel. Stores no buffer de store
esperam pelo valor a ser armazenado antes de serem enviados unidade de memria.
Loads e stores so mantidos na ordem do programa por meio do clculo do endereo
efetivo, que ajudar a impedir problemas na memria, conforme veremos em breve.

Para preservar o comportamento da exceo, nenhuma instruo tem permisso para


iniciar sua execuo at que todos os desvios que precedem a instruo na ordem do
programa tenham sido concludos. Essa restrio garante que uma instruo que causa
uma exceo durante a execuo realmente tenha sido executada. Em um processador
usando a previso de desvio (como feito em todos os processadores com escalona-
mento dinmico), isso significa que o processador precisa saber que a previso de desvio
3.4 Contornando hazards de dados com o escalonamento dinmico 151

estava correta antes de permitir o incio da execuo de uma instruo aps o desvio. Se
o processador registrar a ocorrncia da exceo, mas no a tratar de fato, uma instruo
poder iniciar sua execuo mas no ser protelada at que entre na escrita do resultado.
Conforme veremos, a especulao oferece um mtodo mais flexvel e mais completo
para lidar com as excees. Por isso, deixaremos essa melhoria para depois, a fim de
mostrarmos como a especulao trata desse problema.
3. Escrita do resultado. Quando o resultado estiver disponvel, escreva-o no CDB e,
a partir da, nos registradores e em quaisquer estaes de reserva (incluindo os
buffers de store) esperando por esse resultado. Os stores so mantidos no buffer de
store at que o valor a ser armazenado e o endereo do store estejam disponveis, e
depois o resultado escrito assim que a unidade de memria ficar livre.
As estruturas de dados que detectam e eliminam os hazards esto conectadas s estaes
de reserva, ao banco de registradoreses e aos buffers de load e store com informaes ligei-
ramente diferentes conectadas a diferentes objetos. Essas tags so essencialmente nomes
para um conjunto estendido de registradores virtuais usados para renomeao. Em nosso
exemplo, o campo de tag uma quantidade de 4 bits que indica uma das cinco estaes
de reserva ou um dos cinco buffers de load. Como veremos, isso produz o equivalente
a 10 registradores que podem ser designados como registradores de resultado (ao con-
trrio dos quatro registradores de preciso dupla que a arquitetura 360 contm). Em um
processador com mais registradores reais, desejaramos que a renomeao fornecesse um
conjunto ainda maior de registradores virtuais. O campo de tag descreve qual estao de
reserva contm a instruo que produzir um resultado necessrio como operandos-fonte.
Quando uma instruo tiver sido enviada e estiver aguardando um operando-fonte, ela
se referir ao operando pelo nmero da estao de reserva, atribuda instruo que es-
crever no registrador. Valores no usados, como zero, indicam que o operando j est
disponvel nos registradores. Como existem mais estaes de reserva do que nmeros de
registrador reais, os hazards WAW e WAR so eliminados pela renomeao de resultados
usando nmeros de estaes de reserva. Embora no esquema de Tomasulo as estaes
de reserva sejam usadas como registradores virtuais estendidos, outras tcnicas poderiam
usar um conjunto de registradores com registradores adicionais ou uma estrutura como
o buffer de reordenao, que veremos na Seo 3.6.
No esquema de Tomasulo, alm dos mtodos subsequentes que veremos para dar suporte
especulao, os resultados so transmitidos por broadcast a um barramento (o CDB),
que monitorado pelas estaes de reserva. A combinao do barramento de resultados
comum e da recuperao dos resultados do barramento pelas estaes de reserva imple-
menta os mecanismos de encaminhamento e bypass usados em um pipeline escalonado
estaticamente. Porm, ao fazer isso, um esquema escalonado dinamicamente introduz
um ciclo de latncia entre a fonte e o resultado, pois a combinao de um resultado e seu
uso no pode ser feita antes do estgio de escrita do resultado. Assim, em um pipeline
escalonado dinamicamente, a latncia efetiva entre uma instruo produzindo e uma
instruo consumindo pelo menos um ciclo maior que a latncia da unidade funcional
que produz o resultado.
importante lembrar que as tags no esquema de Tomasulo se referem ao buffer ou unidade
que vai produzir um resultado. Os nomes de registrados so descartados quando uma
instruo envia para uma estao de reserva. (Essa uma das diferenas-chave entre o es-
quema de Tomasulo e o scoreboarding: no scoreboarding, os operandos permanecem nos
registradores e somente so lidos depois da instruo que os produziu ser completada e
da instruo que vai consumi-lo estar pronta para ser executada.)
152 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

Cada estao de reserva possui sete campos:


j Op. A operao a ser realizada sobre os operandos-fonte S1 e S2.
j Qj, Qk. As estaes de reserva que produziro o operandos-fonte correspondentes;
um valor zero indica que o operando-fonte j est disponvel em Vj ou Vk, ou
desnecessrio. (O IBM 360/91 os chama SINKunit e SOURCEunit.)
j Vj, Vk. O valor dos operandos-fonte. Observe que somente o campo V ou o campo
Q vlido para cada operando. Para loads, o campo Vk usado para manter o
campo de offset. (Esses campos so chamados SINK e SOURCE no IBM 360/91.)
j A. Usado para manter informaes para o clculo de endereo de memria para
um load ou store. Inicialmente, o campo imediato da instruo armazenado aqui;
aps o clculo do endereo, o endereo efetivo armazenado aqui.
j Busy. Indica que essa estao de reserva e sua resepctiva unidade funcional esto
ocupadas.
O banco de registradores possui um campo, Qi:
j Qi. O nmero da estao de reserva que contm a operao cujo resultado deve
ser armazenado nesse registrador. Se o valor de Qi estiver em branco (ou 0),
nenhuma instruo atualmente ativa est calculando um resultado destinado a esse
registrador, significando que o valor simplesmente o contedo do registrador.
Os buffers de load e store possuem um campo cada, A, que mantm o resultado do
endereo efetivo quando a primeira etapa da execuo tiver sido concluda.
Na prxima seo, primeiro vamos considerar alguns exemplos que mostram como
funcionam esses mecanismos e depois examinaremos o algoritmo detalhado.

3.5 ESCALONAMENTO DINMICO:


EXEMPLOS E ALGORITMO
Antes de examinarmos o algoritmo de Tomasulo com detalhes, vamos considerar alguns
exemplos que ajudaro a ilustrar o modo como o algoritmo funciona.

Exemplo Mostre como se parecem as tabelas de informao para a sequncia de cdigo a


seguir quando somente o primeiro load tiver sido concludo e seu resultado escrito:

Resposta A Figura3.7 mostra o resultado em trs tabelas. Os nmeros anexados aos


nomes add, mult e load indicam a tag para a estao de reserva Add1 a
tag para o resultado da primeira unidade de soma. Alm disso, inclumos uma
tabela de status de instruo. Essa tabela foi includa apenas para ajud-lo a
entender o algoritmo; ela no faz parte do hardware. Em vez disso, a estao
de reserva mantm o status de cada operao que foi enviada.

O esquema de Tomasulo oferece duas vantagens importantes e mais simples em relao aos
esquemas anteriores: 1) a distribuio da lgica de deteco de hazard e 2) a eliminao
de stalls para hazards WAW e WAR.
A primeira vantagem surge das estaes de reserva distribudas e do uso do Common Data
Bus (CDB). Se vrias instrues estiverem aguardando um nico resultado e cada instruo
3.5 Escalonamento dinmico: exemplos e algoritmo 153

FIGURA 3.7 Estaes de reserva e tags de registradores mostradas quando todas as instrues forem enviadas, mas somente a primeira
instruo load tiver sido concluda e seu resultado escrito no CDB.
O segundo load concluiu o clculo do endereo efetivo, mas est esperando na unidade de memria. Usamos o array Registros[ ] para nos referirmos ao
banco de registradores, e o array Mem[ ] para nos referirmos memria. Lembre-se de que um operando especificado por um campo Q ou um campo V a
qualquer momento. Observe que a instruo ADD.D, que tem um hazard WAR no estgio WB, foi enviada e poderia ser concluda antes que o DIV.D se inicie.

j tiver seu outro operando, as instrues podero ser liberadas simultaneamente por
broadcast do resultado no CDB. Se um banco de registradores centralizado fosse utilizado,
as unidades teriam de ler seus resultados dos registradores quando os barramentos de
registrador estivessem disponveis.
A segunda vantagem, a eliminao de hazards WAW e WAR, obtida renomeando-se os
registradores por meio das estaes de reserva e pelo processo de armazenar operandos
na estao de reserva assim que estiverem disponveis.
Por exemplo, a sequncia de cdigo na Figura3.7 envia o DIV.D e o ADD.D, embora
exista um hazard WAR envolvendo F6. O hazard pode ser eliminado de duas maneiras.
Primeiro, se a instruo oferecendo o valor para o DIV.D tiver sido concluda, Vk
armazenar o resultado, permitindo que DIV.D seja executado independentemente do
ADD.D (esse o caso mostrado). Por outro lado, se o L.D no tivesse sido concludo,
Qk apontaria para a estao de reserva Load1 e a instruo DIV.D seria independente
do ADD.D. Assim, de qualquer forma, o ADD.D pode ser enviado e sua execuo
iniciada. Quaisquer usos do resultado do DIV.D apontariam para a estao de reserva,
154 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

permitindo que o ADD.D conclusse e armazenasse seu valor nos registradores sem
afetar o DIV.D.
Veremos um exemplo da eliminao de um hazard WAW em breve. Mas primeiro vejamos
como nosso exemplo anterior continua a execuo. Nesse exemplo, e nos exemplos
seguintes dados neste captulo, consideramos estas latncias: load usa um ciclo de clock,
uma adio usa dois ciclos de clock, multiplicao usa seis ciclos de clock e diviso usa
12 ciclos de clock.

Exemplo Usando o mesmo segmento de cdigo do exemplo anterior (pgina 152),


mostre como ficam as tabelas de status quando o MUL.D est pronto para
escrever seu resultado.
Resposta O resultado aparece nas trs tabelas da Figura3.8. Observe que ADD.D foi
concluda, porque os operandos de DIV.D foram copiados, contornando assim
o hazard WAR. Observe que, mesmo que o load de F6 fosse adiado, o add em
F6 poderia ser executado sem disparar um hazard WAW.

Algoritmo de Tomasulo: detalhes


A Figura3.9 especifica as verificaes e etapas pelas quais cada instruo precisa passar.
Como j dissemos, loads e stores passam por uma unidade funcional para clculo de
endereo efetivo antes de prosseguirem para buffers de load e store independentes. Os
loads usam uma segunda etapa de execuo para acessar a memria e depois passar para

FIGURA 3.8 Multiplicao e diviso so as nicas instrues no terminadas.


3.5 Escalonamento dinmico: exemplos e algoritmo 155

FIGURA 3.9 Etapas no algoritmo e o que exigido para cada etapa.


Para a instruo sendo enviada, rd o destino, rs e rt so os nmeros dos registrador fontes, imm o campo imediato com extenso de sinal e r a
estao de reserva ou buffer ao qual a instruo est atribuda. RS a estrutura de dados da estao de reserva. O valor retornado por uma unidade
de PF ou pela unidade de load chamado de result. RegisterStat a estrutura de dados de status do registrador (no o banco de registradores, que
Regs[ ]). Quando uma instruo enviada, o registrador de destino tem seu campo Qi definido com o nmero do buffer ou da estao de reserva qual a
instruo enviada. Se os operandos estiverem disponveis nos registradores, eles sero armazenados nos campos V. Caso contrrio, os campos Q sero
definidos para indicar a estao de reserva que produzir os valores necessrios como operandos-fontes. A instruo espera na estao de reserva at
que seus dois operandos estejam disponveis, indicado por zero nos campos Q. Os campos Q so definidos com zero quando essa instruo enviada
ou quando uma instruo da qual essa instruo depende concluda e realiza sua escrita de volta. Quando uma instruo tiver terminado sua execuo
e o CDB estiver disponvel, ela poder realizar sua escrita de volta. Todos os buffers, registradores e estaes de reserva cujo valor de Qj ou Qk igual
estao de reserva concluda atualizam seus valores pelo CDB e marcam os campos Q para indicar que os valores foram recebidos. Assim, o CDB pode
transmitir seu resultado por broadcast para muitos destinos em um nico ciclo de clock e, se as instrues em espera tiverem seus operandos, elas
podem iniciar sua execuo no prximo ciclo de clock. Loads passam por duas etapas na Execuo, e os stores funcionam um pouco diferente durante
a escrita de resultados, podendo ter de esperar pelo valor a armazenar. Lembre-se de que, para preservar o comportamento da exceo, as instrues
no tm permisso para serem executadas se um desvio anterior na ordem do programa no tiver sido concludo. Como qualquer conceito de ordem de
programa no mantido aps o estgio de despacho, essa restrio normalmente implementada impedindo-se que qualquer instruo saia da etapa
de despacho, se houver um desvio pendente j no pipeline. Na Seo 3.6, veremos como o suporte especulao remove essa restrio.

o estgio de escrita de resultados, a fim de enviar o valor da memria para o banco de


registradores e/ou quaisquer estaes de reserva aguardando. Os stores completam sua
execuo no estgio de escrita de resultados, que escreve o resultado na memria. Observe
que todas as escritas ocorrem nesse estgio, seja o destino um registrador ou a memria.
Essa restrio simplifica o algoritmo de Tomasulo e fundamental para a sua extenso
com especulao na Seo 3.6.
156 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

Algoritmo de Tomasulo: exemplo baseado em loop


Para entender o poder completo da eliminao de hazards WAW e WAR por meio da
renomeao dinmica de registradores, temos de examinar um loop. Considere a sequncia
simples ab seguir para multiplicar os elementos de um array por um escalar em F2:

Se prevermos que os desvios sero tomados, o uso de estaes de reserva permitir que
vrias execues desse loop prossigam ao mesmo tempo. Essa vantagem obtida sem
mudar o cdigo de fato, o loop desdobrado dinamicamente pelo hardware, usando
as estaes de reserva obtidas pela renomeao para atuar como registradores adicionais.
Vamos supor que tenhamos enviado todas as instrues em duas iteraes sucessivas do
loop, mas nenhum dos loads-stores ou operaes de ponto flutuante tenham sido con-
cludas. A Figura3.10 mostra as estaes de reserva, tabelas de status de registrador e buffers
de load e store nesse ponto (a operao da ALU com inteiros ignorada e considera-se

FIGURA 3.10 Duas iteraes ativas do loop sem qualquer instruo concluda.
As entradas nas estaes de reserva do multiplicador indicam que os loads pendentes so as fontes. As estaes de reserva do store indicam que o
destino da multiplicao a fonte do valor a armazenar.
3.5 Escalonamento dinmico: exemplos e algoritmo 157

que o desvio foi previsto como sendo tomado). Quando o sistema alcana esse estado,
duas cpias do loop poderiam ser sustentadas com um CPI perto de 1,0, desde que as
multiplicaes pudessem ser completadas em quatro ciclos de clock. Com uma latncia
de seis ciclos, iteraes adicionais tero de ser processadas antes que o estado seguro possa
ser alcanado. Isso exige mais estaes de reserva para manter as instrues que esto em
execuo.
Conforme veremos mais adiante neste captulo, quando estendida com o mltiplo des-
pacho de instrues, a tcnica de Tomasulo pode sustentar mais de uma instruo por
clock.
Um load e um store podem seguramente ser feitos fora de ordem, desde que acessem
diferentes endereos. Se um load e um store acessarem o mesmo endereo, ento:
j o load vem antes do store na ordem do programa e sua inverso resulta em um
hazard WAR ou
j o store vem antes do load na ordem do programa e sua inverso resulta em um
hazard RAW.
De modo semelhante, a inverso de dois stores para o mesmo endereo resulta em um
hazard WAW.
Logo, para determinar se um load pode ser executado em certo momento, o processador
pode verificar se qualquer store no concludo que precede o load na ordem do programa
compartilha o mesmo endereo de memria de dados que o load. De modo semelhante,
um store precisa esperar at que no haja loads ou stores no executados que estejam antes,
na ordem do programa, e que compartilham o mesmo endereo de memria de dados.
Consideramos um mtodo para eliminar essa restrio na Seo 3.9.
Para detectar tais hazards, o processador precisa ter calculado o endereo de memria de
dados associado a qualquer operao de memria anterior. Uma maneira simples, porm
no necessariamente ideal, de garantir que o processador tenha todos esses endereos
realizar os clculos de endereo efetivo na ordem do programa. (Na realidade, s precisa-
mos manter a ordem relativa entre os stores e outras referncias de memria, ou seja, os
loads podem ser reordenados livremente.)
Vamos considerar a situao de um load primeiro. Se realizarmos o clculo de endereo
efetivo na ordem do programa, quando um load tiver completado o clculo de endereo
efetivo poderemos verificar se existe um conflito de endereo examinando o campo A de
todos os buffers de store ativos. Se o endereo de load combinar com o endereo de quais-
quer entradas ativas no buffer de store, essa instruo load no ser enviada ao buffer de
load at que o store em conflito seja concludo. (Algumas implementaes contornam
o valor diretamente para o load a partir de um store pendente, reduzindo o atraso para
esse hazard RAW.)
Os stores operam de modo semelhante, exceto pelo fato de que o processador precisa
verificar os conflitos nos buffers de load e nos buffers de store, pois os stores em conflito
no podem ser reordenados com relao a um load ou a um store.
Um pipeline com escalonamento dinmico pode gerar um desempenho muito alto,
desde que os desvios sejam previstos com preciso uma questo que resolveremos
na ltima seo. A principal desvantagem dessa tcnica a complexidade do esquema
de Tomasulo, que exige grande quantidade de hardware. Em particular, cada estao de
reserva deve conter um buffer associativo, que precisa ser executado em alta velocidade,
alm da lgica de controle complexa. O desempenho tambm pode ser limitado pelo
158 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

nico CDB. Embora CDBs adicionais possam ser includos, cada CDB precisa interagir
com cada estao de reserva, e o hardware de verificao de tag associativo precisar ser
duplicado em cada estao para cada CDB.
No esquema de Tomasulo, duas tcnicas diferentes so combinadas: a renomeao dos
registradores de arquitetura para um conjunto maior de registradores e a manuteno
em buffer dos operandos-fonte a partir do banco de registradores. A manuteno em
buffer de operandos-fonte resolve os hazards WAR que surgem quando o operando
est disponvel nos registradores. Como veremos mais adiante, tambm possvel
eliminar os hazards WAR renomeando um registrador junto com a manuteno de
um resultado em buffer at que no haja mais qualquer referncia pendente verso
anterior do registrador. Essa tcnica ser usada quando discutirmos sobre a especulao
de hardware.
O esquema de Tomasulo ficou sem uso por muitos anos aps o 360/91, mas nos anos
1990 foi bastante adotado nos processadores de mltiplo despacho, por vrios motivos:
1. Embora o algoritmo de Tomasulo fosse projetado antes das caches, a presena de
caches, com os atrasos inerentemente imprevisveis, tornou-se uma das principais
motivaes para o escalonamento dinmico. A execuo fora de ordem permite que
os processadores continuem executando instrues enquanto esperam o trmino
de uma falta de cache, escondendo o, assim, toda a penalidade da falta de cache ou
parte dela.
2. medida que os processadores se tornam mais agressivos em sua capacidade
de despacho e os projetistas se preocupam com o desempenho de cdigo difcil
de escalonamento (como a maioria dos cdigos no numricos), as tcnicas
como renomeao de registradores e escalonamento dinmico se tornam mais
importantes.
3. Ele pode alcanar alto desempenho sem exigir que o compilador destine o cdigo
a uma estrutura de pipeline especfica, uma propriedade valiosa na era do software
enlatado para o mercado em massa.

3.6 ESPECULAO BASEADA EM HARDWARE


medida que tentamos explorar mais paralelismo em nvel de instruo, a manuteno
de dependncias de controle se torna um peso cada vez maior. A previso de desvio reduz
os stalls diretos atribuveis aos desvios, mas, para um processador executando mltiplas
instrues por clock, apenas prever os desvios com exatido pode no ser suficiente para
gerar a quantidade desejada de paralelismo em nvel de instruo. Um processador de alta
capacidade de despacho pode ter de executar um desvio a cada ciclo de clock para manter
o desempenho mximo. Logo, a explorao de mais paralelismo requer que contornemos
a limitao da dependncia de controle.
Contornar a dependncia de controle algo feito especulando o resultado dos desvios
e executando o programa como se nossas escolhas fossem corretas. Esse mecanismo
representa uma extenso sutil, porm importante, em relao previso de desvio com
escalonamento dinmico. Em particular com a especulao, buscamos, enviamos e
executamos instrues, como se nossas previses de desvio sempre estivessem corretas; o
escalonamento dinmico s busca e envia essas instrues. Naturalmente, precisamos de
mecanismos para lidar com a situao em que a especulao est incorreta. O Apndice H
discute uma srie de mecanismos para dar suporte especulao pelo compilador. Nesta
seo, exploraremos a especulao do hardware, que estende as ideias do escalonamento
dinmico.
3.6 Especulao baseada em hardware 159

A especulao baseada no hardware combina trs ideias fundamentais: 1) previso di-


nmica de desvio para escolher quais instrues executar; 2) especulao para permitir
a execuo de instrues antes que as dependncias de controle sejam resolvidas (com a
capacidade de desfazer os efeitos de uma sequncia especulada incorretamente); e 3)
escalonamento dinmico para lidar com o escalonamento de diferentes combinaes
de blocos bsicos. (Em comparao, o escalonamento dinmico sem especulao s
sobrepe parcialmente os blocos bsicos, pois exige que um desvio seja resolvido antes
de realmente executar quaisquer instrues no bloco bsico seguinte.)
A especulao baseada no hardware segue o fluxo previsto de valores de dados para escolher
quando executar as instrues. Esse mtodo de executar programas essencialmente uma
execuo de fluxo de dados: as operaes so executadas assim que seus operandos ficam
disponveis.
Para estender o algoritmo de Tomasulo para dar suporte especulao, temos de separar
o bypass dos resultados entre as instrues, que necessrio para executar uma instruo
especulativamente, desde o trmino real de uma instruo. Fazendo essa separao,
podemos permitir que uma instruo seja executada e enviar seus resultados para outras
instrues, sem possibilitar a ela realizar quaisquer atualizaes que no possam ser des-
feitas, at sabermos que essa instruo no mais especulativa.
Usar o valor bypassed como realizar uma leitura especulativa de registrador, pois no
sabemos se a instruo que fornece o valor do registrador-fonte est fornecendo o resul-
tado correto at que a instruo no seja mais especulativa. Quando uma instruo no
mais especulativa, permitimos que ela atualize o banco de registradores ou a memria;
chamamos essa etapa adicional na sequncia de execuo da instruo de confirmao de
instruo (instruction commit).
A ideia central por trs da implementao da especulao permitir que as instrues
sejam executadas fora de ordem, mas forando-as a serem confirmadas em ordem e impedir
qualquer ao irrevogvel (como atualizar o status ou apanhar uma exceo) at que uma
instruo seja confirmada. Logo, quando acrescentamos a especulao, precisamos separar os
processos de concluir a execuo e confirmar a instruo, pois as instrues podem terminar
a execuo consideravelmente antes de estarem prontas para confirmar. A incluso dessa fase
de confirmao na sequncia de execuo da instruo requer um conjunto adicional de
buffers de hardware que mantenham os resultados das instrues que terminaram a execuo
mas no foram confirmadas. Esse buffer de hardware, que chamamos buffer de reordenao,
tambm usado para passar resultados entre instrues que podem ser especuladas.
O buffer de reordenao (ROB) oferece registradores adicionais da mesma forma que as
estaes de reserva no algoritmo de Tomasulo estendem o conjunto de registradores. O
ROB mantm o resultado de uma instruo entre o momento em que a operao associada
instruo termina e o momento em que a instruo confirmada. Logo, o ROB a fonte
dos operandos para as instrues, assim como as estaes de reserva oferecem operandos
no algoritmo de Tomasulo. A principal diferena que, no algoritmo de Tomasulo, quando
uma instruo escreve seu resultado, quaisquer instrues enviadas depois disso encontram
o resultado no banco de registradores. Com a especulao, o banco de registradores no
atualizado at que a instruo seja confirmada (e ns sabemos que a instruo dever
ser executada); assim, o ROB fornece operandos no intervalo entre o trmino da execuo
da instruo e a confirmao da instruo. O ROB semelhante ao buffer de store no
algoritmo de Tomasulo, e integramos a funo do buffer de store no ROB para simplificar.
Cada entrada no ROB contm quatro campos: o tipo de instruo, o campo de destino,
o campo de valor e o campo de pronto (ready). O campo de tipo de instruo indica
160 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

se a instruo um desvio (e no possui resultado de destino), um store (que tem um


endereo de memria como destino) ou uma operao de registrador (operao da ALU
ou load, que possui como destinos registradores). O campo de destino fornece o nmero
do registrador (para loads e operaes da ALU) ou o endereo de memria (para stores)
onde o resultado da instruo deve ser escrito. O campo de valor usado para manter o
valor do resultado da instruo at que a instruo seja confirmada. Veremos um exemplo
de entradas ROB em breve. Finalmente, o campo de pronto indica que a instruo com-
pletou sua execuo, e o valor est pronto.

A Figura3.11 mostra a estrutura de hardware do processador incluindo o ROB. O ROB


substitui os buffers de store. Os stores ainda so executados em duas etapas, mas a segunda
etapa realizada pela confirmao da instruo. Embora a funo restante das estaes
de reserva seja substituda pelo ROB, ainda precisamos de um lugar (buffer) para colocar
operaes (e operandos) entre o momento em que so enviadas e o momento em que
iniciam sua execuo. Essa funo ainda fornecida pelas estaes de reserva. Como cada
instruo tem uma posio no ROB at que seja confirmada, identificamos um resultado

FIGURA 3.11 Estrutura bsica de uma unidade de PF usando o algoritmo de Tomasulo e estendida para
lidar com a especulao.
Comparando esta figura com a Figura3.6, na pgina 149, que implementava o algoritmo de Tomasulo, as principais
mudanas so o acrscimo do ROB e a eliminao do buffer de store, cuja funo est integrada ao ROB. Esse
mecanismo pode ser estendido para o mltiplo despacho, tornando o CDB mais largo para permitir mltiplos trminos
por clock.
3.6 Especulao baseada em hardware 161

usando o nmero de entrada do ROB em vez do nmero da estao de reserva. Essa


marcao exige que o ROB atribudo para uma instruo seja rastreado na estao de
reserva. Mais adiante nesta seo, exploraremos uma implementao alternativa que usa
registradores extras para renomeao e o ROB apenas para rastrear quando as instrues
podem ser confirmadas.

Aqui esto as quatro etapas envolvidas na execuo da instruo:

1. Despacho. Apanhe uma instruo da fila de instrues. Envie a instruo se


houver uma estao de reserva vazia e um slot vazio no ROB; envie os operandos
estao de reserva se eles estiverem disponveis nos registradores ou no ROB.
Atualize as entradas de controle para indicar que os buffers esto em uso. O
nmero da entrada do ROB alocada para o resultado tambm enviado estao
de reserva, de modo que o nmero possa ser usado para marcar o resultado
quando ele for colocado no CDB. Se todas as reservas estiverem cheias ou o ROB
estiver cheio, o despacho de instruo adiado at que ambos tenham entradas
disponveis.
2. Execuo. Se um ou mais dos operandos ainda no estiver disponvel, monitore
o CDB enquanto espera que o registrador seja calculado. Essa etapa verifica os
hazards RAW. Quando os dois operandos estiverem disponveis em uma estao
de reserva, execute a operao. As instrues podem levar vrios ciclos de clock
nesse estgio, e os loads ainda exigem duas etapas nesse estgio. Os stores s
precisam ter o registrador de base disponvel nessa etapa, pois a execuo para um
store nesse ponto apenas o clculo do endereo efetivo.
3. Escrita de resultado. Quando o resultado estiver disponvel, escreva-o no CDB
(com a tag ROB enviada quando a instruo for enviada) e do CDB para o ROB,
e tambm para quaisquer estaes de reserva esperando por esse resultado.
Marque a estao de reserva como disponvel. Aes especiais so necessrias para
armazenar instrues. Se o valor a ser armazenado estiver disponvel, ele escrito
no campo Valor da entrada do ROB para o store. Se o valor a ser armazenado
ainda no estiver disponvel, o CDB precisa ser monitorado at que esse valor
seja transmitido, quando o campo Valor na entrada do ROB para o store
atualizado. Para simplificar, consideramos que isso ocorre durante o estgio
de escrita de resultado de um store; mais adiante, discutiremos o relaxamento
desse requisito.
4. Confirmao (commit). Esse o estgio final para o trmino de uma instruo, aps
o qual somente seu resultado permanece (alguns processadores chamam essa
fase de trmino ou graduao). Existem trs sequncias de aes diferentes
na confirmao, dependendo da instruo confirmando ser um desvio com uma
previso incorreta, um store ou qualquer outra instruo (confirmao normal).
O caso da confirmao normal ocorre quando uma instruo alcana o incio do
ROB e seu resultado est presente no buffer; nesse ponto, o processador atualiza
o registrador com o resultado e remove a instruo do ROB. A confirmao de um
store semelhante, exceto que a memria atualizada, em vez de um registrador
de resultado. Quando um desvio com previso incorreta atinge o incio do ROB,
isso indica que a especulao foi errada. O ROB esvaziado e a execuo
reiniciada no sucessor correto do desvio. Se o desvio foi previsto corretamente,
ele ser terminado.

Quando uma instruo confirmada, sua entrada no ROB reclamada, e o registrador


ou destino da memria atualizado, eliminando a necessidade da entrada do ROB. Se
o ROB se encher, simplesmente paramos de enviar instrues at que haja uma entrada
162 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

disponvel. Agora, vamos examinar como esse esquema funcionaria com o mesmo exemplo
que usamos para o algoritmo de Tomasulo.

Exemplo Vamos considerar as mesmas latncias para as unidades funcionais de ponto


flutuante que nos exemplos anteriores: adio usa dois ciclos de clock, multi-
plicao usa seis ciclos de clock e diviso usa 12 ciclos de clock. Usando o
segmento de cdigo a seguir, o mesmo que usamos para gerar a Figura3.8,
mostre como ficariam as tabelas de status quando o MUL.D estiver pronto
para a confirmao.

Resposta A Figura3.12 mostra o resultado nas trs tabelas. Observe que, embora a
instruo SUB.D tenha completado sua execuo, ela no confirmada at
que o MUL.D seja confirmado. As estaes de reserva e o campo de status do
registrador contm a mesma informao bsica que eles tinham no algoritmo
de Tomasulo (ver descrio desses campos na pgina 152). A diferena que
os nmeros de estao de reserva so substitudos por nmeros de entrada
ROB nos campos Qj e Qk, e tambm nos campos de status de registrador, e
acrescentamos o campo Dest s estaes de reserva. O campo Dest designa a
entrada do ROB, que o destino para o resultado produzido por essa entrada
da estao de reserva.

O exemplo ilustra a importante diferena-chave entre um processador com especulao e


um processador com escalonamento dinmico. Compare o contedo da Figura3.12 com
o da Figura3.8, na pgina 154, que mostra a mesma sequncia de cdigo em operao em
um processador com o algoritmo de Tomasulo. A principal diferena que, no exemplo
anterior, nenhuma instruo aps a instruo mais antiga no completada (MUL.D acima)
tem permisso para concluir. Ao contrrio, na Figura3.8, as instrues SUB.D e ADD.D
tambm foram concludas.
Uma implicao dessa diferena que o processador com o ROB pode executar cdigo
dinamicamente enquanto mantm um modelo de interrupo preciso. Por exemplo, se
a instruo MUL.D causasse uma interrupo, poderamos simplesmente esperar at que
ela atingisse o incio do ROB e apanhar a interrupo, esvaziando quaisquer outras ins-
trues pendentes do ROB. Como a confirmao da instruo acontece em ordem, isso
gera uma exceo precisa.
Ao contrrio, no exemplo usando o algoritmo de Tomasulo, as instrues SUB.D e ADD.D
poderiam ser concludas antes que o MUL.D levantasse a exceo. O resultado que os
registradores F8 e F6 (destinos das instrues SUB.D e ADD.D) poderiam ser sobrescritos
e a interrupo seria imprecisa.
Alguns usurios e arquitetos decidiram que as excees de ponto flutuante imprecisas
so aceitveis nos processadores de alto desempenho, pois o programa provavelmente
terminar; veja no Apndice J uma discusso aprofundada desse assunto. Outros tipos
de exceo, como falhas de pgina, so muito mais difceis de acomodar quando so
imprecisas, pois o programa precisa retomar a execuo transparentemente depois de
tratar de tal exceo.
O uso de um ROB com a confirmao de instruo em ordem oferece excees precisas,
alm de dar suporte exceo especulativa, como mostra o exemplo seguinte.
3.6 Especulao baseada em hardware 163

FIGURA 3.12 No momento em que o MUL.D est pronto para ser confirmado, somente as duas instrues L.D foram confirmadas, embora
vrias outras tenham completado sua execuo.
O MUL.D est no incio do ROB, e as duas instrues L.D esto l somente para facilitar a compreenso. As instrues SUB.D e ADD.D no sero confirmadas
at que a instruo MUL.D seja confirmada, embora os resultados das instrues estejam disponveis e possam ser usados como fontes para outras instrues.
O DIV.D est em execuo, mas ainda no concluiu unicamente devido sua latncia maior do que MUL.D. A coluna Valor indica o valor sendo mantido; o
formato #X usado para se referir a um campo de valor da entrada X do ROB. Os buffers de reordenao 1 e 2 esto realmente concludos, mas aparecem para
fins informativos. No mostramos as entradas para a fila load-store, mas essas entradas so mantidas em ordem.

Exemplo Considere o exemplo de cdigo utilizado para o algoritmo de Tomasulo e


mostrado na Figura3.10 em execuo:

Considere que tenhamos enviado todas as instrues no loop duas vezes.


Vamos tambm considerar que o L.D e o MUL.D da primeira iterao foram
confirmados e todas as outras instrues terminaram a execuo. Normal-
mente, o store esperaria no ROB pelo operando de endereo efetivo (R1 neste
exemplo) e pelo valor (F4 neste exemplo). Como s estamos considerando o
pipeline de ponto flutuante, suponha que o endereo efetivo para o store seja
calculado no momento em que a instruo enviada.
Resposta A Figura3.13 mostra o resultado em duas tabelas.
164 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

Como nem os valores de registradores nem quaisquer valores de memria so realmente


escritos at que uma instruo seja confirmada, o processador poder facilmente des-
fazer suas aes especulativas quando um desvio for considerado mal previsto. Suponha
que o desvio BNE no seja tomado pela primeira vez na Figura3.13. As instrues antes
do desvio simplesmente sero confirmadas quando cada uma alcanar o incio do ROB;
quando o desvio alcanar o incio desse buffer, o buffer ser simplesmente apagado e o
processador comear a apanhar instrues do outro caminho.
Na prtica, os processadores que especulam tentam se recuperar o mais cedo possvel aps
um desvio ser mal previsto. Essa recuperao pode ser feita limpando-se o ROB para todas
as entradas que aparecem aps o desvio mal previsto, permitindo que aquelas que esto
antes do desvio no ROB continuem, reiniciando a busca no sucesso correto do desvio.
Nos processadores especulativos, o desempenho mais sensvel previso do desvio, pois
o impacto de um erro de previso mais alto. Assim, todos os aspectos do tratamento
de desvios exatido da previso, latncia da deteco de erro de previso e tempo de
recuperao do erro de previso passam a ter mais importncia.
As excees so tratadas pelo seu no reconhecimento at que estejam prontas para serem
confirmadas. Se uma instruo especulada levantar uma exceo, a exceo ser registrada no
ROB. Se um erro de previso de desvio surgir e a instruo no tiver sido executada, a exceo
ser esvaziada junto com a instruo quando o ROB for apagado. Se a instruo atingir o
incio do ROB, saberemos que ela no mais especulativa, e a exceo dever realmente ser
tomada. Tambm poderemos tentar tratar das excees assim que elas surgirem e todos os
desvios anteriores forem resolvidos, porm isso mais desafiador no caso das excees do
que para o erro de previso de desvio, pois ocorre com menos frequncia e no to crtico.

FIGURA 3.13 Somente as instrues L.D e MUL.D foram confirmadas, embora todas as outras tenham a execuo concluda.
Logo, nenhuma estao de reserva est ocupada e nenhuma aparece. As instrues restantes sero confirmadas o mais rpido possvel. Os dois primeiros buffers
de reordenao sero confirmados o mais rpido possvel. Os dois primeiros buffers de reordenao esto vazios, mas aparecem para completar a figura.
3.6 Especulao baseada em hardware 165

A Figura3.14 mostra as etapas da execuo para uma instruo, alm das condies que
devem ser satisfeitas a fim de prosseguir para a etapa e as aes tomadas. Mostramos o
caso em que os desvios mal previstos no so resolvidos antes da confirmao. Embora a
especulao parea ser um acrscimo simples ao escalonamento dinmico, uma compara-
o da Figura3.14 com a figura comparvel para o algoritmo de Tomasulo na Figura3.9
mostra que a especulao acrescenta complicaes significativas ao controle. Alm disso,
lembre-se de que os erros de previso de desvio tambm so um pouco mais complexos.
Existe uma diferena importante no modo como os stores so tratados em um processador
especulativo e no algoritmo de Tomasulo. No algoritmo de Tomasulo, um store pode
atualizar a memria quando alcanar a escrita de resultado (o que garante que o endereo
efetivo foi calculado) e o valor de dados a armazenar estiver disponvel. Em um processador
especulativo, um store s atualiza a memria quando alcana o incio do ROB. Essa diferena
garante que a memria no seja atualizada at que uma instruo no seja mais especulativa.
A Figura3.14 apresenta uma simplificao significativa para stores, que desnecessria na
prtica. Ela exige que os stores esperem no estgio de escrita de resultado pelo registrador
operando-fonte cujo valor deve ser armazenado; o valor , ento, movido do campo Vk
da estao de reserva do store para o campo Valor da entrada de store do ROB. Porm, na
realidade, o valor a ser armazenado no precisa chegar at imediatamente antes do store ser
confirmado, e pode ser colocado diretamente na entrada de store do ROB, pela instruo
de origem. Isso realizado fazendo com que o hardware acompanhe quando o valor de
origem a ser armazenado estar disponvel na entrada de store do ROB e pesquisando o
ROB a cada trmino de instruo para procurar stores dependentes.
Esse acrscimo no complicado, mas sua incluso tem dois efeitos: precisaramos acres-
centar um campo no ROB, e a Figura3.14, que j est com uma fonte pequena, seria ainda
maior! Embora a Figura3.14 faa essa simplificao, em nossos exemplos permitiremos
que o store passe pelo estgio de escrita de resultado e simplesmente espere que o valor
esteja pronto quando for confirmado.
Assim como o algoritmo de Tomasulo, temos de evitar hazards na memria. Hazards WAW
e WAR na memria so eliminados com a especulao, pois a atualizao real da memria
ocorre em ordem, quando um store est no incio do ROB e, portanto, nenhum load ou store
anterior poder estar pendente. Os hazards RAW na memria so mantidos por duas restries:
1. No permitir que um load inicie a segunda etapa de sua execuo se qualquer
entrada ROB ativa ocupada por um store tiver um campo Destino que corresponda
ao valor do campo A do load e
2. Manter a ordem do programa para o clculo de endereo efetivo de um load com
relao a todos os stores anteriores.
Juntas, essas duas restries garantem que nenhum load que acesse um local da memria
escrito por um store anterior poder realizar o acesso memria at que o store tenha es-
crito os dados. Alguns processadores especulativos realmente contornaro o valor do store
para o load diretamente, quando ocorrer esse hazard RAW. Outra tcnica prever colises
em potencial usando uma forma de previso de valor; consideraremos isso na Seo 3.9.
Embora essa explicao da execuo especulativa tenha focalizado o ponto flutuante, as
tcnicas se estendem facilmente para registradores inteiros e unidades funcionais, conforme
veremos na seo Juntando tudo. Na realidade, a especulao pode ser mais til em pro-
gramas de inteiros, pois esses programas costumam ter um cdigo em que o comportamento
do desvio menos previsvel. Alm disso, essas tcnicas podem ser estendidas para que
funcionem em um processador de mltiplo despacho, permitindo que vrias instrues
166 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

FIGURA 3.14 Etapas no algoritmo e o que necessrio para cada etapa.


Para as instrues enviadas, rd o destino, rs e rt so os fontes, r a estao de reserva alocada, b a entrada do ROB atribuda e h a entrada inicial
do ROB. RS a estrutura de dados da estao de reserva. O valor retornado por uma estao de reserva chamado de resultado. RegisterStat a
estrutura de dados do registrador, Regs representa os registradores reais e ROB a estrutura de dados do buffer de reordenao.
3.7 Explorando o ILP com mltiplo despacho e escalonamento esttico 167

sejam enviadas e confirmadas a cada clock. Na verdade, a especulao provavelmente mais


interessante nesses processadores, pois talvez tcnicas menos ambiciosas possam explorar
um ILP suficiente dentro dos blocos bsicos quando auxiliado por um compilador.

3.7 EXPLORANDO O ILP COM MLTIPLO DESPACHO


E ESCALONAMENTO ESTTICO
As tcnicas das sees anteriores podem ser usadas para eliminar stalls de dados e controle
e alcanar um CPI ideal de 1. Para melhorar ainda mais o desempenho, gostaramos de
diminuir o CPI para menos de 1. Mas o CPI no pode ser reduzido para menos de 1 se
enviarmos apenas uma instruo a cada ciclo de clock.
O objetivo dos processadores de mltiplo despacho, discutidos nas prximas sees, per-
mitir que mltiplas instrues sejam enviadas em um ciclo de clock. Os processadores de
mltiplo despacho podem ser de trs tipos principais:
1. Processadores superescalares escalonados estaticamente.
2. Processadores VLIW (Very Long Instruction Word).
3. Processadores superescalares escalonados dinamicamente.
Os dois tipos de processadores superescalares enviam nmeros variados de instrues por
clock e usam a execuo em ordem quando so estaticamente escalonados ou a execuo
fora da ordem quando so dinamicamente escalonados.
Processadores VLIW, ao contrrio, enviam um nmero fixo de instrues formatadas como
uma instruo grande ou como um pacote de instruo fixo com o paralelismo entre ins-
trues indicado explicitamente pela instruo. Processadores VLIW so inerentemente es-
calonados de forma esttica pelo compilador. Quando a Intel e a HP criaram a arquitetura
IA-64, descrita no Apndice H, tambm introduziram o nome EPIC (Explicitly Parallel
Instruction Computer) para esse estilo de arquitetura.
Embora os superescalares escalonados estaticamente enviem um nmero varivel e no
um nmero fixo de instrues por clock, na verdade, em conceito, eles esto mais prximos
aos VLIWs, pois as duas tcnicas contam com o compilador para escalonar o cdigo para
o processador. Devido s vantagens cada vez menores de um superescalar escalonado es-
taticamente medida que a largura de despacho aumenta, os superescalares escalonados es-
taticamente so usados principalmente para larguras de despacho estreitas, geralmente apenas
com duas instrues. Alm dessa largura, a maioria dos projetistas escolhe implementar um
VLIW ou um superescalar escalonado dinamicamente. Devido s semelhanas no hardware
e tecnologia de compilador exigida, nesta seo enfocamos os VLIWs. Os conhecimentos
desta seo so facilmente extrapolados para um superescalar escalonado estaticamente.
A Figura3.15 resume as tcnicas bsicas para o mltiplo despacho e suas caractersticas
distintas, mostrando os processadores que usam cada tcnica.

A tcnica VLIW bsica


Os VLIWs utilizam mltiplas unidades funcionais independentes. Em vez de tentar enviar ml-
tiplas instrues independentes para as unidades, um VLIW empacota as mltiplas operaes
em uma instruo longa ou exige que as instrues no pacote de despacho satisfaam as mes-
mas restries. Como no existe diferena fundamental nas duas tcnicas, assumiremos apenas
que mltiplas operaes so colocadas em uma instruo, como na tcnica VLIW original.
Como a vantagem de um VLIW aumenta medida que a taxa de despacho mxima cresce,
enfocamos um processador com largura de despacho maior. Na realidade, para proces-
168 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

FIGURA 3.15 As cinco tcnicas principais em uso para processadores de mltiplo despacho e as principais caractersticas que os distinguem.
Este captulo enfoca as tcnicas com uso intensivo de hardware, que so todas de alguma forma de superescalar. O Apndice G enfoca as tcnicas
baseadas em compilador. A tcnica EPIC, incorporada arquitetura IA-64, estende muitos dos conceitos das primeiras tcnicas VLIW, oferecendo uma
mistura de tcnicas estticas e dinmicas.

sadores simples de despacho com largura dois, o overhead de um superescalar provavel-


mente mnimo. Muitos projetistas provavelmente argumentariam que um processador
de despacho qudruplo possui overhead controlvel, mas, como veremos mais adiante
neste captulo, o crescimento no overhead um fator importante que limita os proces-
sadores com larguras de despacho maiores.
Vamos considerar um processador VLIW com instrues que contm cinco operaes, in-
cluindo uma operao com inteiros (que tambm poderia ser um desvio), duas operaes
de ponto flutuante e duas referncias memria. A instruo teria um conjunto de campos
para cada unidade funcional talvez 16-24 bits por unidade, gerando um tamanho de
instruo de algo entre 80-120 bits. Por comparao, o Intel Itanium 1 e o 2 contm seis
operaes de instrues por pacote (ou seja, eles permitem o despacho concorrente de
dois conjuntos de trs instrues, como descreve o Apndice H).
Para manter as unidades funcionais ocupadas, preciso haver paralelismo suficiente em
uma sequncia de cdigo para preencher os slots de operao disponveis. Esse paralelismo
descoberto desdobrando os loops e escalonando o cdigo dentro do nico corpo de
loop maior. Se o desdobramento gerar cdigo sem desvios ou loops (straight-line code),
as tcnicas de escalonamento local, que operam sobre um nico bloco bsico, podem ser uti-
lizadas. Se a localizao e a explorao do paralelismo exigirem escalonamento de cdigo
entre os desvios, um algoritmo de escalonamento global substancialmente mais complexo
ter de ser usado. Os algoritmos de escalonamento global no so apenas mais complexos
em estrutura, mas tambm precisam lidar com escolhas significativamente mais com-
plicadas em otimizao, pois a movimentao de cdigo entre os desvios dispendiosa.
No Apndice H, discutiremos o escalonamento de rastreio, uma dessas tcnicas de escalonamen-
to global desenvolvidas especificamente para VLIWs; tambm exploraremos o suporte especial
de hardware, que permite que alguns desvios condicionais sejam eliminados, estendendo a
utilidade do escalonamento local e melhorando o desempenho do escalonamento global.
Por enquanto, contaremos com o desdobramento do loop para gerar sequncias de cdigo
longas, straight-line, a fim de podermos usar o escalonamento local para montar instrues
VLIW e explicar o quanto esses processadores operam bem.
3.7 Explorando o ILP com mltiplo despacho e escalonamento esttico 169

Exemplo Suponha que tenhamos um VLIW que possa enviar duas referncias
memria, duas operaes de PF e uma operao com inteiros ou desvio a
cada ciclo de clock. Mostre uma verso desdobrada do loop x[i]=x[i]+s
(ver cdigo MIPS na pgina 136) para tal processador. Desdobre tantas
vezes quantas forem necessrias para eliminar quaisquer stalls. Ignore os
desvios adiados.
Resposta A Figura3.16 mostra o cdigo. O loop foi desdobrado para fazer sete cpias
do corpo, o que elimina quaisquer stalls (ou seja, ciclos de despacho com-
pletamente vazios), sendo executado em nove ciclos. Esse cdigo gera
uma taxa de execuo de sete resultados em nove ciclos ou 1,29 ciclo por
resultado, quase o dobro da rapidez do superescalar de despacho duplo da
Seo 3.2, que usava cdigo desdobrado e escalonado.

Para o modelo VLIW original, havia problemas tcnicos e logsticos que tornavam a
tcnica menos eficiente. Os problemas tcnicos so o aumento no tamanho do cdigo
e as limitaes da operao de bloqueio. Dois elementos diferentes so combinados
para aumentar o tamanho do cdigo substancialmente para um VLIW. Primeiro, a
gerao de operaes suficientes em um fragmento de cdigo straight-line requer des-
dobramento de loops de ambiciosos (como nos exemplos anteriores), aumentando
assim o tamanho do cdigo. Segundo, sempre que as instrues no forem cheias,
as unidades funcionais no usadas se traduzem em bits desperdiados na codificao
de instruo. No Apndice H, examinamos as tcnicas de escalonamento de software,
como o pipelining de software, que podem alcanar os benefcios do desdobramento
sem muita expanso do cdigo.
Para combater esse aumento no tamanho do cdigo, s vezes so utilizadas codificaes
inteligentes. Por exemplo, pode haver apenas um campo imediato grande para uso por
qualquer unidade funcional. Outra tcnica compactar as instrues na memria prin-
cipal e expandi-las quando forem lidas para a cache ou quando forem decodificadas. No
Apndice H, mostramos outras tcnicas, alm de documentar a significativa expanso do
cdigo vista no IA-64.

FIGURA 3.16 Instrues VLIW que ocupam o loop interno e substituem a sequncia desdobrada.
Esse cdigo usa nove ciclos, considerando que no haja atraso de desvio; normalmente, o atraso de desvio tambm precisaria ser escalonado. A taxa de
despacho de 23 operaes em nove ciclos de clock ou 2,5 operaes por ciclo. A eficincia, ou a porcentagem de slots disponveis que continuam uma
operao, de cerca de 60%. Para conseguir essa taxa de despacho, preciso um nmero maior de registradores do que o MIPS normalmente usaria
nesse loop. A sequncia de cdigo VLIW acima requer pelo menos oito registradores FP, enquanto a mesma sequncia de cdigo para o processador MIPS
bsico pode usar desde dois at cinco registradores de PF, quando desdobrada e escalonada.
170 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

Os primeiros VLIWs operavam em bloqueio; no havia hardware de deteco de hazard


algum. Essa estrutura ditava que um stall em qualquer pipeline de unidade funcional
precisa fazer com que o processador inteiro pare e espere, pois todas as unidades
funcionais precisam ser mantidas em sincronismo. Embora um compilador possa
ser capaz de escalonar as unidades funcionais determinsticas para evitar os stalls,
muito difcil prever quais acessos aos dados causaro um stall de cache e escalon-los.
Logo, as caches precisavam de bloqueio, fazendo com que todas as unidades funcionais
protelassem. medida que a taxa de despacho e o nmero de referncias memria
se tornava grande, essa restrio de sincronismo se tornou inaceitvel. Em proces-
sadores mais recentes, as unidades funcionais operam de forma mais independente,
e o compilador usado para evitar hazards no momento do despacho, enquanto as
verificaes de hardware permitem a execuo no sincronizada quando as instrues
so enviadas.
A compatibilidade do cdigo binrio tambm tem sido um problema logstico importante
para os VLIWs. Em uma tcnica VLIW estrita, a sequncia de cdigo utiliza a definio do
conjunto de instrues e a estrutura de pipeline detalhada, incluindo as unidades funcio-
nais e suas latncias. Assim, diferentes quantidades de unidades funcionais e latncias de
unidade exigem diferentes verses do cdigo. Esse requisito torna a migrao entre im-
plementaes sucessivas, ou entre implementaes com diferentes larguras de despacho,
mais difcil do que para um projeto superescalar. Naturalmente, a obteno de desempe-
nho melhorado a partir de um novo projeto de superescalar pode exigir recompilao.
Apesar disso, a capacidade de executar arquivos binrios antigos uma vantagem prtica
para uma tcnica superescalar.
A tcnica EPIC, da qual a arquitetura IA-64 o principal exemplo, oferece solues para
muitos dos problemas encontrados nos primeiros projetos VLIW, incluindo extenses
para uma especulao de software mais agressiva e mtodos para contornar a limitao
da dependncia do hardware enquanto preserva a compatibilidade binria.
O principal desafio para todos os processadores de mltiplo despacho tentar explorar
grande quantidade de ILP. Quando o paralelismo vem do desdobramento de loops sim-
ples em programas de PF, provavelmente o loop original no foi executado de forma
eficiente em um processador vetorial (descrito no Captulo4). No claro que um proces-
sador de mltiplo despacho seja preferido em relao a um processador vetorial para tais
aplicaes; os custos so semelhantes, e o processador vetorial normalmente tem a mesma
velocidade ou mais rpido. As vantagens em potencial de um processador de mltiplo
despacho versus um processador vetorial so sua capacidade de extrair algum paralelismo
do cdigo menos estruturado e sua capacidade de facilmente colocar em cache todas
as formas de dados. Por esses motivos, as tcnicas de mltiplo despacho se tornaram o
mtodo principal para tirar proveito do paralelismo em nvel de instruo, e os vetores se
tornaram principalmente uma extenso desses processadores.

3.8 EXPLORANDO O ILP COM ESCALONAMENTO


DINMICO, MLTIPLO DESPACHO E ESPECULAO
At aqui, vimos como funcionam os mecanismos individuais do escalonamento din-
mico, mltiplo despacho e especulao. Nesta seo, juntamos os trs, o que gera uma
microarquitetura muito semelhante quelas dos microprocessadores modernos. Para
simplificar, consideramos apenas uma taxa de despacho de duas instrues por clock,
mas os conceitos no so diferentes dos processadores modernos, que enviam trs ou
mais instrues por clock.
3.8 Explorando o ILP com escalonamento dinmico, mltiplo despacho e especulao 171

Vamos considerar que queremos estender o algoritmo de Tomasulo para dar suporte a
um pipeline superescalar de despacho duplo, com uma unidade de inteiros e de ponto
flutuante separadas, cada qual podendo iniciar uma operao a cada clock. No que-
remos enviar instrues fora de ordem para as estaes de reserva, pois isso levaria a
uma violao da semntica do programa. Para tirar proveito total do escalonamento
dinmico, permitiremos que o pipeline envie qualquer combinao de duas instrues
em um clock, usando o hardware de escalonamento para realmente atribuir operaes
unidade de inteiros e de ponto flutuante. Como a interao das instrues de inteiros
e de ponto flutuante crucial, tambm estendemos o esquema de Tomasulo para lidar
com as unidades funcionais e os registradores de inteiros e de ponto flutuante, alm de
incorporar a execuo especulativa. Como a Figura3.17 mostra, a organizao bsica
similar quela de um processador com especulao com um despacho por clock, exceto
pelo fato de que a lgica de despacho e concluso deve ser melhorada para permitir
mltiplas instrues por clock.
Emitir instrues mltiplas por clock em um processador escalonado dinamicamente
(com ou sem especulao) muito complexo pela simples razo de que as mltiplas

FIGURA 3.17 A organizao bsica de um processador de mltiplos despachos com especulao.


Neste caso, a organizao poderia permitir uma multiplicao de PF, uma soma de PF, inteiros e load/store simultaneamente para todos os despachos
(supondo um despacho por clock por unidade funcional). Observe que diversos caminhos de dados devem ser alargados para suportar mltiplos
despachos: o CDB, os barramentos de operando e, essencialmente, a lgica de despacho de instruo, que no mostrada nesta figura. O ltimo um
problema difcil, como discutiremos no texto.
172 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

instrues podem depender umas das outras. Por isso, as tabelas devem ser atualizadas
para as instrues em paralelo. Caso contrrio, ficaro incorretas ou a dependncia
poder ser perdida.
Duas tcnicas diferentes foram usadas para enviar mltiplas instrues por clock em um
processador escalonado dinamicamente, e ambas contam com a observao de que a chave
atribuir uma estao de reserva e atualizar as tabelas de controle de pipeline. Uma tcnica
executar essa etapa na metade de um ciclo de clock, de modo que duas instrues possam
ser processadas em um ciclo de clock. Infelizmente, essa tcnica no pode ser estendida
facilmente para lidar com quatro instrues por clock.
Uma segunda alternativa montar a lgica necessria para lidar com duas instrues
ao mesmo tempo, incluindo quaisquer dependncias possveis entre as instrues. Os
modernos processadores superescalares que enviam quatro ou mais instrues por clock
normalmente incluem ambas as tcnicas: ambas utilizam uma lgica de despacho de
largura grande e com o pipeline. Uma observao importante que no podemos eliminar
o problema com pipelining. Ao fazer com que os despachos de instruo levem mltiplos
clocks, porque novas instrues so enviadas a cada ciclo de clock, devemos ser capazes de
definir a estao de reserva e atualizar as tabelas de pipeline, de modo que uma instruo
dependente enviada no prximo clock possa usar as informaes atualizadas.
Esse passo de despacho um dos funis mais fundamentais em superscalares escalonados
dinamicamente. Para ilustrar a complexidade desse processo, a Figura3.18 mostra a lgica
de despacho para um caso: enviar um load seguido por uma operao FP dependente. A
lgica se baseia na da Figura3.14, na pgina 166, mas representa somente um caso. Em
um superescalar moderno, todas as combinaes possveis de instrues dependentes que
se podem enviar em um clock, o passo do despacho um gargalo provvel para tentativas
de ir alm de quatro instrues por clock.
Podemos generalizar os detalhes da Figura3.18 para descrever a estratgia bsica para
atualizar a lgica de despacho e as tabelas de reserva em um superescalar escalonado
dinamicamente com at n despachos por clock como a seguir:
1. Definir uma estao de reserva e um buffer de reordenao para todas as instrues
que podem ser enviadas no prximo conjunto de despacho. Essa definio pode ser
feita antes que os tipos de instrues sejam conhecidos, simplesmente pr-alocando
as entradas do buffer de reordenao e garantindo que estejam disponveis estaes
de reserva o suficiente para enviar todo o conjunto, independentemente do que
ele contenha. Ao limitar o nmero de instrues de uma dada classe (digamos, um
FP, um inteiro, um load, um store), as estaes de reserva necessrias podem ser
pr-alocadas. Se estaes de reserva suficientes no estiverem disponveis (como
quando as prximas instrues do programa so todas do mesmo tipo), o conjunto
ser quebrado, e somente um subconjunto das instrues, na ordem do programa
original, ser enviado. O restante das instrues no conjunto poder ser colocado
no prximo conjunto para despacho em potencial.
2. Analisar todas as dependncias entre as instrues no conjunto de despacho.
3. Se uma instruo no conjunto depender de uma instruo anterior no conjunto, use
o nmero do buffer de reorganizao atribudo para atualizar a tabela de reserva
para a instruo dependente. Caso contrrio, use a tabela de reserva existente e
a informao do buffer de reorganizao para atualizar as entradas da tabela de
reservas para as instrues enviadas.
Obviamente, o que torna isso muito complicado o fato de que tudo feito em paralelo
em um nico ciclo de clock!
3.8 Explorando o ILP com escalonamento dinmico, mltiplo despacho e especulao 173

FIGURA 3.18 Passos de despacho para um par de instrues dependentes (chamadas 1 e 2), onde a instruo 1 um load de PF e a
instruo 2 uma operao de PF cujo primeiro operando o resultado da instruo de load; r1 e r2 so as estaes de reserva designadas
para as instrues; b1 e b2 so as entradas de buffer de reordenao designadas.
Para as instrues enviadas, rd1 e rd2 so os destinos, rs1, rs2 e rt2 so as fontes (o load tem somente uma fonte); r1 e r2 so as estaes de reserva alocadas;
b1 e b so as entradas ROB designadas. RS a estrutura de dados da estao de reserva. RegisterStat a estrutura de dados de registrador, Regs representa os
registradores reais e ROB a estrutura de dados do buffer de reorganizao. Observe que precisamos ter entradas de buffer de reorganizao designadas para
que essa lgica opere corretamente e lembrar que todas essas atualizaes ocorrem em um nico ciclo de clock em paralelo, no sequencialmente!

Na extremidade final do pipeline, devemos ser capazes de completar e emitir mltiplas


instrues por clock. Esses passos so um pouco mais fceis do que os problemas de des-
pacho, uma vez que mltiplas instrues que podem realmente ser emitidas no mesmo
ciclo de clock j devem ter sido tratadas e quaisquer dependncias resolvidas. Como
veremos mais adiante, os projetistas descobriram como lidar com essa complexidade: o
Intel i7, que examinaremos na Seo 3.13, usa essencialmente o esquema que descrevemos
para mltiplos despachos especulativos, incluindo grande nmero de estaes de reserva,
um buffer de reorganizao e um buffer de load e store, que tambm usado para tratar
faltas de cache sem bloqueio.
Do ponto de vista do desempenho, podemos mostrar como os conceitos se encaixam
com um exemplo.
174 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

Exemplo Considere a execuo do loop a seguir, que incrementa cada elemento de


um array inteiro, em um processador de duplo despacho, uma vez sem es-
peculao e uma com especulao:

Suponha que existam unidades funcionais separadas de inteiros para clculo


eficaz de endereo, para operaes de ALU e para avaliao de condio de
desvios. Crie uma tabela para as trs primeiras iteraes desse loop para
os dois processadores. Suponha que at duas instrues de qualquer tipo
possam ser emitidas por clock.
Resposta As Figuras3.19 e 3.20 mostram o desempenho para um processador escalona-
do dinamicamente com duplo despacho, sem e com especulao. Nesse caso,
onde um desvio pode ser um limitador crtico do desempenho, a especulao
ajuda significativamente. O terceiro desvio em que o processador executado
no ciclo de clock 13, enquanto no pipeline no especulativo, ele executado no
ciclo de clock 19. J que a taxa de concluso no pipeline no especulativo est
ficando rapidamente para trs da taxa de despacho, o pipeline no especulativo
vai sofrer stall quando algumas poucas iteraes a mais forem enviadas. O de-
sempenho do processador no especulativo poderia ser melhorado permitindo
que as instrues load completassem o clculo do endereo efetivo antes de
um desvio ser decidido, mas sem que sejam permitidos acessos especulativos
memria, essa melhoria vai ganhar somente um clock por interao.

FIGURA 3.19 Tempo de despacho, execuo e escrita de resultado para uma verso de despacho duplo do nosso pipeline sem especulao.
Observe que o LD seguido pelo BNE no pode iniciar a execuo antes, pois precisa esperar at que o resultado do desvio seja determinado. Esse tipo
de programa, com desvios dependentes de dados que no podem ser resolvidos anteriormente, mostra a fora da especulao. Unidades funcionais
separadas para o clculo do endereo, operaes com a ALU e avaliao da condio de desvio permitem que vrias instrues sejam executadas no
mesmo ciclo. A Figura3.20 mostra esse exemplo com especulao.
3.9 Tcnicas avanadas para o despacho de instrues e especulao 175

FIGURA 3.20 Tempo de despacho, execuo e escrita de resultado para uma verso de despacho duplo de nossos pipelines com especulao.
Observe que o LD seguido do BNE pode iniciar a execuo mais cedo, pois especulativo.

Esse exemplo mostra claramente como a especulao pode ser vantajosa quando existem
desvios dependentes dos dados, que de outro modo limitariam o desempenho. Entretan-
to, essa vantagem depende da previso precisa de desvios. A especulao incorreta no
melhora o desempenho. Na verdade, geralmente ela prejudica o desempenho e, como
veremos, diminui drasticamente a eficincia energtica.

3.9 TCNICAS AVANADAS PARA O DESPACHO


DE INSTRUES E ESPECULAO
Em um pipeline de alto desempenho, especialmente um com mltiplo despacho, prever
bem os desvios no suficiente; na realidade, temos de ser capazes de entregar um fluxo
de instruo com uma grande largura de banda. Nos processadores recentes de mltiplo
despacho, isso significa resolver 4-8 instrues a cada ciclo de clock. Primeiro veremos os
mtodos para aumentar a largura de banda de despacho de instruo. Depois, passaremos
a um conjunto de questes fundamentais na implementao de tcnicas avanadas de
especulao, incluindo o uso de renomeao de registrador versus buffers de reordenao,
a agressividade da especulao e uma tcnica chamada previso de valor, que poderia
melhorar ainda mais o ILP.

Aumentando a largura de banda da busca de instrues


(instruction fetch)
Um processador de mltiplo despacho exigir que o nmero mdio de instrues bus-
cadas a cada ciclo de clock seja pelo menos do mesmo tamanho do throughput mdio.
Naturalmente, buscar essas instrues exige caminhos largos o suficiente para a cache
176 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

da instruo, mas o aspecto mais difcil lidar com desvios. Nesta seo, veremos dois
mtodos para lidar com desvios e depois discutiremos como os processadores modernos
integram as funes de previso e pr-fetch de instruo.

Buffers de destino de desvio


Para reduzir a penalidade do desvio para o nosso pipeline simples de cinco estgios, alm
dos pipelines mais profundos, temos de saber se a instruo ainda no decodificada um
desvio e, se for, qual dever ser o prximo PC. Se a instruo for um desvio e soubermos
qual deve ser o prximo PC, podemos ter uma penalidade de desvio de zero. Uma cache
de previso de desvio que armazena o endereo previsto para a prxima instruo aps um
desvio chamada de buffer de destino de desvio ou cache de destino de desvio. A Figura3.21
mostra um buffer de destino de desvio.
Como o buffer de destino de desvio prev o endereo da prxima instruo e o envia antes
de decodificar a instruo, precisamos saber se a instruo lida prevista como um desvio
tomado. Se o PC da instruo lida combinar com um PC no buffer de instruo, o PC
previsto correspondente ser usado como prximo PC. O hardware para esse buffer de
destino de desvio essencialmente idntico ao hardware para a cache.
Se uma entrada correspondente for encontrada no buffer de destino de desvio, a busca
comear imediatamente no PC previsto. Observe que, diferentemente de um buffer
de previso de desvio, a entrada da previso precisa corresponder a essa instruo, pois
o PC previsto ser enviado antes de se saber sequer se essa instruo um desvio. Se o

FIGURA 3.21 Um buffer de destino de desvio.


O PC da instruo sendo lida combinado com um conjunto de endereos de instruo armazenados na primeira
coluna; estes representam os endereos de desvios conhecidos. Se o PC for correspondente a uma dessas entradas,
a instruo sendo lida ser um desvio tomado, e o segundo campo, o PC previsto, conter a previso para o prximo
PC aps o desvio. A busca comea imediatamente nesse endereo. O terceiro campo, que opcional, pode ser usado
para os bits extras de status de previso.
3.9 Tcnicas avanadas para o despacho de instrues e especulao 177

processador no verificasse se a entrada corresponde a esse PC, o PC errado seria enviado


para instrues que no fossem desvios, resultando em um processador mais lento. S
precisamos armazenar os desvios tomados previstos no buffer de destino de desvio, pois
um desvio no tomado deve simplesmente apanhar a prxima instruo sequencial como
se no fosse um desvio.
A Figura3.22 mostra as etapas detalhadas quando se usa um buffer de destino de des-
vio para um pipeline simples de cinco estgios. A partir disso, podemos ver que no
haver atraso de desvio se uma entrada de previso de desvio for encontrada no buffer
e a previso estiver correta. Caso contrrio, haver uma penalidade de pelo menos dois
ciclos de clock. Lidar com erros de previso e faltas um desafio significativo, pois
normalmente teremos de interromper a busca da instruo enquanto reescrevemos a
entrada do buffer. Assim, gostaramos de tornar esse processo rpido para minimizar
a penalidade.
Para avaliar se um buffer de destino de desvio funciona bem, primeiro temos de determinar
as penalidades em todos os casos possveis. A 3 contm essa informao para o pipeline
simples de cinco estgios.

FIGURA 3.22 Etapas envolvidas no tratamento de uma instruo com um buffer de destino de desvio.
178 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

Exemplo Determine a penalidade de desvio total para um buffer de destino de desvio,


considerando os ciclos de penalidade para os erros de previso individuais
da Figura3.23. Faa as seguintes suposies sobre a preciso de previso
e taxa de acerto:
A preciso de previso de 90% (para instrues no buffer).
A taxa de acerto no buffer de 90% (para desvios previstos tomados).
Resposta Calculamos a penalidade verificando a probabilidade de dois eventos: o des-
vio tem previso de ser tomado, mas acaba no sendo tomado, e o desvio
tomado mas no encontrado no buffer. Ambos carregam uma penalidade
de dois ciclos.
Probabilidade(desviono buffer,masno tomado realmente) = Percentual de taxa deacerto do buffer
Porcentagem de previsesincorretas
= 90% 10% = 0,09
Probabilidade(desviono no buffer,mastomado) = 10%
Penalidadededesvio = (0,09 + 0,10) 2
Penalidadededesvio = 0,38

Essa penalidade se compara com uma penalidade de desvio para os desvios


adiados, que avaliaremos no Apndice C, de cerca de meio ciclo de clock
por desvio. Lembre-se, no entanto, de que a melhoria da previso de desvio
dinmico crescer medida que crescer o tamanho do pipeline, portanto, o
atraso do desvio; alm disso, previsores melhores geraro uma vantagem
de desempenho maior. Os processadores modernos de alto desempenho
apresentam atrasos de previso incorreta de desvio da ordem de 15 ciclos
de clock. Obviamente, uma previso precisa essencial!

Uma variao no buffer de destino de desvio armazenar uma ou mais instrues-alvo no


lugar do endereo-alvo previsto ou adiconalmente a ele. Essa variao possui duas vantagens
em potencial: 1) ela permite que o acesso ao buffer de desvio leve mais tempo do que
o tempo entre buscas sucessivas de instrues, possivelmente permitindo um buffer de
destino de desvio maior; 2) o armazenamento das instrues-alvo reais em buffer permite
que realizemos uma otimizao chamada branch folding. O branch folding pode ser usado
para obter desvios incondicionais de 0 ciclo, e s vezes os desvios condicionais de 0 ciclo.
Considere um buffer de destino de desvio que coloca instrues no buffer a partir do
caminho previsto e est sendo acessado com o endereo de um desvio incondicional. A
nica funo do desvio incondicional alterar o PC. Assim, quando o buffer de destino
de desvio sinaliza um acerto e indica que o desvio incondicional, o pipeline pode sim-
plesmente substituir a instruo do buffer de destino de desvio no lugar da instruo que

FIGURA 3.23 Penalidades para todas as combinaes possveis de que o desvio est no buffer e o que ele
realmente faz supondo que armazenemos apenas os desvios tomados no buffer.
No existe penalidade de desvio se tudo for previsto corretamente e o desvio for encontrado no buffer de desvio.
Se o desvio no for previsto corretamente, a penalidade ser igual a um ciclo de clock para atualizar o buffer com a
informao correta (durante o que uma instruo no poder ser apanhada) e um ciclo de clock, se for preciso, para
reiniciar a busca da prxima instruo correta para o desvio. Se o desvio no for encontrado e tomado, ocorrer uma
penalidade de dois ciclos enquanto o buffer for atualizado.
3.9 Tcnicas avanadas para o despacho de instrues e especulao 179

retornada da cache (que o desvio incondicional). Se o processador estiver enviando


mltiplas instrues por ciclo, o buffer precisar fornecer mltiplas instrues para obter o
mximo de benefcio. Em alguns casos, talvez seja possvel eliminar o custo de um desvio.

Previses de endereo de retorno


Ao tentarmos aumentar a oportunidade e a preciso da especulao, encararemos o desafio de
prever saltos indiretos, ou seja, saltos cujo endereo de destino varia durante a execuo. Embo-
ra os programas em linguagem de alto nvel gerem esses saltos para chamadas de procedimento
indiretas, instrues select, case e os gotos do FORTRAN, a grande maioria dos saltos indiretos
vem de retornos de procedimento. Por exemplo, para os benchmarks SPEC95, esses retornos
so responsveis por mais de 15% dos desvios e pela grande maioria dos saltos indiretos na
mdia. Para linguagens orientadas a objeto, como C++ e Java, os retornos de procedimento
so ainda mais frequentes. Assim, focar nos retornos de procedimento parece apropriado.
Embora os retornos de procedimento possam ser previstos com um buffer de destino de desvio,
a exatido dessa tcnica de previso pode ser baixa se o procedimento for chamado de vrios
locais e as chamadas de um local no forem agrupadas no tempo. Por exemplo, no SPEC
CPU95, um previsor de desvio agressivo consegue uma preciso de menos de 60% para tais
desvios de retorno. Para contornar esse problema, alguns projetos usam um pequeno buffer de
endereos de retorno operando como uma pilha. Essa estrutura coloca em cache os endereos
de retorno mais recentes: colocando um endereo de retorno na pilha em uma chamada e
retirando-o em um retorno. Se a cache for suficientemente grande (ou seja, do mesmo tamanho
da profundidade mxima de chamada), vai prever os retornos perfeitamente. A Figura3.24

FIGURA 3.24 Exatido da previso para um buffer de endereo de retorno operado como pilha em uma
srie de benchmarks SPEC CPU95.
A preciso a frao dos endereos de retorno previstos corretamente. Um buffer de 0 entrada implica que a
previso-padro de desvio seja utilizada. Como as profundidades de chamadas normalmente so muito grandes, com
algumas excees, um buffer modesto funciona bem. Esse dado vem de Skadron et al. (1999) e utiliza um mecanismo
de reparo para impedir a adulterao dos endereos de retorno em cache.
180 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

mostra o desempenho de um buffer de retorno desse tipo com 0-16 elementos para uma srie de
benchmarks SPEC CPU95. Usaremos um previsor de retorno semelhante quando examinarmos
os estudos do ILP na Seo 3.10. Tanto os processadores Intel Core quanto os processadores
AMD Phenom tm previsores de endereo de retorno.

Unidades integradas de busca de instruo


Para atender as demandas dos processadores de mltiplo despacho, muitos projetistas
recentes escolheram implementar uma unidade integrada de busca de instruo, como
uma unidade autnoma separada, que alimenta instrues para o restante do pipeline.
Basicamente, isso significa reconhecer que no mais vlido caracterizar a busca de ins-
trues como um nico estgio da pipe, dadas as complexidades do mltiplo despacho.
Em vez disso, os projetos recentes usaram uma unidade integrada de busca de instruo
que abrange diversas funes:
1. Previso integrada de desvio. O previsor de desvio torna-se parte da unidade de busca
de instruo e est constantemente prevendo desvios, de modo a controlar a busca
no pipeline.
2. Pr-busca de instruo. Para oferecer mltiplas instrues por clock, a unidade de
busca de instruo provavelmente precisar fazer a busca antecipadamente. A
unidade controla autonomamente a pr-busca de instrues (ver uma discusso das
tcnicas para fazer isso no Captulo2), integrando com a previso de desvio.
3. Acesso memria de instrues e armazenamento em buffer. Ao carregar mltiplas
instrues por ciclo, diversas complexidades so encontradas, incluindo a
dificuldade de que a busca de mltiplas instrues pode exigir o acesso a mltiplas
linhas de cache. A unidade de busca de instruo contorna essa complexidade,
usando a pr-busca para tentar esconder o custo de atravessar blocos de cache.
A unidade de busca de instruo tambm oferece o uso de buffer, basicamente
atuando como uma unidade sob demanda, para oferecer instrues ao estgio de
despacho conforme a necessidade e na quantidade necessria.
Hoje, quase todos os processadores sofisticados usam uma unidade de busca de instruo
separada conectada ao resto do pipeline por um buffer contendo instrues pendentes.

Especulao: problemas de implementao e extenses


Nesta seo, exploraremos trs ideias que envolvem a implementao da especulao,
comeando com o uso da renomeao de registradores, a tcnica que substituiu quase
totalmente o uso de um buffer de reordenao. Depois, discutiremos uma extenso pos-
svel importante para a especificao no fluxo de controle: uma ideia chamada previso
de valor.

Suporte especulao: renomeao de registrador versus


buffers de reordenao
Uma alternativa ao uso de um buffer de reordenao (ROB) o uso explcito de um
conjunto fsico maior de registradores, combinado com a renomeao de registradores.
Essa tcnica se baseia no conceito de renomeao usado no algoritmo de Tomasulo e o
estende. No algoritmo de Tomasulo, os valores dos registradores arquitetonicamente visveis
a arquitetura (R0, ..., R31 e F0, ..., F31) esto contidos, em qualquer ponto na execuo,
em alguma combinao do conjunto de registradores e a estaes de reserva. Com o acrs-
cimo da especulao, os valores de registrador tambm podem residir temporariamente
no ROB. De qualquer forma, se o processador no enviar novas instrues por um perodo
de tempo, todas as instrues existentes sero confirmadas, e os valores dos registradores
3.9 Tcnicas avanadas para o despacho de instrues e especulao 181

aparecero no banco de registradores, que corresponde diretamente aos registradores


visveis arquitetonicamente.
Na tcnica de renomeao de registrador, um conjunto estendido de registradores fsicos
usado para manter os registradores arquitetonicamente visveis e tambm valores tem-
porrios. Assim, os registradores estendidos substituem a funo do ROB e das estaes de
reserva. Durante o despacho de instruo, um processo de renomeao mapeia os nomes
dos registradores da arquitetura para os nmeros dos registradores fsicos no conjunto de
registradores estendido, alocando um novo registrador no usado para o destino. Hazards
WAW e WAR so evitados renomeando-se o registrador de destino, e a recuperao da es-
peculao tratada, porque um registrador fsico, mantido como um destino de instruo
no se torna o registrador da arquitetura at que a instruo seja confirmada. O mapa de
renomeao uma estrutura de dados simples que fornece o nmero de registrador fsico
do registrador correspondente ao registrador da arquitetura especificado. Essa estrutura
semelhante em estrutura e funo tabela de status de registrador no algoritmo de Tomasu-
lo. Quando uma instruo confirmada, a tabela restante atualizada permanentemente
para indicar que um registrador fsico corresponde ao registrador de arquitetura real,
finalizando efetivamente a atualizao ao status do processador. Embora um ROB no
seja necessrio com a renomeao de registrador, o hardware deve rastrear instrues em
uma estrutura similar de uma fila e atualizar a tabela de renomeao em ordem estrita.
Uma vantagem da tcnica de renomeao versus a tcnica ROB que a confirmao de ins-
truo simplificada, pois exige apenas duas aes simples: 1) registrar que o mapeamento
entre um nmero de registrador da arquitetura e o nmero do registrador fsico no mais
especulativo e 2) liberar quaisquer registradores fsicos sendo usados para manter o valor
mais antigo do registrador da arquitetura. Em um projeto com estaes de reserva, uma
estao liberada quando a instruo que a utiliza termina a execuo, e uma entrada
ROB liberada quando a instruo correspondente confirmada.
Com a renomeao de registrador, a desalocao de registradores mais complexa, pois,
antes de liberarmos um registrador fsico, temos de saber se ele no corresponde mais a
um registrador da arquitetura e se nenhum outro uso do registrador fsico est pendente.
Um registrador fsico corresponde a um registrador da arquitetura at que o registrador
da arquitetura seja reescrito, fazendo com que a tabela de renomeao aponte para outro
lugar. Ou seja, se nenhuma entrada restante apontar para determinado registrador fsico,
ela no corresponder mais a um registrador da arquitetura. Porm, ainda poder haver
usos pendentes do registrador fsico. O processador poder determinar se esse o caso
examinando os especificadores de registrador de origem de todas as instrues nas filas
da unidade funcional. Se determinado registrador fsico no aparecer como origem e no
for designado como registrador da arquitetura, ele poder ser reclamado e realocado.
Como alternativa, o processador pode simplesmente esperar at que seja confirmada outra
instruo que escreva no mesmo registrador da arquitetura. Nesse ponto, pode no haver
mais usos para o valor pendente antigo. Embora esse mtodo possa amarrar um regis-
trador fsico por um pouco mais de tempo do que o necessrio, ele fcil de implementar
e, portanto, usado em vrios superescalares recentes.
Uma pergunta que voc pode estar fazendo : Como sabemos quais registradores so de
arquitetura se eles esto constantemente mudando? Na maior parte do tempo em que um
programa est executando, isso no importa. Porm, existem casos em que outro processo,
como o sistema operacional, precisa ser capaz de saber exatamente onde reside o contedo
de certo registrador de arquitetura. Para entender como essa capacidade fornecida,
considere que o processador no envia instrues por algum perodo de tempo. Por fim,
182 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

todas as instrues no pipeline sero confirmadas, e o mapeamento entre os registradores


arquitetonicamente visveis e os registradores fsicos se tornar estvel. Nesse ponto, um
subconjunto dos registradores fsicos contm os registradores arquitetonicamente visveis,
e o valor de qualquer registrador fsico no associado a um registrador de arquitetura des-
necessrio. Ento, fcil mover os registradores de arquitetura para um subconjunto fixo
de registradores fsicos, de modo que os valores possam ser comunicados a outro processo.
Tanto a renomeao de registrador quanto os buffers de reorganizao continuam a ser
usados em processadores sofisticados, que hoje podem ter em ao at 40-50 instrues
(incluindo loads e stores aguardando na cache). Seja usando a renomeao, seja usando
um buffer de reorganizao, o principal gargalo para a complexidade de um superes-
calar escalonado dinamicamente continua sendo o despacho de conjuntos de instrues
com dependncias dentro do conjunto. Em particular, instrues dependentes em um
conjunto de despacho devem ser enviadas com os registradores virtuais designados das
instrues das quais eles dependem. Uma estratgia para despacho de instruo com
renomeao de registrador similar ao usado para mltiplo despacho com buffers de
reorganizao (pgina 157) pode ser empregada como a seguir:
1. A lgica de despacho pr-reserva registradores fsicos suficientes para todo o
conjunto de despachos (digamos, quatro registradores para um conjunto de quatro
instrues com, no mximo, um resultado de registrador por instruo).
2. A lgica de despacho determina quais dependncias existem dentro do conjunto. Se
no existir nenhuma dependncia dentro do conjunto, a estrutura de renomeao
de registrador ser usada para determinar o registrador fsico que contm, ou vai
conter, o resultado do qual a instruo depende. Quando no existe nenhuma
dependncia dentro do conjunto, o resultado um conjunto de despachos anterior,
e a tabela de renomeao de registrador ter o nmero de registrador correto.
3. Se uma instruo depender de uma instruo anterior no conjunto, o registrador
fsico pr-reservado no qual o resultado ser colocado ser usado para atualizar a
informao para a instruo que est enviando.
Observe que, assim como no caso do buffer de reorganizao, a lgica de despacho deve
determinar as dependncias dentro do conjunto e atualizar as tabelas de renomeao em
um nico clock e, como antes, a complexidade de fazer isso para grande nmero de ins-
trues por clock torna-se uma grande limitao na largura do despacho.

Quanto especular
Uma das vantagens significativas da especulao a sua capacidade de desvendar eventos
que, de outra forma, fariam com que o pipeline ficasse em stall mais cedo, como as fa-
lhas de cache. Porm, essa vantagem em potencial possui uma significativa desvantagem
em potencial. A especulao no gratuita: ela gasta tempo e energia, e a recuperao da
especulao incorreta reduz ainda mais o desempenho. Alm disso, para dar suporte
taxa mais alta de execuo de instruo, necessria para se tirar proveito da especulao,
o processador precisa ter recursos adicionais, que exigem rea de silcio e energia. Final-
mente, se a especulao levar a um evento excepcional, como a falhas de cache ou TLB,
o potencial para uma perda significativa de desempenho aumentar se esse evento no
tiver ocorrido sem especulao.
Para manter a maior parte da vantagem enquanto minimiza as desvantagens, a maioria
dos pipelines com especulao s permite que eventos excepcionais de baixo custo (como
uma falha de cache de primeiro nvel) sejam tratados no modo especulativo. Se houver
um evento excepcional dispendioso, como falha de cache de segundo nvel ou falha do
buffer de TLB, o processador vai esperar at que a instruo que causa o evento deixe de ser
3.9 Tcnicas avanadas para o despacho de instrues e especulao 183

especulativa, antes de tratar dele. Embora isso possa degradar ligeiramente o desempenho
de alguns programas, evita perdas de desempenho significativa em outros, especialmente
naqueles que sofrem com a alta frequncia de tais eventos, acoplado com uma previso
de desvio menos que excelente.
Na dcada de 1990, as desvantagens em potencial da especulao eram menos bvias. Com
a evoluo dos processadores, os custos reais da especulao se tornaram mais aparentes, e
as limitaes do despacho mais amplo e a especulao se tornaram bvias. Retomaremos
essa questo em breve.

Especulao por desvios mltiplos


Nos exemplos que consideramos neste captulo, tem sido possvel resolver um desvio
antes de ter de especular outro. Trs situaes diferentes podem beneficiar-se com a es-
peculao em desvios mltiplos simultaneamente: 1) frequncia de desvio muito alta; 2)
agrupamento significativo de desvios; e 3) longos atrasos nas unidades funcionais. Nos dois
primeiros casos, conseguir um desempenho alto pode significar que mltiplos desvios so
especulados e at mesmo tratar de mais de um desvio por clock. Os programas de banco
de dados, e outras computaes com inteiros menos estruturadas, geralmente exigem essas
propriedades, tornando a especulao em desvios mltiplos mais importante. De modo
semelhante, longos atrasos nas unidades funcionais podem aumentar a importncia da
especulao em desvios mltiplos como um meio de evitar stalls a partir de atrasos de
pipeline mais longos.
A especulao em desvios mltiplos complica um pouco o processo de recuperao da
especulao, mas simples em outros aspectos. Em 2011, nenhum processador havia
combinado especulao completa com a resoluo de mltiplos desvios por ciclo, e
improvvel que os custos de fazer isso fossem justificados em termos de desempenho
versus complexidade e energia.

Especulao e o desafio da eficincia energtica


Qual o impacto da especulao sobre a eficincia energtica? primeira vista, pode-se
argumentar que usar a especulao sempre diminui a eficincia energtica, j que sempre
que a especulao est errada ela consome energia em excesso de dois modos:
1. As instrues que foram especuladas e aquelas cujos resultados no foram
necessrios geraram excesso de trabalho para o processador, desperdiando energia.
2. Desfazer a especulao e restaurar o status do processador para continuar a execuo
no endereo apropriado consome energia adicional que no seria necessria sem
especulao.
Certamente, a especulao vai aumentar o consumo de energia e, se pudermos controlar a
especulao, ser possvel medir o custo (ou pelo menos o custo da potncia dinmica).
Mas, se a especulao diminuir o tempo de execuo mais do que aumentar o consumo
mdio de energia, a energia total consumida pode ser menor.
Assim, para entender o impacto da especulao sobre a eficincia energtica, precisamos
examinar com que frequncia a especulao leva a um trabalho desnecessrio. Se nmero
significativo de instrues desnecessrias for executado, improvvel que a especulao
melhore em comparao com o tempo de execuo! A Figura3.25 mostra a frao de
instrues executadas a partir da especulao incorreta. Como podemos ver, essa frao
pequena em cdigos cientficos e significativa (cerca de 30% em mdia) em cdigos
inteiros. Assim, improvvel que a especulao seja eficiente em termos de energia para
aplicaes de nmeros inteiros. Os projetistas devem evitar a especulao, tentar reduzir
184 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

FIGURA 3.25 Frao de instrues que so executadas como resultado de especulao incorreta para
programas inteiros (os cinco primeiros) em comparao a programas de PF (os cinco ltimos).

a especulao incorreta ou pensar em novas abordagens, como somente especular em


desvios altamente previsveis.

Previso de valor
Uma tcnica para aumentar a quantidade de ILP disponvel em um programa a previso
de valor. A previso de valor tenta prever o valor que ser produzido por uma instruo.
Obviamente, como a maioria das instrues produz um valor diferente toda vez que
executada (ou, pelo menos, um valor diferente a partir de um conjunto de valores), a
previso de valor s pode ter sucesso limitado. Portanto, existem certas instrues para
as quais mais fcil prever o valor resultante por exemplo, loads que carregam de um
pool constante ou que carregam um valor que muda com pouca frequncia. Alm disso,
quando uma instruo produz um valor escolhido a partir de um pequeno conjunto de
valores em potencial, possvel prever o valor resultante correlacionando-o com outros
comportamentos do programa.
A previso de valor til quando aumenta significativamente a quantidade de ILP dis-
ponvel. Isso mais provvel quando um valor usado como origem de uma cadeia de
computaes dependentes, como em um load. Como a previso de valor usada para
melhorar especulaes e a especulao incorreta tem impacto prejudicial no desempenho,
a exatido da previso essencial.
Embora muitos pesquisadores tenham se concentrado na previso de valor nos ltimos
10 anos, os resultados nunca foram atraentes o suficiente para justificar sua incorporao
em processadores reais. Em vez disso, uma ideia simples e mais antiga, relacionada com a
previso de valor, tem sido adotada: a previso de aliasing de endereo. Previso de aliasing
de endereo uma tcnica simples que prev se dois stores ou um load e um store se referem
ao mesmo endereo de memria. Se duas referncias desse tipo no se referirem ao mesmo
endereo, elas podero ser seguramente trocadas. Caso contrrio, teremos de esperar at
que sejam conhecidos os endereos de memria acessados pelas instrues. Como no
precisamos realmente prever os valores de endereo somente se tais valores entram em
3.10 Estudos das limitaes do ILP 185

conflito, a previso mais estvel e mais simples. Essa forma limitada de especulao de
valor de endereo tem sido usada em diversos processadores e pode tornar-se universal
no futuro.

3.10 ESTUDOS DAS LIMITAES DO ILP


A explorao do ILP para aumentar o desempenho comeou com os primeiros proces-
sadores com pipeline na dcada de 1960. Nos anos 1980 e 1990, essas tcnicas foram
fundamentais para conseguir rpidas melhorias de desempenho. A questo de quanto ILP
existe foi decisiva para a nossa capacidade de aumentar, a longo prazo, o desempenho
a uma taxa que ultrapassasse o aumento na velocidade da tecnologia bsica do circuito
integrado. Em uma escala mais curta, a questo crtica do que necessrio para explorar
mais ILP crucial para os projetistas de computadores e de compiladores. Os dados
apresentados nesta seo tambm nos oferecem um modo de examinar o valor das ideias
que introduzimos no captulo anterior, incluindo a falta de ambiguidade de memria,
renomeao de registrador e especulao.
Nesta seo, vamos rever um dos estudos feitos sobre essas questes (baseados no estudo
de Wall, em 1993). Todos esses estudos do paralelismo disponvel operam fazendo um
conjunto de suposies e vendo quanto paralelismo est disponvel sob essas suposies. Os
dados que examinamos aqui so de um estudo que faz o mnimo de suposies; na verdade,
provvel que o modelo de hardware definitivo no seja realizvel. Apesar disso, todos esses
estudos consideram certo nvel de tecnologia de compilador, e algumas dessas suposies
poderiam afetar os resultados, apesar do uso de um hardware incrivelmente ambicioso.
Como veremos, para modelos de hardware que tenham custo razovel, improvvel que
os custos de uma especulao muito agressiva possam ser justificados. As ineficincias
energticas e o uso de silcio so simplesmente muito altos. Enquanto muitos na comu-
nidade de pesquisa e os principais fabricantes de processadores estavam apostando em
maior explorao do ILP, e foram inicialmente relutantes em aceitar essa possibilidade,
em 2005 eles foram forados a mudar de ideia.

O modelo de hardware
Para ver quais poderiam ser os limites do ILP, primeiro precisamos definir um processador
ideal. Um processador ideal aquele do qual so removidas todas as restries sobre o
ILP. Os nicos limites sobre o ILP em tal processador so aqueles impostos pelos fluxos
de dados reais, pelos registradores ou pela memria.
As suposies feitas para um processador ideal ou perfeito so as seguintes:
1. Renomeao infinita de registrador. Existe um nmero infinito de registradores virtuais
disposio e, por isso, todos os hazards WAW e WAR so evitados e um nmero
ilimitado de instrues pode iniciar a execuo simultaneamente.
2. Previso perfeita de desvio. A previso de desvio perfeita. Todos os desvios
condicionais so previstos com exatido.
3. Previso perfeita de salto. Todos os saltos (incluindo o salto por registrador, usado
para retorno e saltos calculados) so perfeitamente previstos. Quando combinado
com a previso de desvio perfeita, isso equivalente a ter um processador com
especulao perfeita e um buffer ilimitado de instrues disponveis para execuo.
4. Anlise perfeita de alias de endereo de memria. Todos os endereos de memria so
conhecidos exatamente, e um load pode ser movido antes de um store, desde que os
endereos no sejam idnticos. Observe que isso implementa a anlise de alias de
endereo perfeita.
186 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

5. Caches perfeitas. Todos os endereos de memria utilizam um ciclo de clock.


Na prtica, os processadores superescalares normalmente consumiro grande
quantidade de ILP ocultando falhas de cache, tornando esses resultados altamente
otimistas.
As suposies 2 e 3 eliminam todas as dependncias de controle. De modo semelhante,
as suposies 1 e 4 eliminam todas menos as dependncias de dados verdadeiras. Juntas, essas
quatro suposies significam que qualquer instruo na execuo do programa pode ser
escalonada no ciclo imediatamente aps a execuo da predecessora da qual depende.
possvel ainda, sob essas suposies, que a ltima instruo executada dinamicamente
no programa seja sempre escalonada no primeiro ciclo de clock! Assim, esse conjunto
de suposies substitui a especulao de controle e endereo e as implementa como se
fossem perfeitas.
Inicialmente, examinamos um processador que pode enviar um nmero ilimitado de ins-
trues ao mesmo tempo, olhando arbitrariamente para o futuro da computao. Para
todos os modelos de processador que examinamos, no existem restries sobre quais
tipos de instrues podem ser executadas em um ciclo. Para o caso de despacho ilimitado,
isso significa que pode haver um nmero ilimitado de loads ou stores enviados em um
ciclo de clock. Alm disso, todas as latncias de unidade funcional so consideradas como
tendo um ciclo, de modo que qualquer sequncia de instrues dependentes pode ser
enviada em ciclos sucessivos. As latncias maiores do que um ciclo diminuiriam o nmero
de despachos por ciclo, embora no o nmero de instrues em execuo em qualquer
ponto (as instrues em execuo em qualquer ponto normalmente so chamadas de
instrues in flight).
evidente que esse processador est s margens do irrealizvel. Por exemplo, o IBM
Power7 (ver Wendell et al., 2010) o processador superescalar mais avanado anunciado
at o momento. O Power7 envia at seis instrues por clock e inicia a execuo em
at 8-12 unidades de execuo (somente duas das quais so unidades de load/store),
suporta um grande conjunto de registradores renomeados (permitindo centenas de
instrues no ato), usa um previsor de desvio grande e agressivo, e emprega a desambi-
guao de memria dinmica. O Power7 continuou o movimento rumo ao uso de mais
paralelismo no nvel de thread, aumentando a largura do suporte para multithreading
simultneo (SMT) para quatro threads por ncleo e o nmero de ncleos por chip
para oito. Depois de examinar o paralelismo disponvel para o processador perfeito,
examinaremos o que pode ser alcanado em qualquer processador que seja projetado
em futuro prximo.
Para medir o paralelismo disponvel, um conjunto de programas foi compilado e oti-
mizado com os compiladores de otimizao MIPS padro. Os programas foram ins-
trumentados e executados para produzir um rastro das referncias de instrues e dados.
Cada uma dessas instrues ento escalonada o mais cedo possvel, limitada apenas
pelas dependncias de dados. Como um rastro usado, a previso de desvio perfeita e a
anlise de alias perfeita so fceis de fazer. Com esses mecanismos, as instrues podem
ser escalonadas muito mais cedo do que poderiam ser de outra forma, movendo grande
quantidade de instrues, cujos dados no so dependentes, incluindo desvios, que so
perfeitamente previstos.
A Figura3.26 mostra a quantidade mdia de paralelismo disponvel para seis dos bench-
marks SPEC92. Por toda esta seo, o paralelismo medido pela taxa de despacho de
instruo mdia. Lembre-se de que todas as instrues possuem uma latncia de um
ciclo; uma latncia maior reduziria o nmero mdio de instrues por clock. Trs desses
3.10 Estudos das limitaes do ILP 187

FIGURA 3.26 ILP disponvel em um processador perfeito para seis dos benchmarks SPEC92.
Os trs primeiros programas so programas de inteiros, o os ltimos trs so programas de ponto flutuante.
Os programas de ponto flutuante so intensos em termos de loop e tm grande quantidade de paralelismo em nvel
de loop.

benchmarks (fpppp, doduc e tomcatv) utilizam intensamente nmeros de ponto flutuante,


e os outros trs so programas para inteiros. Dois dos benchmarks de ponto flutuante
(fpppp e tomcatv) possuem paralelismo extensivo, que poderia ser explorado por um
computador vetorial ou por um multiprocessador (porm, a estrutura do fpppp muito
confusa, pois algumas transformaes foram feitas manualmente no cdigo). O programa
doduc possui extenso paralelismo, mas esse paralelismo no ocorre em loops paralelos
simples, assim como no fpppp e tomcatv. O programa li um interpretador LISP que
possui dependncias muito curtas.

Limitaes do ILP para processadores realizveis


Nesta seo examinaremos o desempenho de processadores com nveis ambiciosos de
suporte ao hardware igual ou melhor que o disponvel em 2011 ou dados os eventos e
lies da ltima dcada, que provavelmente estaro disponveis num futuro prximo. Em
particular, supomos os seguintes atributos fixos:

1. At 64 despachos de instruo por clock sem restries de despacho ou cerca


de 10 vezes a amplitude de despacho total do maior processador em 2011.
Conforme examinaremos mais adiante, as implicaes prticas de grandes
amplitudes de despacho na frequncia do clock, complexidade lgica e potncia
podem ser a limitao mais importante da explorao do ILP.
2. Um previsor de torneio com 1K entradas e um previsor de retorno de 16 entradas.
Esse previsor bastante comparvel aos melhores previsores em 2011; o previsor
no um gargalo importante.
3. A desambiguidade perfeita de referncias de memria feita dinamicamente
bastante ambiciosa, mas talvez seja possvel para pequenos tamanhos de janela
(e, portanto, pequenas taxas de despacho e buffers de load-store) ou atravs de um
previsor de dependncia de memria.
4. Renomeao de registradorres com 64 registradores adicionais de inteiros
e 64 de ponto flutuante, o que ligeiramente menor do que o processador
mais agressivo em 2011. O Intel Core i7 tem 128 entradas em seu buffer de
reordenao, embora eles no sejam divididos entre inteiros e ponto flutuante,
enquanto o IBM Power7 tem quase 200. Observe que supomos uma latncia
de pipeline de um ciclo que reduz significativamente a necessidade de entradas
de buffer de reorganizao. Tanto o Power7 quanto o i7 tm latncias de
10 ciclos ou mais.
188 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

A Figura3.27 mostra o resultado para essa configurao medida que variamos o


tamanho da janela. Essa configurao mais complexa e dispendiosa do que quais-
quer implementaes existentes, sobretudo em termos do nmero de despachos de
instruo, que mais de 10 vezes maior que o maior nmero de despachos disponveis
em qualquer processador em 2011. Apesar disso, oferece um limite til sobre o que as
implementaes futuras poderiam alcanar. Os dados nessa figura provavelmente so
muito otimistas por outro motivo. No existem restries de despacho entre as 64 ins-
trues: todas elas podem ser referncias de memria. Ningum sequer contemplaria
essa capacidade em um processador no futuro prximo. Infelizmente, muito difcil
vincular o desempenho de um processador com restries de despacho razoveis; no
s o espao de possibilidades muito grande, mas a existncia de restries de despacho
exige que o paralelismo seja avaliado com um escalonador de instruo preciso, o que
torna muito dispendioso o custo de estudo de processadores com grande quantidade
de despachos.

FIGURA 3.27 A quantidade de paralelismo disponvel em comparao ao tamanho da janela para diversos
programas de inteiros e ponto flutuante com at 64 despachos arbitrrios de instrues por clock.
Embora haja menos registradores restantes do que o tamanho da janela, o fato de que todas as operaes tenham
latncia de um ciclo e o nmero de registradores restantes seja igual largura de despacho permite ao processador
explorar o paralelismo dentro de toda a janela. Na implementao real, o tamanho da janela e o nmero de registradores
restantes devem ser equilibrados para impedir que um desses fatores restrinja demais a taxa de despacho.
3.10 Estudos das limitaes do ILP 189

Alm disso, lembre-se de que, na interpretao desses resultados, as falhas de cache e


as latncias no unitrias no foram levadas em considerao, e esses dois efeitos tero
impacto significativo!
A observao mais surpreendente da Figura3.27 que, mesmo com as restries
de processador realista listadas, o efeito do tamanho da janela para os programas de
inteiros no to severo quanto para programas de ponto flutuante. Esse resultado
aponta para a principal diferena entre esses dois tipos de programas. A disponibilidade
do paralelismo em nvel de loop em dois dos programas de ponto flutuante significa
que a quantidade de ILP que pode ser explorado mais alta, mas que, para programas
de inteiros, outros fatores como a previso de desvio, a renomeao de registrador
e menos paralelismo, para comear so limitaes importantes. Essa observao
crtica, devido nfase aumentada no desempenho para inteiros nos ltimos anos.
Na realidade, a maior parte do crescimento do mercado na ltima dcada proces-
samento de transao, servidores Web e itens semelhantes dependeu do desempenho
para inteiros, em vez do ponto flutuante. Conforme veremos na seo seguinte, para
um processador realista em 2011, os nveis de desempenho reais so muito inferiores
queles mostrados na Figura3.27.
Dada a dificuldade de aumentar as taxas de instruo com projetos de hardware realistas,
os projetistas enfrentam um desafio na deciso de como usar melhor os recursos limitados
disponveis em um circuito integrado. Uma das escolhas mais interessantes entre proces-
sadores mais simples com caches maiores e taxas de clock mais altas versus mais nfase no
paralelismo em nvel de instruo com clock mais lento e caches menores. O exemplo a
seguir ilustra os desafios, e no Captulo4 veremos uma tcnica alternativa para explorar
o paralelismo fino na forma de GPUs.

Exemplo Considere os trs processadores hipotticos (mas no atpicos) a seguir, nos


quais vamos executar o benchmark gcc do SPEC:
1. Um pipe esttico MIPS de duplo despacho rodando a uma frequncia de
clock de 4GHz e alcanando um CPI de pipeline de 0,8. Esse processador
tem um sistema de cache que gera 0,005 falha por instruo.
2. Uma verso fortemente canalizada de um processador MIPS com duplo
despacho com cache ligeiramente menor e frequncia de clock de 5GHz.
O CPI de pipeline do processador 1,0, e as caches menores geram 0,0055
falha por instruo, em mdia.
3. Um superescalar especulativo com uma janela de 64 entradas. Ele alcana
metade da taxa de despacho ideal medida para esse tamanho de janela
(usar dados da Figura3.27). Esse processador tem as menores caches,
que levam a 0,01 falha por instruo, mas oculta 25% da penalidade de
falha a cada falha atravs de escalonamento dinmico. Esse processador
tem um clock de 2,5GHz.
Suponha que o tempo da memria principal (que estabelece a penalidade de
falha) seja de 50ns. Determine o desempenho relativo desses trs proces-
sadores.
Resposta Primeiro, usaremos as informaes de penalidade de falha e taxa de falha
para calcular a contribuio para o CPI a partir das falhas de cache para cada
configurao. Faremos isso com a seguinte frmula:
CPI de cache = Falhas por instruo Penalidade de falha

Precisamos calcular as penalidades de falha para cada sistema:

Tempo de acesso memria


Penalidade de falha =
Ciclo de clock
190 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

Os tempos de ciclo de clock so de 250 ps, 200 ps e 400 ps, respectivamente.


Portanto, as penalidades de falha so
50 ns
Penalidade de falha1 = = 200 ciclos
250 ps
50 ns
Penalidade de falha2 = = 250 ciclos
200 ps
0,75 50 ns
Penalidade de falha3 = = 94 ciclos
400 ps

Aplicando isso a cada cache:


CPI de cache1 = 0,005 200 = 1,0
CPI de cache2 = 0,0055 250 = 1,4
CPI de cache3 = 0,01 94 = 0,94

Conhecemos a contribuio do CPI de pipeline para tudo, exceto para o


processador 3. Esse CPI de pipeline dado por:
1 1 1
CPI de pipeline3 = = = = 0,22
Taxa de despacho 9 0,5 4,5

Agora podemos encontrar o CPI para cada processador adicionando as con-


tribuies de CPI do pipeline e cache.
CPI1 = 0,8 + 1,0 = 1,8
CPI2 = 1,0 + 1,4 = 2,4
CPI3 = 0,22 + 0,94 = 1,16

Uma vez que essa a mesma arquitetura, podemos comparar as taxas de


execuo de instruo em milhes de instrues por segundo (MIPS) para
determinar o desempenho relativo:
CR
Taxa de execuo de instruo =
CPI
4.000 MHz
Taxa de execuo de instruo1 = = 2.222 MIPS
1,8
5.000 MHz
Taxa de execuo de instruo2 = = 2.083 MIPS
2,4
2.500 MHz
Taxa de execuo de instruo3 = = 2.155 MIPS
1,16

Neste exemplo, o superescalar esttico simples de duplo despacho parece


ser o melhor. Na prtica, o desempenho depende das suposies de CPI e
frequncia do clock.

Alm dos limites deste estudo


Como em qualquer estudo de limite, o estudo que examinaremos nesta seo tem suas
prprias limitaes. Ns as dividimos em duas classes: 1) limitaes que surgem at
mesmo para o processador especulativo perfeito e 2) limitaes que surgem de um ou
mais modelos realistas. Naturalmente, todas as limitaes na primeira classe se aplicam
segunda. As limitaes mais importantes que se aplicam at mesmo ao modelo per-
feito so:
1. Hazards WAW e WAR atravs da memria. O estudo eliminou hazards WAW e WAR
por meio da renomeao de registrador, mas no no uso da memria. Embora a
princpio tais circunstncias possam parecer raras (especialmente os hazards WAW),
elas surgem devido alocao de frames de pilha. Uma chamada de procedimento
3.10 Estudos das limitaes do ILP 191

reutiliza os locais da memria de um procedimento anterior na pilha, e isso pode


levar a hazards WAW e WAR, que so desnecessariamente limitadores. Austin e Sohi
(1992) examinam essa questo.
2. Dependncias desnecessrias. Com um nmero infinito de registradores, todas as
dependncias, exceto as verdadeiras dependncias de dados de registrador, so
removidas. Porm, algumas dependncias surgem de recorrncias ou de convenes
de gerao de cdigo que introduzem dependncias de dados verdadeiras
desnecessrias. Um exemplo disso a dependncia da varivel de controle em um
simples loop for. Como a varivel de controle incrementada a cada iterao do
loop, ele contm pelo menos uma dependncia. Como mostraremos no Apndice
H, o desdobramento de loop e a otimizao algbrica agressiva podem remover
essa computao dependente. O estudo de Wall inclui quantidade limitada dessas
otimizaes, mas sua aplicao de forma mais agressiva poderia levar a maior
quantidade de ILP. Alm disso, certas convenes de gerao de cdigo introduzem
dependncias desnecessrias, em particular o uso de registradores de endereo
de retorno e de um registrador para o ponteiro de pilha (que incrementado
e decrementado na sequncia de chamada/retorno). Wall remove
o efeito do registrador de endereo de retorno, mas o uso de um ponteiro de pilha
na conveno de ligao pode causar dependncias desnecessrias. Postiff et al.
(1999) exploraram as vantagens de remover essa restrio.
3. Contornando o limite de fluxo de dados. Se a previso de valor funcionou com alta
preciso, ela poderia contornar o limite do fluxo de dados. At agora, nenhum
dos mais de 100 trabalhos sobre o assunto conseguiu melhoria significativa no
ILP usando um esquema de previso realista. Obviamente, a previso perfeita do
valor de dados levaria ao paralelismo efetivamente infinito, pois cada valor de cada
instruo poderia ser previsto a priori.

Para um processador menos que perfeito, vrias ideias tm sido propostas e poderiam ex-
por mais ILP. Um exemplo especular ao longo de vrios caminhos. Essa ideia foi tratada
por Lam e Wilson (1992) e explorada no estudo abordado nesta seo. Especulando sobre
caminhos mltiplos, o custo da recuperao incorreta reduzido e mais paralelismo pode
ser desvendado. S faz sentido avaliar esse esquema para um nmero limitado de desvios,
pois os recursos de hardware exigidos crescem exponencialmente. Wall (1993) oferece
dados para especular nas duas direes em at oito desvios. Dados os custos de perseguir
os dois caminhos mesmo sabendo que um deles ser abandonado (e a quantidade cres-
cente de computao intil, na medida em que tal processo seguido por desvios mlti-
plos), cada projeto comercial, em vez disso, dedicou um hardware adicional para melhor
especulao sobre o caminho correto.

fundamental entender que nenhum dos limites mencionados nesta seo fundamental
no sentido de que contorn-los exige uma mudana nas leis da Fsica! Em vez disso, eles
so limitaes prticas que implicam a existncia de algumas barreiras formidveis para
a explorao do ILP adicional. Essas limitaes sejam elas tamanho de janela, sejam
deteco de alias ou previso de desvio representam desafios para projetistas e pes-
quisadores contornarem.

Tentativas de romper esses limites nos primeiros cinco anos deste sculo resultaram
em frustraes. Algumas tcnicas levaram a pequenas melhorias, porm muitas vezes
com significativos aumentos em complexidade, aumentos no ciclo de clock e aumentos
desproporcionais na potncia. Em resumo, os projetistas descobriram que tentar extrair
mais ILP era simplesmente ineficiente. Vamos retomar essa discusso nos Comentrios
Finais.
192 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

3.11 QUESTES CRUZADAS: TCNICAS DE ILP


E O SISTEMA DE MEMRIA
Especulao de hardware versus especulao de software
As tcnicas de uso intenso de hardware para a especulao, mencionadas no Captulo2,
e as tcnicas de software do Apndice H oferecem enfoques alternativos explorao do
ILP. Algumas das escolhas e suas limitaes para esses enfoques aparecem listadas a seguir:

j Para especular extensivamente, temos de ser capazes de tirar a ambiguidade das


referncias memria. Essa capacidade difcil de fazer em tempo de compilao
para programas de inteiros que contm ponteiros. Em um esquema baseado no
hardware, a eliminao da ambiguidade dos endereos de memria em tempo
de execuo dinmica feita com o uso das tcnicas que vimos para o algoritmo
de Tomasulo. Essa desambiguidade nos permite mover loads para depois de stores
em tempo de execuo. O suporte para referncias de memria especulativas pode
contornar o conservadorismo do compilador, mas, a menos que essas tcnicas
sejam usadas cuidadosamente, o overhead dos mecanismos de recuperao poder
sobrepor as vantagens.
j A especulao baseada em hardware funciona melhor quando o fluxo de controle
imprevisvel e quando a previso de desvio baseada em hardware superior
previso de desvio baseada em software, feita em tempo de compilao. Essas
propriedades se mantm para muitos programas de inteiros. Por exemplo, um
bom previsor esttico tem taxa de erro de previso de cerca de 16% para quatro
principais programas SPEC92 de inteiros, e um previsor de hardware tem taxa de
erro de previso de menos de 10%. Como as instrues especuladas podem atrasar
a computao quando a previso incorreta, essa diferena significativa. Um
resultado dessa diferena que mesmo os processadores escalonados estaticamente
normalmente incluem previsores de desvio dinmicos.
j A especulao baseada em hardware mantm um modelo de exceo
completamente preciso, at mesmo para instrues especuladas. As tcnicas recentes
baseadas em software tm acrescentado suporte especial para permitir isso tambm.
j A especulao baseada em hardware no exige cdigo de compensao ou de
manuteno, que necessrio para mecanismos ambiciosos de especulao de
software.
j Tcnicas baseadas em compilador podem se beneficiar com a capacidade de ver
adiante na sequncia de cdigo, o que gera melhor escalonamento de cdigo do
que uma tcnica puramente controlada pelo hardware.
j A especulao baseada em hardware com escalonamento dinmico no exige
sequncias de cdigo diferentes para conseguir bom desempenho para diferentes
implementaes de uma arquitetura. Embora essa vantagem seja a mais difcil de
quantificar, ela pode ser a mais importante com o passar do tempo. Interessante
que essa foi uma das motivaes para o IBM 360/91. Por outro lado, arquiteturas
explicitamente paralelas mais recentes, como IA-64, acrescentaram uma flexibilidade
que reduz a dependncia de hardware inerente em uma sequncia de cdigo.

As principais desvantagens do suporte especulao no hardware so a complexidade e


os recursos de hardware adicionais exigidos. Esse custo de hardware precisa ser avaliado
contra a complexidade de um compilador, para uma tcnica baseada em software, e a
quantidade e a utilidade das simplificaes, em um processo que conte com tal compilador.

Alguns projetistas tentaram combinar as tcnicas dinmica e baseada em compilador para


conseguir o melhor de cada uma. Essa combinao pode gerar interaes interessantes e
3.12 Multithreading: usando suporte do ILP para explorar o paralelismo em nvel de thread 193

obscuras. Por exemplo, se moves condicionais forem combinados com a renomeao de


registrador, aparecer um efeito colateral sutil. Um move condicional que anulado ainda
precisa copiar um valor para o registrador de destino, pois foi renomeado no pipeline de
instrues. Essas interaes sutis complicam o processo de projeto e verificao, e tambm
podem reduzir o desempenho.
O processador Intel Itanium foi o computador mais ambicioso j projetado com base no
suporte de software ao ILP e especulao. Ele no concretizou as esperanas dos projetis-
tas, especialmente para cdigos de uso geral e no cientficos. Conforme as ambies dos
projetistas para explorar o ILP foram reduzidas luz das dificuldades discutidas na Seo
3.10, a maioria das arquiteturas se estabeleceu em mecanismos baseados em hardware
com taxas de despacho de trs ou quatro instrues por clock.

Execuo especulativa e o sistema de memria


Inerente a processadores que suportam execuo especulativa ou instrues condicionais
a possibilidade de gerar endereos invlidos que no existiriam sem execuo especulativa.
No s isso seria um comportamento incorreto se fossem tomadas excees de proteo,
mas os benefcios da execuo especulativa tambm seriam sobrepujados pelo overhead
de excees falsas. Portanto, o sistema de memria deve identificar instrues executadas
especulativamente e instrues executadas condicionalmente e suprimir a exceo corres-
pondente.
Seguindo um raciocnio similar, no podemos permitir que tais instrues faam com
que a cache sofra stall em uma falha, porque stalls desnecessrios poderiam sobrepujar
os benefcios da especulao. Portanto, esses processadores devem ser associados a caches
sem bloqueio.
Na verdade, a penalidade em uma falha em L2 to grande que, normalmente, os compila-
dores s especulam sobre falhas em L1. A Figura2.5, na pgina 72, mostra que para alguns
programas cientficos bem comportados o compilador pode sustentar mltiplas falhas
pendentes em L2 a fim de cortar efetivamente a penalidade de falha de L2. Novamente, para
que isso funcione, o sistema de memria por trs da cache deve fazer a correspondncia
entre os objetivos do compilador em nmero de acessos simultneos memria.

3.12 MULTITHREADING: USANDO SUPORTE DO ILP


PARA EXPLORAR O PARALELISMO EM NVEL DE THREAD
O tpico que cobrimos nesta seo, o multithreading, na verdade um tpico cruzado,
uma vez que tem relevncia para o pipelining e para os superescalares, para unidades de
processamento grfico (Cap.4) e para multiprocessadores (Cap.5). Apresentaremos o
tpico aqui e exploraremos o uso do multithreading para aumentar o throughput de uni-
processador usando mltiplos threads para ocultar as latncias de pipeline e memria. No
Captulo4, vamos ver como o multithreading fornece as mesmas vantagens nas GPUs e,
por fim, o Captulo5 vai explorar a combinao de multithreading e multiprocessamento.
Esses tpicos esto firmemente interligados, j que o multithreading uma tcnica primria
usada para expor mais paralelismo para o hardware. Num senso estrito, o multithreading
usa paralelismo em nvel de thread e, por isso, o assunto do Captulo5, mas seu papel
tanto na melhoria da utilizao de pipelines quanto nas GPUs nos motiva a introduzir
aqui esse conceito.
Embora aumentar o desempenho com o uso do ILP tenha a grande vantagem de ser
razoavelmente transparente para o programador, como j vimos, o ILP pode ser bastante
194 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

limitado ou difcil de explorar em algumas aplicaes. Em particular, com taxas razoveis


de despacho de instruo, as falhas de cache que vo para a memria ou caches fora do
chip provavelmente no sero ocultadas por um ILP disponvel. Obviamente, quando o
processador est paralisado esperando por uma falha de cache, a utilizao das unidades
funcionais cai drasticamente.
Uma vez que tentativas de cobrir paralisaes longas de memria com mais ILP tem eficcia
limitada, natural perguntar se outras formas de paralelismo em uma aplicao poderiam
ser usadas para ocultar atrasos de memria. Por exemplo, um sistema de processamento
on-line de transaes tem paralelismo natural entre as mltiplas pesquisas e atualizaes
que so apresentadas pelas requisies. Sem dvida, muitas aplicaes cientficas contm
paralelismo natural, uma vez que muitas vezes modelam a estrutura tridimensional,
paralela, da natureza, e essa estrutura pode ser explorada usando threads separados.
Mesmo aplicaes de desktop que usam sistemas operacionais modernos baseados no
Windows muitas vezes tm mltiplas aplicaes ativas sendo executadas, proporcionando
uma fonte de paralelismo.
O multithreading permite que vrios threads compartilhem as unidades funcionais de um
nico processador em um padro superposto. Em contraste, um mtodo mais geral de
explorar o paralelismo em nvel de thread (TLP) com um multiprocessador que tenha mlti-
plos threads independentes operando ao mesmo tempo e em paralelo. O multithreading,
entretanto, no duplica todo o processador, como ocorre em um multiprocessador. Em
vez disso, o multithreading compartilha a maior parte do ncleo do processador entre
um conjunto de threads, duplicando somente o status privado, como os registradores e
o contador de programa. Como veremos no Captulo5, muitos processadores recentes
incorporam mltiplos ncleos de processador em um nico chip e tambm fornecem
multithreading dentro de cada ncleo.
Duplicar o status por thread de um ncleo de processador significa criar um banco de
registradores separado, um PC separado e uma tabela de pginas separada para cada
thread. A prpria memria pode ser compartilhada atravs dos mecanismos de memria
virtual, que j suportam multiprogramao. Alm disso, o hardware deve suportar a
capacidade de mudar para um thread diferente com relativa rapidez. Em particular,
uma mudana de thread deve ser mais eficiente do que uma mudana de processador,
que em geral requer de centenas a milhares de ciclos de processador. Obviamente,
para o hardware em multithreading atingir melhoras de desempenho, um programa
deve conter mltiplos threads (s vezes dizemos que a aplicao multithreaded) que
possam ser executados de modo simultneo. Esses threads so identificados por um
compilador (em geral, a partir de uma linguagem com construes para paralelismo)
ou pelo programador.
Existem trs tcnicas principais para o multithreading. O multithreading de granularidade
fina alterna os threads a cada clock, fazendo com que a execuo de mltiplos threads seja
intercalada. Essa intercalao normalmente feita em um padro round-robin, pulando
quaisquer threads que estejam em stall nesse momento. Para tornar o multithreading fino
prtico, a CPU precisa ser capaz de trocar de threads a cada ciclo de clock. A principal
vantagem do multithreading de granularidade fina que ele pode esconder as falhas de
throughput que surgem de stalls curtos e longos, pois as instrues de outros threads
podem ser executadas quando um thread est em stall. A principal desvantagem do mul-
tithreading de granularidade fina que ele atrasa a execuo dos threads individuais, pois
um thread que estiver pronto para ser executado sem stalls ser atrasado pelas instrues
de outros threads. Ela troca um aumento no throughput do multithreading por uma perda
no desempenho (como medido pela latncia) de um nico thread. O processador Sun
3.12 Multithreading: usando suporte do ILP para explorar o paralelismo em nvel de thread 195

Niagara, que vamos examinar a seguir, usa multithreading de granularidade fina, assim
como as GPUs Nvidia, que examinaremos no Captulo4.
O multithreading de granularidade grossa foi inventado como alternativa para o multith-
reading de granularidade fina. O multithreading de granularidade grossa troca de threads
somente em stalls dispendiosos, como as falhas de cache de nvel 2. Essa troca alivia a
necessidade da comutao de threads ser essencialmente livre e muito menos provvel
que atrase o processador, pois as instrues de outros threads s sero enviadas quando
um thread encontrar um stall dispendioso.
Contudo, o multithreading de granularidade grossa apresenta uma grande desvantagem:
sua capacidade de contornar as falhas de throughput, especialmente de stalls mais curtos,
limitada. Essa limitao advm dos custos de partida do pipeline de multithreading de
granularidade grossa. Como uma CPU com multithreading de granularidade grossa envia
instrues de um nico thread quando ocorre um stall, o pipeline precisa ser esvaziado ou
congelado. O novo thread que inicia a execuo aps o stall precisa preencher o pipeline
antes que as instrues sejam capazes de terminar. Devido a esse overhead de partida, o
multithread de granularidade grossa muito mais til para reduzir as penalidades dos
stalls de alto custo, quando o preenchimento do pipeline insignificante em comparao
com o tempo do stall. Muitos projetos de pesquisa tm explorado o multithreading de
granularidade grossa, mas nenhum grande processador atual usa essa tcnica.
A implementao mais comum do multithreading chamada multithreading simultneo
(SMT). O multithreading simultneo uma variao do multithreading de granularidade
grossa que surge naturalmente quando implementado em um processador de mltiplo
despacho, escalonado dinamicamente. Assim como ocorre com outras formas de mul-
tithreading, o SMT usa o paralelismo em nvel de thread para ocultar eventos com grande
latncia em um processador, aumentando o uso das unidades funcionais. A principal
caracterstica do SMT que a renomeao de registrador e o escalonamento dinmico
permitem que mltiplas instrues de threads independentes sejam executadas sem
considerar as dependncias entre eles; a resoluo das dependncias pode ser manipulada
pela capacidade de escalonamento dinmico.
A Figura3.28 ilustra conceitualmente as diferenas na capacidade de um processador
explorar os recursos de um superescalar para as seguintes configuraes de processador:
j Um superescalar sem suporte para multithreading
j Um superescalar com multithreading de granularidade grossa
j Um superescalar com multithreading de granularidade fina
j Um superescalar com multithreading simultneo
No superescalar sem suporte para multithreading, o uso dos slots de despacho limitado
pela falha de ILP, incluindo ILP para ocultar a memria de latncia. Devido ao com-
primento das falhas das caches L2 e L3, grande parte do processador pode ficar ociosa.
No superescalar com multithreading de granularidade grossa, os stalls longos so par-
cialmente escondidos pela troca por outro thread que usa os recursos do processador.
Embora isso reduza o nmero de ciclos de clock completamente ociosos, dentro de cada
ciclo de clock as limitaes do ILP ainda levam a ciclos ociosos. Alm do mais, como em
um processador com multithreading de granularidade grossa a troca de thread s ocorre
quando existe um stall e o novo thread possui um perodo de partida, provavelmente res-
taro alguns ciclos totalmente ociosos.
No caso de granularidade fina, a intercalao de threads elimina slots totalmente vazios.
Alm disso, j que o thread que envia instrues mudado a cada ciclo de clock, operaes
196 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

FIGURA 3.28 Como quatro tcnicas diferentes utilizam os slots de despacho de um processador
superescalar.
A dimenso horizontal representa a capacidade de despacho de instruo em cada ciclo de clock. A dimenso
vertical representa uma sequncia de ciclos de clock. Uma caixa vazia (branca) indica que o slot de despacho
correspondente no usado nesse ciclo de clock. Os tons de cinza e preto correspondem a quatro threads
diferentes nos processadores de multithreading. Preto tambm usado para indicar os slots de despacho
ocupados no caso do superescalar sem suporte para multithreading. Sun T1 e T2 (tambm conhecidos como
Niagara) so processadores multithread de granularidade fina, enquanto os processadores Intel Core i7 e IBM
Power7 usam SMT. O T2 possuiu oito threads, o Power7 tem quatro, e o Intel i7 tem dois. Em todos os SMTs
existentes, as instrues so enviadas de um thread por vez. A diferena do SMT que a deciso subsequente
de executar uma instruo desacoplada e pode executar as operaes vindo de diversas instrues diferentes
no mesmo ciclo de clock.

com maior latncia podem ser ocultadas. Como o despacho de instruo e a execuo
esto conectados, um thread s pode enviar as instrues que estiverem prontas. Em uma
pequena largura de despacho isso no um problema (um ciclo est ocupado ou no),
porque o multithreading de granularidade fina funciona perfeitamente para um proces-
sador de despacho nico e o SMT no faria sentido. Na verdade, no Sun T2 existem duplos
despachos por clock, mas eles so de threads diferentes. Isso elimina a necessidade de
implementar a complexa tcnica de escalonamento dinmico e, em vez disso, depende
de ocultar a latncia com mais threads.
Se um threading de granularidade fina for implementado sobre um processador com
escalonamento dinmico, de mltiplos despachos, o resultado ser SMT. Em todas as
implementaes SMT existentes, todos os despachos vm de um thread, embora instrues
de threads diferentes possam iniciar sua execuo no mesmo ciclo, usando o hardware de
escalonamento dinmico para determinar que instrues esto prontas. Embora a Figu-
ra3.28 simplifique bastante a operao real desses processadores, ela ilustra as vantagens
de desempenho em potencial do multithreading em geral e do SMT em particular, em
processadores escalonveis dinamicamente.
Multithreading simultneos usam a caracterstica de que um processador escalonado
dinamicamente j tem muitos dos mecanismos de hardware necessrios para dar suporte
ao mecanismo, incluindo um grande conjunto de registradores virtual. O multithreading
pode ser construdo sobre um processador fora de ordem, adicionando uma tabela de
renomeao por thread, mantendo PCs separados e fornecendo a capacidade de confirmar
instrues de mltiplos threads.
3.12 Multithreading: usando suporte do ILP para explorar o paralelismo em nvel de thread 197

Eficcia do multithreading de granularidade fina no Sun T1


Nesta seo, usaremos o processador Sun T1 para examinar a capacidade do multithrea-
ding de ocultar a latncia. O T1 um multiprocessador multicore com multithreading
de granularidade fina introduzido pela Sun em 2005. O que torna o T1 especialmente
interessante que ele quase totalmente focado na explorao do paralelismo em nvel
de thread (TLP) em vez do paralelismo em nvel de instruo (ILP). O T1 abandonou o
foco em ILP (pouco depois os processadores ILP mais agressivos serem introduzidos),
retornou estratgia simples de pipeline e focou na explorao do TLP, usando tanto
mltiplos ncleos como multithreading para produzir throughput.
Cada processador T1 contm oito ncleos de processador, cada qual dando suporte a qua-
tro threads. Cada ncleo de processador consiste em um pipeline simples de seis estgios
e despacho nico (um pipeline RISC padro de cinco estgios, como aquele do Apndice
C, com um estgio a mais para a comutao de threads). O T1 utiliza o multithreading de
granularidade fina (mas no SMT), passando para um novo thread a cada ciclo de clock, e
os threads que esto ociosos por estarem esperando devido a um atraso no pipeline ou falha
de cache so contornados no escalonamento. O processador fica ocioso somente quando
os quatro threads esto ociosos ou em stall. Tanto loads quanto desvios geram um atraso
de trs ciclos, que s pode ser ocultado por outros threads. Um nico conjunto de unidades
funcionais de ponto flutuante compartilhado pelos oito ncleos, pois o desempenho de
ponto flutuante no foi o foco para o T1. A Figura3.29 resume o processador T1.

Desempenho do multithreading do T1 de ncleo nico


O T1 faz do TLP o seu foco, atravs do multithreading em um ncleo individual, e tambm
atravs do uso de muitos ncleos simples em um nico substrato. Nesta seo, vamos
examinar a eficcia do T1 em aumentar o desempenho de um nico ncleo atravs de
multithreading de granularidade fina. No Captulo5, vamos voltar a examinar a eficcia
de combinar multithreading com mltiplos ncleos.
Examinamos o desempenho do T1 usando trs benchmarks orientados para servidor:
TPC-C, SPECJBB (o SPEC Java Business Benchmark) e SPECWeb99. J que mltiplos
threads aumentam as demandas de memria de um nico processador, eles poderiam
sobrecarregar o sistema de memria, levando a redues no ganho em potencial do
multithreading. A Figura3.30 mostra o aumento relativo na taxa de falha e a latncia
quando rodamos com um thread por ncleo em comparao a rodar quatro threads por
ncleo para o TPC-C. As taxas de falha e as latncias de falha aumentam, devido maior

FIGURA 3.29 Resumo do processador T1.


198 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

FIGURA 3.30 Mudana relativa nas taxas de falha e latncias de falha ao executar com um thread por
ncleo contra quatro threads por ncleo no benchmark TPC-C.
As latncias so o tempo real para retornar os dados solicitados aps uma falha. No caso de quatro threads, a
execuo dos outros threads poderia ocultar grande parte dessa latncia.

conteno no sistema de memria. O aumento relativamente pequeno na latncia de falha


indica que o sistema de memria ainda tem capacidade no utilizada.
Ao examinarmos o comportamento de uma mdia de threads, podemos entender a interao
entre multithreading e processamento paralelo. A Figura3.31 mostra a porcentagem de ciclos
para os quais um thread est executando, pronto mas no executando e no pronto. Lem-
bre-se de que no pronto no significa que o ncleo com esse thread est em stall; somente
quando todos os quatro threads estiverem no prontos que o ncleo gerar um stall.
Os threads podem estar no prontos devido a falhas de cache, atrasos de pipeline (surgindo
de instrues de longa latncia, como desvios, loads, ponto flutuante ou multiplicao/
diviso de inteiros) e uma srie de efeitos menores. A Figura3.32 mostra a frequncia
relativa dessas vrias causas. Os efeitos de cache so responsveis pelo thread no estando
pronto em 50-75% do tempo, com falhas de instruo L1, falhas de dados L1 e falhas

FIGURA 3.31 Desmembramento de um thread mediano.


Executando indica que o thread envia uma instruo nesse ciclo. Pronto, no escolhido significa que ele poderia
ser enviado, mas outro thread foi escolhido, e no pronto indica que o thread est esperando o trmino de um evento
(um atraso de pipeline ou falha de cache, por exemplo).
3.12 Multithreading: usando suporte do ILP para explorar o paralelismo em nvel de thread 199

FIGURA 3.32 Desmembramento de causas para um thread no pronto.


A contribuio para a categoria outros varia. No TPC-C, o buffer de armazenamento cheio o contribuinte maior; no
SPEC-JBB, as instrues indivisveis so o contribuinte maior; e, no SPECWeb99, ambos os fatores contribuem.

L2 contribuindo de forma aproximadamente igual. Os atrasos em potencial do pipeline


(chamados atrasos de pipeline) so mais severos no SPECJBB e podem surgir de sua
frequncia de desvio mais alta.
A Figura3.33 mostra o CPI por thread e por ncleo. J que o T1 um processador multith-
readed de granularidade fina com quatro threads por ncleo, com paralelismo suficiente,
o CPI ideal por thread seria quatro, uma vez que isso significaria que cada thread estaria
consumindo um a cada quatro ciclos. O CPI ideal por ncleo seria um. Em 2005, o IPC
para esses benchmarks, sendo executados em ncleos ILP agressivos, seria similar ao visto
em um ncleo T1. Entretanto, o ncleo T1 tinha tamanho muito modesto em comparao
com os ncleos ILP agressivos de 2005, porque o T1 tinha oito ncleos em comparao aos
dois a quatro oferecidos por outros processadores da mesma poca. Como resultado,
em 2005, quando foi lanado, o processador Sun T1 tinha o mesmo desempenho em
aplicaes de nmero inteiro com TLP extensivo e desempenho de memria exigente,
como o SPECJBB e cargas de trabalho de processamento de transao.

Eficcia no multithreading simultneo em processadores


superescalares
Uma pergunta-chave : Quanto desempenho pode ser ganho com a implementao do
SMT? Quando essa pergunta foi explorada em 2000-2001, os pesquisadores presumiram
que os superescalares dinmicos ficariam maiores nos cinco anos seguintes, admitindo
6-8 despachos por clock com escalonamento dinmico especulativo, muitos loads e stores

FIGURA 3.33 O CPI por thread, o CPI por ncleo, o CPI efetivo para oito ncleos e o IPC eficiente (inverso
da CPI) para o processador T1 de oito ncleos.
200 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

simultneos, grandes caches primrias e 4-8 contextos com busca simultnea de mltiplos
contextos. Mas nenhum processador chegou perto desse nvel.
Em consequncia, os resultados de pesquisa de simulao que mostraram ganhos para
cargas de trabalho multiprogramadas de duas ou mais vezes so irrealistas. Na prtica,
as implementaes existentes do SMT oferecem dois contextos com busca de apenas um,
alm de capacidades de despacho mais modestas. O resultado disso que o ganho do
SMT tambm mais modesto.
Por exemplo, no Pentium 4 Extreme, implementado nos servidores HP-Compaq, o uso
do SMT gera melhoria de desempenho de 1,01 quando executa o benchmark SPECintRate
e cerca de 1,07 quando executa o benchmark SPECfpRate. Em um estudo separado, Tuck
e Tullsen (2003) observam que os benchmarks paralelos SPLASH informam ganhos de
velocidade de 1,02-1,67, com ganho mdio de velocidade de cerca de 1,22.
Com a disponibilidade de medidas completas e esclarecedoras recm-feitas por Es-
maeilzadeh et al. (2011), podemos examinar os benefcios de desempenho e energia de
empregar SMT em um nico ncleo i7 usando um conjunto de aplicaes multithreaded.
Os benchmarks que usamos consistem em uma coleo de aplicaes cientficas paralelas e
um conjunto de programas Java multithreaded dos conjuntos DaCapo e SPEC Java, como
resumido na Figura3.34, que mostra a taxa de desempenho e a taxa de eficincia energtica
dos benchmarks executados em um ncleo do i7 com o SMT desligado e ligado.Figura3.35

FIGURA 3.34 Benchmarks paralelos usados aqui para examinar multithreading e tambm no Captulo5 para examinar o
multiprocessamento com um i7.
A metade superior da figura consiste em benchmarks PARSEC coletados por Biena et al. (2008). Os benchmarks PARSEC foram criados para indicar
aplicaes paralelas intensas em termos de computao, que seriam apropriadas para processadores multicore. A metade inferior consiste em benchmarks
Java multithreaded do conjunto DaCapo (ver Blackburn et al., 2006) e pjbb2005da SPEC. Todos esses benchmarks contm algum paralelismo. Outros
benchmarks Java nas cargas de trabalho DaCapo e SPEC Java usam threads mltiplos, mas tm pouco ou nenhum paralelismo e, portanto, no so usados
aqui. Ver informaes adicionais sobre as caractersticas desses benchmarks em relao s medidas aqui e no Captulo5 (Esmaeilzadeh et al., 2011).
3.12 Multithreading: usando suporte do ILP para explorar o paralelismo em nvel de thread 201

FIGURA 3.35 O ganho de velocidade usando multithreading em um ncleo de um processador i7 ,


em mdia, de 1,28 para os benchmarks Java e de 1,31 para os benchmarks PARSEC (usando uma mdia
harmnica no ponderada, que implica uma carga de trabalho em que o tempo total gasto executando cada
benchmark no conjunto-base de thread nico seja o mesmo).
A eficincia energtica tem mdias de 0,99 e 1,07, respectivamente (usando a mdia harmnica). Lembre-se de que
qualquer coisa acima de 1,0 para a eficincia energtica indica que o recurso reduz o tempo de execuo mais do que
aumenta a potncia mdia. Dois dos benchmarks Java experimentam pouco ganho de velocidade e, por causa disso,
tm efeito negativo sobre a eficincia energtica. O Turbo Boost est desligado em todos os casos. Esses dados foram
coletados e analisados por Esmaeilzadeh et al. (2011) usando o build Oracle (Sun) Hotspot 16.3-b01 Java 1.6.0 Virtual
Machine e o compilador nativo gcc v4.4.1.

(Ns plotamos a taxa de eficincia energtica, que o inverso do consumo de energia, de


modo que, assim como no ganho de velocidade, uma taxa maior seja melhor.)
A mdia harmnica do ganho de velocidade para o Benchmark Java 1,28, apesar de os dois
benchmarks verificarem pequenos ganhos. Esses dois benchmarks, pjbb2055 e tradebeans,
embora multithreaded, tm paralelismo limitado. Eles so includos porque so tpicos de
um benchmark multithreaded que pode ser executado em um processador SMT com a es-
perana de extrair algum desempenho, que eles obtm de modo limitado. Os benchmarks
PARSEC obtm ganhos de velocidade um pouco melhores do que o conjunto completo de
benchmarks Java (mdia harmnica de 1,31). Se o tradebeans e o pjbb2005 fossem omiti-
dos, na verdade a carga de trabalho Java teria um ganho de velocidade significativamente
melhor (1,39) do que os benchmarks PARSEC. (Ver discusso sobre a implicao de usar
a mdia harmnica para resumir os resultados na legenda da Figura3.36.)
O consumo de energia determinado pela combinao do ganho de energia e pelo
aumento no consumo de potncia. Para os benchmarks Java os SMT proporcionam,
em mdia, a mesma eficincia energtica que os no SMT (mdia de 1,0), mas essa
eficincia reduzida pelos dois benchmarks de desempenho ruim. Sem o tradebeans
e o pjbb2005, a eficincia energtica mdia para os benchmarks Java de 1,06, o que
quase to bom quanto os benchmarks PARSEC. Nos benchmarks PARSEC, o SMT
reduz a energia em 1 (1/1,08)=7%. Tais melhorias de desempenho de reduo de
202 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

FIGURA 3.36 A estrutura bsica do pipeline A8 de 13 estgios.


So usados trs ciclos para a busca de instrues e quatro para a decodificao de instrues, alm de um pipeline
inteiro de cinco ciclos. Isso gera uma penalidade de erro de previso de desvio de 13 ciclos. A unidade de busca de
instrues tenta manter a fila de instrues de 12 entradas cheia.

energia so muito difceis de encontrar. Obviamente, a potncia esttica associada ao SMT


paga nos dois casos, por isso os resultados provavelmente exageram um pouco nos
ganhos de energia.
Esses resultados mostram claramente que o SMT em um processador especulativo agressivo
com suporte extensivo para SMT pode melhorar o desempenho em eficincia energtica, o
que as tcnicas ILP mais agressivas no conseguiram. Em 2011, o equilbrio entre oferecer
mltiplos ncleos mais simples e menos ncleos mais sofisticados mudou em favor de
mais ncleos, com cada ncleo sendo um superescalar com 3-4 despachos com SMT
suportando 2-4 threads. De fato, Esmaeilzadeh et al. (2011) mostram que as melhorias
de energia derivadas do SMT so ainda maiores no Intel i5 (um processador similar ao i7,
mas com caches menores e taxa menor de clock) e o Intel Atom (um processador 80x86
projetado para o mercado de netbooks e descrito na Seo3.14).

3.13 JUNTANDO TUDO: O INTEL CORE I7 E O ARM


CORTEX-A8
Nesta seo exploraremos o projeto de dois processadores de mltiplos despachos: o ARM
Cortex-A8, que usado como base para o processador Apple A9 no iPad, alm de ser o
processador no Motorola Droid e nos iPhones 3GS e 4, e o Intel Core i7, um processador
sofisticado especulativo, escalonado dinamicamente, voltado para desktops sofisticados
e aplicaes de servidor. Vamos comear com o processador mais simples.

O ARM Cortex-A8
O A8 um superescalar com despacho duplo, escalonado estaticamente com deteco
dinmica de despacho que permite ao processador enviar uma ou duas instrues por
clock. A Figura3.36 mostra a estrutura bsica do pipeline de 13 estgios.
O A8 usa um previsor dinmico de desvio com um buffer associativo por conjunto de
duas vias com 512 entradas para alvos de desvio e um buffer global de histrico de 4K
entradas, que indexado pelo histrico de desvios e pelo PC atual. Caso o buffer de alvo
de desvio erre, uma previso ser obtida do buffer global de histrico, que poder ser usado
para calcular o endereo do desvio. Alm disso, uma pilha de retorno de oito entradas
mantida para rastrear os endereos de retorno. Uma previso incorreta resulta em uma
penalidade de 13 ciclos quando o pipeline descartado.
3.13 Juntando tudo: O Intel Core i7 e o ARM Cortex-A8 203

A Figura3.37 mostra o pipeline de decodificao de instruo. At duas instrues por


clock podem ser enviadas usando um mecanismo de despacho em ordem. Uma simples
estrutura de scoreboard usada para rastrear quando uma instruo pode ser enviada. Um
par de instrues dependentes pode ser processado atravs da lgica de despacho, mas,
obviamente, elas sero serializadas no scoreboard, a menos que possam ser enviadas para
que os ganhos de avano possam resolver a dependncia.
A Figura3.38 mostra o pipeline de execuo para o processador A8. A instruo 1 ou
a instruo 2 pode ir para o pipeline de load/store. O contorno total suportado entre
os pipelines. O pipeline do ARM Cortex-A8 usa um superescalar simples escalonado
estaticamente de dois despachos para permitir uma frequncia do clock razoavelmente
alta com menor potncia. Em contraste, o i7 usa uma estrutura de pipeline especulativa
razoavelmente agressiva, escalonada dinamicamente com quatro despachos.

FIGURA 3.37 Decodificao de instrues em cinco estgios do A8.


No primeiro estgio, um PC produzido pela unidade de busca (seja do buffer de alvo de desvio seja do incrementador
de PC) usado para atingir um bloco de 8 bytes da cache. At duas instrues so decodificadas e colocadas na fila
de decodificao. Se nenhuma instruo for um desvio, o PC incrementado para a prxima busca. Uma vez na fila de
decodificao, a lgica de scoreboard decide quando as instrues podem ser enviadas. No despacho, os registradores
operandos so lidos. Lembre-se de que em um scoreboard simples os operandos sempre vm dos registradores. Os
registradores operandos e o opcode so enviados para a parte de execuo de instrues dopipeline.

FIGURA 3.38 Decodificao de cinco estgios do A8.


Operaes de multiplicao so sempre realizadas no pipeline 0da ALU.
204 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

Desempenho do pipeline do A8
O A8 tem um CPI ideal de 0,5, devido a sua estrutura de despacho duplo. Os stalls de
pipeline podem surgir de trs fontes:
1. Hazards funcionais, que ocorrem porque duas instrues adjacentes selecionadas
simultaneamente para despacho usam o mesmo pipeline funcional. Como o A8
escalonado estaticamente, tarefa do compilador tentar evitar tais conflitos.
Quando eles no podem ser evitados, o A8 pode enviar, no mximo, uma instruo
nesse ciclo.
2. Hazard de dados, que so detectados precocemente no pipeline e podem causar o
stall das duas instrues (se a primeira no puder ser enviada, a segunda sempre
sofrer stall) ou da segunda instruo de um par. O compilador responsvel por
impedir tais stalls sempre que possvel.
3. Hazards de controle que surgem somente quando desvios so previstos
incorretamente.
Alm dos stalls de pipeline, as falhas de L1 e L2 causam stalls.
A Figura3.39 mostra uma estimativa dos fatores que podem contribuir para o CPI real
dos benchmarks Minnespec, que vimos no Captulo2. Como podemos ver, os atrasos

FIGURA 3.39 A composio estimada do CPI no ARM A8 mostra que os stalls de pipeline so a principal
adio ao CPI base.
O eon merece meno especial, j que realiza clculos de grficos baseados em nmeros inteiros (rastreamento de
raio) e tem poucas falhas de cache. Ele computacionalmente intenso, com uso pesado de multiplicao, e o nico
pipeline de multiplicao se torna um grande gargalo. Essa estimativa obtida usando as taxas de falha e penalidades
de L1 e L2 para calcular os stalls de L1 e L2 gerados por instruo. Estas so subtradas do CPI medido por um
simulador detalhado para obter os stalls de pipeline. Todos esses stalls incluem as trs ameaas e efeitos menores,
como erro de previso de trajeto.
3.13 Juntando tudo: O Intel Core i7 e o ARM Cortex-A8 205

de pipeline, e no os stalls de memria, so os maiores contribuidores para o CPI. Esse


resultado se deve parcialmente ao efeito de o Minnespec ter uma pegada menor de cache
do que o SPEC completo ou outros programas grandes.
A compreenso de que os stalls de pipeline criaram perdas de desempenho significativas
provavelmente teve um papel importante na deciso de fazer do ARM Cortex-A8 um
superescalar escalonado dinamicamente. O A9, como o A8, envia at duas instrues por
clock, mas usa escalonamento dinmico e especulao. At quatro instrues pendentes
(duas ALUs, um load/store ou PF/multimdia e um desvio) podem comear sua execuo
em um ciclo de clock. O A9 usa um previsor de desvio mais poderoso, pr-fetch na cache
de instruo e uma cache de dados L1 sem bloqueio. A Figura3.40 mostra que o A9
tem desempenho melhor que o A8 por um fator de 1,28, em mdia, supondo a mesma
frequncia do clock e configuraes de cache quase idnticas.

O Intel Core i7
O i7 usa uma microestrutura especulativa agressiva fora de ordem com pipelines razoa-
velmente profundos com o objetivo de atingir alto throughput de instrues combinando
mltiplos despachos e altas taxas de clock. A Figura3.41 mostra a estrutura geral do
pipeline do i7. Vamos examinar o pipeline comeando com a busca de instrues e
continuando rumo confirmao de instruo, seguindo os passos mostrados na figura.
1. Busca de instrues. O processador usa um buffer de endereos-alvo de desvio
multinveis para atingir um equilbrio entre velocidade e preciso da previso. H
tambm uma pilha de endereo de retorno para acelerar o retorno de funo. Previses

FIGURA 3.40 A taxa de desempenho do A9, comparada do A8, ambos usando um clock de 1GHz
e os mesmos tamanhos de cache para L1 e L2, mostra que o A9 cerca de 1,28 vez mais rpido.
Ambas as execues usam cache primria de 32 KB e cache secundria de 1 MB, que associativo de conjunto
de oito vias para o A8 e 16 vias para o A9. Os tamanhos de bloco nas caches so de 64 bytes para o A8 e de 32
bytes para o A9. Como mencionado na legenda da Figura3.39, o eon faz uso intenso de multiplicao de inteiros,
e a combinao de escalonamento dinmico e um pipeline de multiplicao mais rpido melhora significativamente
o desempenho no A9. O twolf experimenta ligeira reduo de velocidade, provavelmente devido ao fato de que seu
comportamento de cache pior com o tamanho menor de bloco de L1 do A9.
206 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

FIGURA 3.41 A estrutura de pipeline do Intel Core i7 mostrada com os componentes do sistema de memria.
A profundidade total do pipeline de 14 estgios, com erros de previso de desvio custando 17 ciclos. Existem
48 buffers de carregamento e 32 de armazenamento. As seis unidades funcionais independentes podem comear
a execuo de uma micro-op no mesmo ciclo.

incorretas causam uma penalidade de cerca de 15 ciclos. Usando os endereos


previstos, a unidade de busca de instruo busca 16 bytes da cache de instruo.
2. Os 16 bytes so colocados no buffer de pr-decodificao de instruo nesse
passo, um processo chamado fuso macro-op realizado. A fuso macro-op toma as
combinaes de instruo como comparao, seguido por um desvio, e as funde
em uma nica operao. O estgio de pr-decodificao tambm quebra os 16 bytes
em instrues x86 individuais. Essa pr-decodificao no trivial, uma vez que o
tamanho de uma instruo x86 pode ser de 1-17 bytes e o pr-decodificador deve
examinar diversos bytes antes de saber o comprimento da instruo. Instrues
x86 individuais (incluindo algumas instrues fundidas) so colocadas na fila de
instrues de 18 entradas.
3.13 Juntando tudo: O Intel Core i7 e o ARM Cortex-A8 207

3. Decodificao micro-op. Instrues x86 individuais so traduzidas em micro-ops.


Micro-ops so instrues simples, similares s do MIPS, que podem ser executadas
diretamente pelo pipeline. Essa tcnica de traduzir o conjunto de instrues x86 em
operaes simples mais fceis de usar em pipeline foi introduzida no Pentium Pro
em 1997 e tem sido usada desde ento. Trs dos decodificadores tratam instrues
x86 que as traduzem diretamente em uma micro-op. Para instrues x86 que tm
semntica mais complexa, existe um mquina de microcdigo que usada para
produzir a sequncia de micro-ops. Ela pode produzir at quatro micro-ops a cada
ciclo e continua at que a sequncia de micro-ops necessria tenha sido gerada. As
micro-ops so posicionadas de acordo com a ordem das instrues x86 no buffer
de micro-ops de 28 entradas.
4. O buffer de micro-op realiza deteco e microfuso. Se houver uma sequncia
pequena de instrues (menos de 28 instrues ou 256 bytes de comprimento)
que contenham um loop, o detector de fluxo de loop vai encontrar o loop e enviar
diretamente as micro-ops do buffer, eliminando a necessidade de ativar os estgios
de busca de instruo e decodificao da instruo. A microfuso combina pares de
instrues, como load/operao ALU e a operao ALU/store, e as envia para uma
nica estao de reserva (onde elas ainda podem ser enviadas independentemente),
aumentando assim o uso do buffer. Em um estudo da arquitetura do Intel Core, que
tambm incorpora microfuso e macrofuso, Bird et al. (2007) descobriram que a
microfuso tinha pouco impacto no desempenho, enquanto a macrofuso parece
ter um impacto positivo modesto no desempenho com inteiros e pouco impacto
sobre o desempenho com ponto flutuante.
5. Realizar o despacho da instruo bsica. Buscar a localizao do registrador nas
tabelas de registro, renomear os registradores, alocar uma entrada no buffer
de reordenao e buscar quaisquer resultados dos registradores ou do buffer de
reordenao antes de enviar as micro-ops para as estaes de reserva.
6. O i7 usa uma estao de reserva de 36 entradas centralizada compartilhada por
seis unidades funcionais. At seis micro-ops podem ser enviadas para as unidades
funcionais a cada ciclo de clock.
7. As micro-ops so executadas pelas unidades funcionais individuais e ento os
resultados so enviados de volta para qualquer estao de reserva, alm da unidade
de remoo de registrador, onde elas vo atualizar o status do registrador, uma vez
que se saiba que a instruo no mais especulativa. A entrada correspondente
instruo no buffer de reordenao marcada como completa.
8. Quando uma ou mais instrues no incio do buffer de reordenao so marcadas
como completas, as gravaes pendentes na unidade de remoo de registrador so
executadas e as instrues so removidas do buffer de reordenao.

Desempenho do i7
Em sees anteriores, ns examinamos o desempenho do previsor de desvio do i7 e
tambm o desempenho do SMT. Nesta seo, examinaremos o desempenho do pipeline
de thread nico. Por causa da presena de especulao agressiva e de caches sem bloqueio,
difcil avaliar com preciso a distncia entre o desempenho idealizado e o desempenho
real. Como veremos, poucos stalls ocorrem, porque as instrues no podem enviar. Por
exemplo, somente cerca de 3% dos loads so atrasados, porque nenhuma estao de
reserva est disponvel. A maioria das falhas vem de previses incorretas de desvio ou
de falhas de cache. O custo de uma previso incorreta de desvio de 15 ciclos, enquanto
o custo de uma falha de L1 de cerca de 10 ciclos. As falhas de L2 so cerca de trs vezes
mais caras do que uma falha de L1, e as falhas de L3 custam cerca de 13 vezes o custo
de uma falha de L1 (130-135 ciclos)! Embora o processador tente encontrar instrues
208 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

alternativas para executar para falhas de L3 e algumas falhas de L2, provvel que alguns
dos buffers sejam preenchidos antes de a falha se completar, fazendo o processador parar
de enviar instrues.
Para examinar o custo de previses e especulaes incorretas, a Figura3.42 mostra a frao
do trabalho (medida pelos nmeros de micro-ops enviadas para o pipeline) que no so
removidas (ou seja, seus resultados so anulados) em relao a todos os despachos de
micro-op. Para o sjeng, por exemplo, 25% do trabalho desperdiado, j que 25% das
micro-ops enviadas nunca so removidas.
Observe que, em alguns casos, o trabalho perdido muito prximo das taxas de previso
incorreta mostradas na Figura3.5, na pgina 144, mas em vrios outros, como o mcf,
o trabalho perdido parece relativamente maior do que a taxa de previso incorreta. Em
tais casos, uma explicao provvel est no comportamento da memria. Com as taxas
muito altas de falha de cache de dados, o mcf vai enviar muitas instrues durante uma
especulao incorreta enquanto houver estaes de reserva suficientes disponveis para
as referncias de memria que sofreram stall. Quando a previso incorreta de desvio
detectada, as micro-ops correspondentes a essas instrues so descartadas, mas ocorre
um congestionamento nas caches, conforme as referncias especuladas memria tentam
ser completadas. No h modo simples de o processador interromper tais requisies de
cache depois que elas so iniciadas.
A Figura3.43 mostra o CPI geral para os 19 benchmarks SPEC CPU2006. Os benchmarks
inteiros tm um CPI de 1,06 com varincia muito grande (0,67 de desvio-padro). O
MCF e o OMNETTP so as principais discrepncias, ambos tendo um CPI de mais de 2,0,
enquanto a maioria dos outros benchmarks esto prximos de 1,0 ou so menores do
que isso (o gcc, o segundo maior, tem 1,23). Essa varincia decorrente de diferenas na
preciso da previso de desvio e nas taxas de falha de cache. Para os benchmarks inteiros,

FIGURA 3.42 A quantidade de trabalho perdido plotada tomando a razo entre micro-ops enviadas que
no so graduadas e todas as micro-ops enviadas.
Por exemplo, a razo de 25% para o sjeng, significando que 25% das micro-ops enviadas e executadas so jogadas
fora. Os dados apresentados nesta seo foram coletados pelo professor Lu Peng e pelo doutorando Ying Zhang,
ambos da Universidade do Estado da Louisiana.
3.14 Falcias e armadilhas 209

FIGURA 3.43 O CPI para os 19 benchmarks SPECCPU2006 mostra um CPI mdio de 0,83 para
os benchmarks PF e de inteiro, embora o comportamento seja bastante diferente.
No caso dos inteiros, os valores de CPI variam de 0,44-2,66, com desvio-padro de 0,77, enquanto no caso de PF a
variao de 0,62-1,38, com desvio-padro de 0,25. Os dados nesta seo foram coletados pelo professor Lu Peng e
pelo doutorando Ying Zhang, ambos da Universidade do Estado da Louisiana.

a taxa de falha de L2 o melhor previsor de CPI, e a taxa de falhas de L3 (que muito


pequeno) praticamente no tem efeito.
Os benchmarks de PF atingem desempenho maior com CPI mdio menor (0,89) e des-
vio-padro menor (0,25). Para os benchmarks de PF, L1 e L2 so igualmente importantes
para determinar o CPI, enquanto o L3 tem um papel menor mais significativo. Embora o
escalonamento dinmico e as capacidades de no bloqueio do i7 possam ocultar alguma
latncia de falha, o comportamento da memria de cache ainda responsvel por uma
grande contribuio. Isso refora o papel do multithreading como outro modo de ocultar
a latncia de memria.

3.14 FALCIAS E ARMADILHAS


Nossas poucas falcias se concentram na dificuldade de prever o desempenho e a eficincia
energtica e de extrapolar medidas nicas, como frequncia do clock ou CPI. Mostraremos
tambm que diferentes tcnicas de arquiteturas podem ter comportamentos radicalmente
diferentes para diferentes benchmarks.
Falcia. fcil prever o desempenho e a eficincia energtica de duas verses diferentes da mesma
arquitetura de conjunto de instrues, se mantivermos a tecnologia constante.
A Intel fabrica um processador para a utilizao final em netbooks e PDMs que muito
similar ao ARM A8 na sua microarquitetura: o chamado Atom 230. interessante que
o Atom 230 e o Core i7 920 tenham sido fabricados com a mesma tecnologia de 45nm
da Intel. A Figura3.44 resume o Intel Core i7, o ARM Cortex-A8 e o Intel Atom 230. Essas
similaridades proporcionam uma rara oportunidade de comparar diretamente duas micro-
arquiteturas radicalmente diferentes para o mesmo conjunto de instrues e, ao mesmo
210 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

FIGURA 3.44 Viso geral do Intel i7 920 de quatro ncleos, exemplo de um processador ARM A8 (com um L2 de 256 MB, L1 de 32 KB e sem
ponto flutuante) e o Intel ARM 230 mostrando claramente a diferena em termos de filosofia de projeto entre um processador voltado
para PMD (no caso do ARM) ou espao de netbook (no caso do Atom) e um processador para uso em servidores e desktops sofisticados.
Lembre-se de que o i7 inclui quatro ncleos, cada qual vrias vezes mais alto em desempenho do que o A8 ou o Atom de um ncleo. Todos esses
processadores so implementados em uma tecnologia comparvel de 45nm.

tempo, manter constante a tecnologia de fabricao fundamental. Antes de fazermos a


comparao, precisamos contar um pouco mais sobre o Atom 230.
Os processadores Atom implementam a arquitetura x86 em instrues similares s RISC
(como toda implementao x86 tem feito desde meados dos anos 1990). O Atom usa uma
micro-operao ligeiramente mais poderosa, que permite que uma operao aritmtica
seja pareada com um carregamento ou armazenamento. Isso significa que, em mdia,
para um mix tpico de instrues, somente 4% das instrues requerem mais de uma
micro-operao. As micro-operaes so executadas em um pipeline com profundidade
de 16, capaz de enviar duas instrues por clock, em ordem, como no ARM A8. H duas
ALUs de inteiro duplo, pipelines separados para soma de PF e outras operaes de PF, e
dois pipelines de operao de memria suportando execuo dupla, mais geral do que
o ARM A8, porm ainda limitadas pela capacidade de despacho em ordem. O Atom 230
tem cache de instruo de 32 KB e cache de dados de 24 KB, ambas suportadas por um L2
de 512 KB no mesmo substrato. (O Atom 230 tambm suporta multithreading com dois
threads, mas vamos considerar somente comparaes de um nico thread.) A Figura3.46
resume os processadores i7, A8 e Atom e suas principais caractersticas.
3.14 Falcias e armadilhas 211

Podemos esperar que esses dois processadores, implementados na mesma tecnologia


e com o mesmo conjunto de instrues, apresentassem comportamento previsvel em
termos de desempenho relativo e consumo de energia, o que significa que a potncia e o
desempenho teriam uma escala prxima linearidade. Examinamos essa hiptese usando
trs conjuntos de benchmarks. Os primeiros conjuntos so um grupo de benchmarks Java
de thread nico que vm dos benchmarks DaCapo, e dos benchmarks SPEC JVM98 (ver
discusso sobre os benchmarks e medidas em Esmaeilzadeh et al., 2011). O segundo e o
terceiro conjuntos so do SPEC CPU2006 e consistem, respectivamente, nos benchmarks
para inteiros e PF.
Como podemos ver na Figura3.45, o i7 tem desempenho significativamente maior do
que o do Atom. Todos os benchmarks so pelo menos quatro vezes mais rpidos no i7,
dois benchmarks SPECFP so mais de 10 vezes mais rpidos, e um benchmark SPECINT
executado mais de oito vezes mais rpido!
Como a razo das taxas de clock desses dois processadores de 1,6, a maior parte da
vantagem vem de um CPI muito menor para o i7: um fator de 2,8 para os benchmarks
Java, um fator de 3,1 para os benchmarks SPECINT e um fator de 4,3 para os benchmarks
SPECFP.
Mas o consumo mdio de energia para o i7 est pouco abaixo de 43W, enquanto o consu-
mo mdio de energia do Atom de 4,2W, ou cerca de um dcimo da energia! Combinar
o desempenho e a energia leva a uma vantagem na eficincia energtica para o Atom, que

FIGURA 3.45 O desempenho relativo e a eficincia energtica para um conjunto de benchmarks de thread nico mostram que o i7 920
4-10 vezes mais rpido do que o Atom 230, porm cerca de duas vezes menos eficiente em termos de potncia, em mdia!
O desempenho mostrado nas colunas como o i7 em relao ao Atom, como tempo de execuo (i7)/tempo de execuo (Atom). A energia mostrada
pela linha como energia(Atom)/energia(i7). O i7 nunca vence o Atom em eficincia energtica, embora seja essencialmente to bom em quatro
benchmarks, trs dos quais so de ponto flutuante. Os dados mostrados aqui foram coletados por Esmaelizadeh et al. (2011). Os benchmarks SPEC foram
compilados com otimizao sobre o uso do compilador-padro Intel, enquanto os benchmarks Java usam o Sun (Oracle) Hotspot Java VM. Somente
um ncleo est ativo no i7, e o resto est em modo de economia de energia profunda. O Turbo Boost usado no i7, que aumenta sua vantagem
de desempenho mas diminui levemente sua eficincia energtica relativa.
212 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

costuma ser mais de 1,5-2 vezes melhor! Essa comparao de dois processadores usando
a mesma tecnologia fundamental torna claro que as vantagens do desempenho de um
superescalar agressivo com escalonamento dinmico e especulao vm com significativa
desvantagem em termos de eficincia energtica.
Falcia. Processadores com CPIs menores sempre sero mais rpidos.
Falcia. Processadores com taxas de clock mais rpidas sempre sero mais rpidos.
A chave que o produto da CPI e a frequncia do clock determinam o desempenho. Com
alta frequncia do clock obtida por um pipelining longo, a CPU deve manter um CPI baixo
para obter o benefcio total do clock mais rpido. De modo similar, um processador sim-
ples com alta frequncia do clock mas CPI baixo pode ser mais lento.
Como vimos na falcia anterior, o desempenho e a eficincia energtica podem divergir
significativamente entre processadores projetados para ambientes diferentes, mesmo
quando eles tm o mesmo ISA. Na verdade, grandes diferenas em desempenho podem
aparecer at dentro de uma famlia de processadores da mesma companhia, projetados
todos para aplicaes de alto nvel. A Figura3.46 mostra o desempenho para inteiros e
PF de duas implementaes diferentes da arquitetura x86da Intel, alm de uma verso
da arquitetura Itanium, tambm da Intel.
O Pentium 4 foi o processador com pipeline mais agressivo j construdo pela Intel. Ele
usava um pipeline com mais de 20 estgios, tinha sete unidades funcionais e micro-ops
em cache no lugar de instrues x86. Seu desempenho relativamente inferior, dada a
implementao agressiva, foi uma indicao clara de que a tentativa de explorar mais ILP
(podia haver facilmente 50 operaes em ao) havia falhado. O consumo de energia do
Pentium era similar ao do i7, embora sua contagem de transistores fosse menor, j que
as caches primrias tinham metade do tamanho das do i7, e inclua somente uma cache
secundria de 2 MB, sem cache terciria.
O Intel Itanium uma arquitetura no estilo VLIW que, apesar da reduo potencial em
complexidade em comparao aos superescalares escalonados dinamicamente, nunca
atingiu taxas de clock competitivas versus os processadores x86da linha principal (embora
ele parea alcanar um CPI geral similar ao do i7). Ao examinar esses resultados, o leitor
deve ter em mente que eles usam diferentes tecnologias de implementao, o que d ao i7
uma vantagem em termos de velocidade de transistor, portando frequncia do clock para
um processador com pipeline equivalente. Mesmo assim, a grande variao no desempe-
nho mais de trs vezes entre o Pentium e o i7 surpreendente. A prxima armadilha
explica de onde vem uma significativa parte dessa vantagem.
Armadilha. s vezes maior e mais burro melhor.
No incio dos anos 2000, grande parte da ateno estava voltada para a construo de
processadores agressivos na explorao de ILP, incluindo a arquitetura Pentium 4, que

FIGURA 3.46 Trs diferentes processadores da Intel variam muito.


Embora o processador Itanium tenha dois ncleos e o i7 tenha quatro, somente um ncleo usado nesses benchmarks.
3.15 Comentrios finais: o que temos frente? 213

usava o pipeline mais longo j visto em um microprocessador, e o Intel Itanium, que tinha
a mais alta taxa de pico de despacho por clock j vista. O que se tornou rapidamente claro
foi que, muitas vezes, a maior limitao em explorar ILP era o sistema de memria. Embora
pipelines especulativos fora de ordem fossem razoavelmente bons em ocultar uma frao
significativa das penalidades de falha, 10-15 ciclos para uma falha de primeiro nvel, muitas
vezes eles faziam muito pouco para ocultar as penalidades para uma falha de segundo nvel,
que, quando ia para a memria principal, provavelmente era de 50-100 ciclos de clock.
O resultado foi que esses projetos nunca chegaram perto de atingir o pico de throughput
de instrues, apesar do grande nmero de transistores e das tcnicas extremamente sofis-
ticadas e inteligentes. A prxima seo discute esse dilema e o afastamento dos esquemas
de ILP mais agressivos em favor dos ncleos mltiplos, mas houve outra mudana, que
um exemplo dessa armadilha. Em vez de tentar ocultar ainda mais latncias de memria
com ILP, os projetistas simplesmente usaram os transistores para construir caches muito
maiores. O Itanium 2 e o i7 usam caches de trs nveis em comparao cache de dois
nveis do Pentium 4. No necessrio dizer que construir caches maiores muito mais
fcil do que projetar o pipeline com mais de 20 estgios do Pentium 4 e, a partir dos dados
da Figura3.46, parece ser tambm mais eficaz.

3.15 COMENTRIOS FINAIS: O QUE TEMOS FRENTE?


No incio de 2000, o foco era explorar o paralelismo em nvel de instruo. A Intel es-
tava prestes a lanar o Itanium, processador escalonado estaticamente com alta taxa de
despacho que contava com uma tcnica semelhante VLIW, com suporte intensivo do
compilador. Os processadores MIPS, Alpha e IBM, com execuo especulativa escalonada
dinamicamente, estavam na segunda gerao e se tornando maiores e mais rpidos. O
Pentium 4, que usava escalonamento especulativo, tambm havia sido anunciado naquele
ano com sete unidades funcionais e um pipeline com mais de 20 estgios de comprimento.
Mas havia algumas nuvens pesadas no horizonte.
Pesquisas como a abordada na Seo3.10 mostravam que levar o ILP muito adiante seria
extremamente difcil, e, embora as taxas de throughput de pico de instrues tivessem
aumentado em relao aos primeiros processadores especulativos de 3-5 anos antes, as
taxas sustentveis de execuo de instruo estavam aumentando muito mais lentamente.
Os cinco anos seguintes disseram muito. O Itanium acabou sendo um bom processador
de PF, mas apenas um processador de inteiros medocre. A Intel ainda produz a linha, mas
no h muitos usurios; a frequncia do clock est aqum da frequncia dos processadores
da linha principal da Intel, e a Microsoft no suporta mais o conjunto de instrues. O
Intel Pentium 4, embora tivesse bom desempenho, acabou sendo ineficiente em termos
de desempenho/watt (ou seja, uso de energia), e a complexidade do processador tornou
improvvel que mais avanos fossem possveis aumentando a taxa de despacho. Havia
chegado o fim de uma estrada de 20 anos atingindo novos nveis de desempenho em mi-
croprocessadores explorando o ILP. O Pentium 4 foi amplamente reconhecido como tendo
ido alm do ponto, e a agressiva e sofisticada microarquitetura Netburst foi abandonada.
Em 2005, a Intel e os demais fabricantes principais haviam renovado sua abordagem
para se concentrar em ncleos mltiplos. Um desempenho maior seria alcanado atravs
do paralelismo em nvel de thread, em vez de paralelismo em nvel de instruo, e a res-
ponsabilidade por usar o processador com eficincia mudaria bastante do hardware para
o software e para o programador. Essa mudana foi a mais significativa na arquitetura de
processador desde os primeiros dias do pipelining e do paralelismo em nvel de instruo,
cerca de 25 anos antes.
214 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

No mesmo perodo, os projetistas comearam a explorar o uso de um paralelismo em


nvel de dados como outra abordagem para obter desempenho. As extenses SIMD per-
mitiram aos microprocessadores de desktops e servidores atingir aumentos moderados
de desempenho para grficos e funes similares. E o que mais importante: as GPUs
buscaram o uso agressivo de SIMD, atingindo vantagens significativas de desempenho
para aplicaes com grande paralelismo em nvel de dados. Para aplicaes cientficas, tais
tcnicas representam uma alternativa vivel para o mais geral porm menos eficiente
paralelismo em nvel de thread explorado nos ncleos mltiplos. O Captulo4 vai
explorar esses desenvolvimentos no uso de paralelismo em nvel de dados.
Muitos pesquisadores anteviram uma grande reduo no uso de ILP, prevendo que proces-
sadores superescalares com dois despachos e nmeros maiores de ncleos seriam o futuro.
Entretanto, as vantagens de taxas de despacho ligeiramente maiores e a capacidade de
escalonamento dinmico especulativo para lidar com eventos imprevisveis, como falhas
de cache de primeiro nvel, levaram um ILP moderado a ser o principal bloco de cons-
truo nos projetos de ncleos mltiplos. A adio do SMT e a sua eficcia (tanto em
desempenho quanto em eficincia energtica) concretizaram ainda mais a posio das
tcnicas especulativas, fora de ordem, de despacho moderado. De fato, mesmo no mercado
de embarcados, os processadores mais novos (como o ARM Cortex-A9) introduziram es-
calonamento dinmico, especulao e taxas maiores de despacho.
muito improvvel que os futuros processadores tentem melhorar significativamente
a largura de despacho. simplesmente muito ineficiente, tanto do ponto de vista da
utilizao de silcio quanto da eficincia energtica. Considere os dados da Figura3.47,
que mostra os quatro processadores mais recentes da srie IBM Power. Ao longo da dcada
passada, houve uma modesta melhoria no suporte a ILP nos processadores Power, mas a
parte dominante do aumento no nmero de transistores (um fator de quase 7 do Power4
para o Power7), aumentou as caches e o nmero de ncleos por die. At mesmo a ex-
panso no suporte a SMT parece ser mais um foco do que um aumento no throughput
de ILP. A estrutura ILP do Power4 para o Power7 foi de cinco despachos para seis, de oito
unidades funcionais para 12 (mas sem aumento das duas unidades de carregamento/
armazenamento originais), enquanto o suporte a SMT foi de no existente para quatro
threads/processador. Parece claro que, mesmo para o processador ILP mais avanado em
2011 (o Power7), o foco foi deslocado para alm do paralelismo em nvel de instruo.

FIGURA 3.47 Caractersticas de quatro processadores IBM Power.


Todos foram escalonados dinamicamente, exceto o Power6, que esttico, e em ordem, e todos os processadores suportam dois pipelines de
carregamento/armazenamento. O Power6 tem as mesmas unidades funcionais que o Power5, exceto por uma unidade decimal. O Power7 usa DRAM para
a cache L3.
Estudos de caso e exerccios por Jason D. Bakos e Robert P. Colwell 215

Os Captulos 4 e 5 enfocam tcnicas que exploram o paralelismo em nvel de dados e o


paralelismo em nvel de thread.

3.16 PERSPECTIVAS HISTRICAS E REFERNCIAS


A Seo L.5 (disponvel on-line) contm uma anlise sobre o desenvolvimento do pipeli-
ning e do paralelismo em nvel de instruo. Apresentamos diversas referncias para leitura
adicional e explorao desses tpicos. A Seo L.5 cobre o Captulo3 e o Apndice H.

ESTUDOS DE CASO E EXERCCIOS POR JASON D. BAKOS


E ROBERT P. COLWELL
Estudo de caso: explorando o impacto das tcnicas
demicroarquiteturas
Conceitos ilustrados por este estudo de caso
j Escalonamento bsico de instruo, reordenao, despacho
j Mltiplo despacho e hazards
j Renomeao de registrador
j Execuo fora de ordem e especulativa
j Onde gastar recursos fora de ordem
Voc est encarregado de projetar uma nova microarquitetura de processador e tentando
descobrir como alocar melhor seus recursos de hardware. Quais das tcnicas de hardware
e software aprendidas neste captulo dever aplicar? Voc tem uma lista de latncias para
as unidades funcionais e para a memria, alm de algum cdigo representativo. Seu chefe
foi um tanto vago com relao aos requisitos de desempenho do seu novo projeto, mas
voc sabe, por experincia, que, com tudo o mais sendo igual, mais rpido geralmente
melhor. Comece com o bsico. A Figura3.48 apresenta uma sequncia de instrues e a
lista de latncias.
3.1 [10] <1.8, 3.1, 3.2> Qual seria o desempenho de referncia (em ciclos, por
iterao do loop) da sequncia de cdigo da Figura3.48 se nenhuma nova
execuo de instruo pudesse ser iniciada at que a execuo da instruo
anterior tivesse sido concluda? Ignore a busca e a decodificao de front-end.

FIGURA 3.48 Cdigo e latncias para os Exerccios 3.1 a 3.6.


216 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

Considere, por enquanto, que a execuo no fique em stall por falta da prxima
instruo, mas somente uma instruo/ciclo pode ser enviada. Considere que o
desvio tomado e que existe um slot de atraso de desvio de um ciclo.
3.2 [10] <1.8, 3.1, 3.2> Pense no que realmente significam os nmeros de latncia
eles indicam o nmero de ciclos que determinada funo exige para produzir
sua sada, e nada mais. Se o pipeline ocasionar stalls para os ciclos de latncia de
cada unidade funcional, pelo menos voc ter a garantia de que qualquer par de
instrues de ponta a ponta (um produtor seguido por um consumidor) ser
executado corretamente. Contudo, nem todos os pares de instrues possuem um
relacionamento produtor/consumidor. s vezes, duas instrues adjacentes no
tm nada a ver uma com a outra. Quantos ciclos o corpo do loop na sequncia de
cdigo da Figura3.48 exigiria se o pipeline detectasse verdadeiras dependncias
de dados e s elas ficassem em stall, em vez de tudo ficar cegamente em stall
s porque uma unidade funcional est ocupada? Mostre o cdigo com <stall>
inserido onde for necessrio para acomodar as latncias proteladas. (Dica: Uma
instruo com latncia +2 precisa que dois ciclos de <stall> sejam inseridos
na sequncia de cdigo. Pense desta maneira: uma instruo de um ciclo possui
latncia 1+0, significando zero estado de espera extra. Assim, a latncia 1+1
implica um ciclo de stall; latncia 1+N possui N ciclos de stall extras.)
3.3 [15] <3.6, 3.7> Considere um projeto de mltiplo despacho. Suponha que voc
tenha dois pipelines de execuo, cada qual capaz de iniciar a execuo de uma
instruo por ciclo, alm de largura de banda de busca/decodificao suficiente
no front-end, de modo que sua execuo no estar em stall. Considere que os
resultados podem ser encaminhados imediatamente de uma unidade de execuo
para outra ou para si mesma. Considere, ainda, que o nico motivo para um
pipeline de execuo protelar observar uma dependncia de dados verdadeira.
Quantos ciclos o loop exigiria?
3.4 [10] <3.6, 3.7> No projeto de mltiplo despacho do Exerccio 3.3, voc pode ter
reconhecido algumas questes sutis. Embora os dois pipelines tenham exatamente
o mesmo repertrio de instrues, elas no so idnticas nem intercambiveis,
pois existe uma ordenao implcita entre elas que precisa refletir a ordenao das
instrues no programa original. Se a instruo N+1 iniciar sua execuo na pipe
de execuo 1 ao mesmo tempo que a instruo N iniciar na pipe 0, e N+1 exigir
uma latncia de execuo mais curta que N, ento N+1 ser concluda antes de
N (embora a ordenao do programa tivesse indicado de outra forma). Cite pelo
menos duas razes pelas quais isso poderia ser arriscado e exigiria consideraes
especiais na microarquitetura. D um exemplo de duas instrues do cdigo da
Figura3.48 que demonstrem esse hazard.
3.5 [20] <3.7> Reordene as instrues para melhorar o desempenho do cdigo da
Figura3.48. Considere a mquina de dois pipelines do Exerccio 3.3 e que os
problemas de trmino fora de ordem do Exerccio 3.4 foram tratados com sucesso.
Por enquanto, preocupe-se apenas em observar as dependncias de dados verdadeiras
e as latncias da unidade funcional. Quantos ciclos o seu cdigo reordenado utiliza?
3.6 3.6[10/10/10] <3.1, 3.2> Cada ciclo que no inicia uma nova operao em um
pipeline uma oportunidade perdida, no sentido de que seu hardware no est
acompanhando seu potencial.
a. [10] <3.1, 3.2> Em seu cdigo reordenado do Exerccio 3.5, que frao de
todos os ciclos, contando ambos os pipelines, foi desperdiada (no iniciou
uma nova operao)?
b. [10] <3.1, 3.2> O desdobramento de loop uma tcnica-padro do
compilador para encontrar mais paralelismo no cdigo, a fim de minimizar as
Estudos de caso e exerccios por Jason D. Bakos e Robert P. Colwell 217

oportunidades perdidas para desempenho. Desdobre duas iteraes do loop


em seu cdigo reordenado do Exerccio 3.5.
c. [10] <3.1, 3.2> Que ganho de velocidade voc obteve? (Neste exerccio,
basta colorir as instrues da iterao N+1 de verde para distingui-las das
instrues da iterao N; se voc estivesse realmente desdobrando o loop, teria
de reatribuir os registradores para impedir colises entre as iteraes.)
3.7 [15] <3.1> Os computadores gastam a maior parte do tempo nos loops,
de modo que as iteraes de loop so timos locais para encontrar
especulativamente mais trabalho para manter os recursos da CPU ocupados.
Porm, nada to fcil; o compilador emitiu apenas uma cpia do cdigo
desse loop, de modo que, embora mltiplas iteraes estejam tratando dados
distintos, elas parecero usar os mesmos registradores. Para evitar a coliso de
uso de registrador por mltiplas iteraes, renomeamos seus registradores. A
Figura3.49 mostra o cdigo de exemplo que gostaramos que nosso hardware
renomeasse. Um compilador poderia ter simplesmente desdobrado o loop e
usado registradores diferentes para evitar conflitos, mas, se esperarmos que nosso
hardware desdobre o loop, ele tambm ter de fazer a renomeao de registrador.
Como? Considere que seu hardware tenha um pool de registradores temporrios
(vamos cham-los de registradores T e considerar que existam 64 deles, de T0
a T63) que ele pode substituir por registradores designados pelo compilador.
Esse hardware de renomeao indexado pela designao do registrador de
origem, e o valor na tabela o registrador T do ltimo destino que designou esse
registrador. (Pense nesses valores de tabela como produtores e nos registradores
de origem como consumidores; no importa muito onde o produtor coloca
seu resultado, desde que seus consumidores possam encontr-lo.) Considere a
sequncia de cdigo na Figura3.49. Toda vez que voc encontrar um registrador
de destino no cdigo, substitua o prximo T disponvel, comeando com T9.
Depois atualize todos os registradores de origem adequadamente, de modo que as
dependncias de dados verdadeiras sejam mantidas. Mostre o cdigo resultante.
(Dica: Ver a Figura3.50).
3.8 [20] <3.4> O Exerccio 3.7 explorou a renomeao simples de registradores:
quando o renomeador de registrador do hardware v um registrador de
origem, substitui o registrador T de destino da ltima instruo a ter designado
esse registrador de origem. Quando a tabela de renomeao encontra um

FIGURA 3.49 Exemplo de cdigo para prtica de renomeao de registrador.

FIGURA 3.50 Dica: Sada esperada do renomeamento de registrador.


218 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

registrador de destino, ela o substitui pelo prximo T disponvel. Mas os


projetos superescalares precisam lidar com mltiplas instrues por ciclo
declock em cada estgio na mquina, incluindo a renomeao de registrador.
Um processador escalar simples, portanto, pesquisaria os mapeamentos de
registrador de origem para cada instruo e alocaria um novo mapeamento de
destino por ciclo de clock. Os processadores superescalares precisam ser capazes
de fazer isso tambm, mas teriam de garantir que quaisquer relacionamentos
destino para origem entre as duas instrues concorrentes fossem tratados
corretamente. Considere a sequncia de cdigo de exemplo na Figura3.51 e
que gostaramos de renomear simultaneamente as duas primeiras instrues.
Considere ainda que os prximos dois registradores T disponveis a serem usados
sejam conhecidos no incio do ciclo de clock em que essas duas instrues
esto sendo renomeadas. Conceitualmente, o que queremos que a primeira
instruo faa suas pesquisas na tabela de renomeao e depois atualize a tabela
por seu registrador T de destino. Depois, a segunda instruo faria exatamente
a mesma coisa e, portanto, qualquer dependncia entre instrues seria tratada
corretamente. Mas no existe tempo suficiente para escrever essa designao de
registrador T na tabela de renomeao e depois pesquis-la novamente para a
segunda instruo, tudo no mesmo ciclo de clock. Em vez disso, essa substituio
de registrador precisa ser feita ao vivo (em paralelo com a atualizao da tabela
de renomeao de registrador). A Figura3.52 mostra um diagrama de circuito
usando multiplexadores e comparadores que conseguir fazer a renomeao
de registrador necessria no ato. Sua tarefa mostrar o estado ciclo por ciclo da
tabela de renomeao para cada instruo do cdigo mostrado na Figura3.51.
Considere que a tabela comea com cada entrada igual ao seu ndice (T0=0;
T1=1, ...).
3.9 [5] <3.4> Se voc j se confundiu com relao ao que um renomeador de
registrador precisa fazer, volte ao cdigo assembly que est executando e pergunte
a si mesmo o que deve acontecer para que o resultado correto seja obtido. Por
exemplo, considere uma mquina superescalar de trs vias renomeando estas trs
instrues simultaneamente:

3.10 [20] <3.4, 3.9> Projetistas de palavras de instruo muito longas (VLIW)
tm algumas escolhas bsicas a fazer com relao a regras de arquitetura para
uso de registrador. Suponha que um VLIW seja projetado com pipelines de
execuo com autodrenagem: quando uma operao for iniciada, seus resultados
aparecero no registrador de destino no mximo L ciclos mais tarde (onde L
a latncia da operao). Nunca existem registradores suficientes, de modo
que h uma tentativa de espremer o uso mximo de registradores que existem.
Considere a Figura3.53. Se os loads tiverem uma latncia de 1+2 ciclos,

FIGURA 3.51 Exemplo de cdigo para renomeao de registrador superescalar.


Estudos de caso e exerccios por Jason D. Bakos e Robert P. Colwell 219

FIGURA 3.52 Tabela de renomeao e lgica de substituio em ao para mquinas superescalares.


(Observe que src a fonte e dest o destino.)

FIGURA 3.53 Cdigo VLIW de exemplo com dois adds, dois loads e dois stalls.

desdobre esse loop uma vez e mostre como um VLIW capaz de dois loads e dois
adds por ciclo pode usar o nmero mnimo de registradores, na ausncia de
quaisquer interrupes ou stalls no pipeline. D exemplo de um evento que, na
presena de pipelines de autodrenagem, possa romper essa canalizao e gerar
resultados errados.
3.11 3.11[10/10/10] <3.3> Considere uma microarquitetura de nico pipeline em
cinco estgios (load, decodificao, execuo, memria, escrita) e o cdigo na
Figura3.54. Todas as operaes so de um ciclo, exceto LW e SW, que so de 1+2
ciclos, e os desvios so de 1+1 ciclo. No existe adiantamento. Mostre as fases de
cada instruo por ciclo de clock para uma iterao do loop.
a. [10] <3.3> Quantos ciclos de clock por iterao do loop so perdidos para o
overhead de desvio?
220 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

FIGURA 3.54 Cdigo de loop para o Exerccio 3.11.

b. [10] <3.3> Considere um previsor de desvio esttico capaz de reconhecer um


desvio ao contrrio no estgio de decodificao. Quantos ciclos de clock so
desperdiados no overhead de desvio?
c. [10] <3.3> Considere um previsor de desvio dinmico. Quantos ciclos so
perdidos em uma previso correta?
3.12 [15/20/20/10/20] <3.4, 3.7, 3.14> Vamos considerar o que o escalonamento
dinmico poderia conseguir aqui. Considere uma microarquitetura como a da
Figura3.55. Suponha que as ALUs possam fazer todas as operaes aritmticas
(MULTD, DIVD, ADDD, ADDI, SUB) e desvios, e que a estao de reserva (RS)
possa enviar no mximo uma operao para cada unidade funcional por ciclo
(uma operao para cada ALU mais uma operao de memria para a unidade
de LD/ST).
a. [15] <3.4> Suponha que todas as instrues da sequncia na Figura3.48
estejam presentes no RS, sem que qualquer renomeao precise ser feita.
Destaque quaisquer instrues no cdigo onde a renomeao de registrador
melhoraria o desempenho. (Dica: Procure hazards RAW e WAW. Considere
as mesmas latncias de unidade funcional da Figura3.48.)
b. [20] <3.4> Suponha que a verso com registrador renomeado do cdigo
doitem a esteja residente na RS no ciclo de clock N, com latncias conforme
indicado na Figura3.48. Mostre como a RS dever enviar essas instrues
fora de ordem, clock por clock, para obter o desempenho ideal nesse cdigo.
(Considere as mesmas restries de RS do item a. Considere tambm que
os resultados precisam ser escritos na RS antes que estejam disponveis para
uso, ou seja, sem bypassing.) Quantos ciclos de clock a sequncia de cdigo
utiliza?
c. [20] <3.4> O item b permite que a RS tente escalonar essas instrues de
forma ideal. Mas, na realidade, a sequncia de instrues inteira em que

FIGURA 3.55 Microarquitetura fora de ordem.


Estudos de caso e exerccios por Jason D. Bakos e Robert P. Colwell 221

estamos interessados normalmente no est presente na RS. Em vez disso,


diversos eventos apagam a RS e, quando novos fluxos de sequncia de cdigo
entram no decodificador, a RS precisa enviar o que ela tem. Suponha que
a RS esteja vazia. No ciclo 0, as duas primeiras instrues dessa sequncia
com registrador renomeado aparecem na RS. Considere que necessrio um
ciclo de clock para enviar qualquer operao e que as latncias da unidade
funcional sejam como apareceram no Exerccio 3.2. Considere ainda que o
front-end (decodificador/renomeador de registrador) continuar a fornecer
duas novas instrues por ciclo de clock. Mostre a ordem, ciclo por ciclo,
de despacho da RS. Quantos ciclos de clock essa sequncia de cdigo exige
agora?
d. [10] <3.14> Se voc quisesse melhorar os resultados do item c, quais teriam
ajudado mais: 1) outra ALU; 2) outra unidade de LD/ST; 3) bypassing total
de resultados da ALU para operaes subsequentes; 4) cortar a latncia mais
longa ao meio? Qual o ganho de velocidade?
e. [20] <3.7> Agora vamos considerar a especulao, o ato de apanhar,
decodificar e executar alm de um ou mais desvios condicionais. Nossa
motivao para fazer isso dupla: o escalonamento de despacho que vimos
no item c tinha muitas nops, e sabemos que os computadores gastam a
maior parte do seu tempo executando loops (implicando que o desvio
de volta ao topo do loop bastante previsvel). Os loops nos dizem onde
encontrar mais trabalho a fazer; nosso escalonamento de despacho escasso
sugere que temos oportunidades para fazer algum trabalho mais cedo do que
antes. No item d, voc descobriu o caminho crtico atravs do loop. Imagine
gerar uma segunda cpia desse caminho no escalonamento que voc obteve
no item b. Quantos ciclos de clock a mais seriam necessrios para realizar o
trabalho de dois loops (supondo que todas as instrues estejam residentes
na RS)? (Considere que todas as unidades funcionais sejam totalmente
canalizadas.)

Exerccios
3.13 [25] <3.13> Neste exerccio, voc vai explorar os trade-offs de desempenho
entre trs processadores que empregam diferentes tipos de multithreading.
Cada um desses processadores superescalar, o uso pipelines em ordem requer
um stall fixo de trs ciclos seguindo todos os loads e desvios, e tem caches L1
idnticas. Instrues do mesmo thread enviados no mesmo ciclo so lidas na
ordem do programa e no devem conter quaisquer dependncias de dados ou
controle.
j O processador A uma arquitetura superescalar SMT capaz de enviar at duas
instrues por ciclo de dois threads.
j O processador B uma arquitetura MT fina capaz de enviar at quatro
instrues por ciclo de um nico thread e muda de thread a qualquer stall de
pipeline.
j O processador C uma arquitetura MT grossa capaz de enviar at oito
instrues por ciclo de um thread nico e muda de thread a cada falha de
cache L1.
Nossa aplicao um buscador de lista que verifica uma regio de memria
procura de um valor especfico em R9, na faixa de endereos especificadas em R16
e R17. Ela paralelizada dividindo o espao de busca em quatro blocos contguos
de tamanho igual e designando um thread de busca para cada bloco (gerando
222 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

quatro threads). A maior parte do runtime de cada thread gasto no seguinte


corpo de loop:

Suponha o seguinte:
j usada uma barreira para garantir que todos os threads comecem
simultaneamente.
j A primeira falha de cache L1 ocorre depois de duas iteraes do loop.
j Nenhum dos desvios BEQAL tomado.
j O BLT sempre tomado.
j Todos os trs processadores escalonam threads de modo round-robin.
Determine quantos ciclos so necessrios para cada processador completar as duas
primeiras iteraes do loop.
3.14 [25/25/25] <3.2, 3.7> Neste exerccio, examinamos como tcnicas de software
podem extrair paralelismo de nvel de instruo (ILP) em um loop comum
vetorial. O loop a seguir o chamado loop DAXPY (aX mais Y de preciso dupla)
e a operao central na eliminao gaussiana. O cdigo a seguir implementa a
operao DAPXY, Y=aX+Y, para um vetor de comprimento 100. Inicialmente,
R1 configurado para o endereo de base do array X e R2 e configurado para o
endereo de base de Y:

Considere as latncias de unidade funcional mostradas na tabela a seguir.


Considere tambm um desvio atrasado de um ciclo que se resolve no estgio ID
e que os resultados so totalmente contornados.
Estudos de caso e exerccios por Jason D. Bakos e Robert P. Colwell 223

Instruo produzindo oresultado Instruo usando Latncia em ciclos


o resultado de clock

Multiplicao de PF Op ALU PF 6
Soma de PF Op ALU PF 4
Multiplicao de PF Store de PF 5
Soma de PF Store de PF 4
Operaes com inteiros Any 2
e todos os loads

a. [25] <3.2> Considere um pipeline de despacho nico. Mostre como


seria o loop no escalonado pelo compilador e depois escalonado pelo
compilador, tanto para operao de ponto flutuante como para atrasos
de desvio, incluindo quaisquer stalls ou ciclos de clock ociosos. Qual
o tempo de execuo (em ciclos) por elemento do vetor resultante,
Y, no escalonado e escalonado? Quo mais rpido o clock deveria ser
para que o hardware do processador pudesse igualar sozinho a melhoria
de desempenho atingida pelo compilador de escalonamento? (Ignore
possveis efeitos da maior velocidade de clock sobre o desempenho do
sistema.)
b. [25] <3.2> Considere um pipeline de despacho nico. Expanda o loop
quantas vezes forem necessrias para escalon-lo sem nenhum stall, ocultando
as instrues de overhead do loop. Quantas vezes o loop deve ser expandido?
Mostre o escalonamento de instrues. Qual o tempo de execuo por
elemento do resultado?
c. [25] <3.7> Considere um processador VLIW com instrues que contm
cinco operaes, como mostrado na Figura3.16. Vamos comparar dois graus
de expanso de loop. Primeiro, expanda o loop seis vezes para extrair ILP e
escalon-lo sem nenhum stall (ou seja, ciclos de despacho completamente
vazios), ocultando as instrues de overhead de loop. Ento, repita o processo,
mas expanda o loop 10 vezes. Ignore o slot de atraso de desvio. Mostre os
dois escalonamentos. Qual o tempo de instruo, por elemento, do vetor
resultado para cada escalonamento? Que porcentagem dos slots de operao
usada em cada escalonamento? Em quanto o tamanho do cdigo difere
nos dois escalonamentos? Qual a demanda total do registrador para esses
escalonamentos?
3.15 [20/20] <3.4, 3.5, 3.7, 3.8> Neste exerccio, vamos examinar como variaes no
algoritmo de Tomasulo se comportam quando executam o loop do Exerccio 3.14.
As unidades funcionais (FUs) so descritas na tabela a seguir.

Tipo de FU Ciclos em EX Nmero de FUs Nmero de estaes


de reserva

Inteiro 1 1 5
Somador de PF 10 1 3
Multiplicador de PF 15 1 2

Considere o seguinte:
j As unidades funcionais no so pipelined.
j No h adiandamento entre as unidades funcionais; os resultados so
comunicados pelo barramento comum de dados (CDB).
224 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

j O estgio de execuo (EX) realiza o clculo efetivo de endereo e os acessos


memria para loads e stores. Assim, o pipeline IF/ID/IS/EX/WB.
j Loads requerem um ciclo de clock.
j Os estgios de resultados de despacho (IS) e write-back (WB) requerem um
ciclo de clock cada um.
j H cinco slots de buffer de carregamento e cinco slots de buffer de
armazenamento.
j Considere que a instruo Branch on Not Equal do Zero (BNEZ) requer um
ciclo de clock.
a. [20] <3.4, 3.5> Para este problema, use o pipeline MIPS de Tomasulo
de despacho nico da Figura3.6 com as latncias de pipeline da tabela
anterior. Mostre o nmero de ciclos de stall para cada instruo e em que
ciclo de clock cada uma delas comea a ser executada (ou seja, entra no seu
primeiro ciclo EX) para trs iteraes do loop. Quantos ciclos cada iterao
de loop leva? D sua resposta em forma de tabela com os seguintes ttulos
de coluna:
j Iterao (nmero da iterao do loop)

j Instruo

j Envia (ciclo em que a instruo enviada)

j Executa (ciclo em que a instruo executada)

j Acesso memria (ciclo em que a memria acessada)

j CDB de gravao (ciclo em que o resultado gravado no CDB)

j Comentrio (descrio de qualquer evento que a instruo esteja

aguardando)
Mostre trs iteraes do loop na sua tabela. Voc pode ignorar a primeira
instruo.
b. [20] <3.7, 3.8> Repita o procedimento do item a, mas desta vez considere um
algoritmo de Tomasulo de dois despachos e uma unidade de ponto flutuante
totalmente pipelined (FPU).
3.16 [10] <3.4> O algoritmo de Tomasulo apresenta uma desvantagem: somente
um resultado pode ser computado por clock por CDB. Use a configurao de
hardware e latncias da questo anterior e encontre uma sequncia de cdigo de
no mais de 10 instrues onde o algoritmo de Tomasulo deve sofrer stall, devido
conteno de CDB. Indique onde isso ocorre na sua sequncia.
3.17 [20] <3.3> Um previsor de desvio de correlao (m,n) usa o comportamento
dos m desvios executados mais recentemente para escolher entre 2m previsores,
cada qual previsor de n bits. Um previsor local de dois nveis funciona de modo
similar, mas s rastreia o comportamento passado de cada desvio individual para
prever o comportamento futuro.
Existe um trade-off de projeto envolvido com tais previsores. Previsores de
correlao requerem pouca memria para histrico, o que permite a eles manter
previsores de 2 bits para um grande nmero de desvios individuais (reduzindo a
probabilidade das instrues de desvio reutilizarem o mesmo previsor), enquanto
previsores locais requerem substancialmente mais memria para manter um
histrico e, assim, so limitados a rastrear um nmero relativamente menor de
instrues de desvio. Neste exerccio, considere um previsor de correlao (1,2)
que pode rastrear quatro desvios (requerendo 16 bits) em comparao com um
previsor local (1.2) que pode rastrear dois desvios usando a mesma quantidade de
memria. Para os resultados de desvio a seguir, fornea cada previso, a entrada
de tabela usada para realizar a previso, quaisquer atualizaes na tabela como
resultado da previso e a taxa final de previses incorretas de cada previsor.
Estudos de caso e exerccios por Jason D. Bakos e Robert P. Colwell 225

Suponha que todos os desvios at este ponto tenham sido tomados. Inicialize
cada previsor com o seguinte:

Previsor de correlao

Entrada Desvio ltimo resultado Previso

0 0 T T com uma previso incorreta


1 0 NT NT
2 1 T NT
3 1 NT T
4 2 T T
5 2 NT T
6 3 T NT com uma previso
incorreta
7 3 NT NT

Previsor local

Entrada Desvio ltimos dois resultados Previso


(o da direita o mais recente)

0 0 T,T T com uma previso incorreta


1 0 T,NT NT
2 0 NT,T NT
3 0 NT T
4 1 T,T T
5 1 T,NT T com uma previso incorreta
6 1 NT,T NT
7 1 NT,NT NT

Desvio PC (endereo de palavra) Resultado

454 T
543 NT
777 NT
543 NT
777 NT
454 T
777 NT
454 T
543 T

3.18 [10] <3.9> Considere um processador altamente pipelined para o qual


tenhamos implementado um buffer de alvos de desvio somente para os desvios
condicionais. Considere que a penalidade de previso incorreta sempre de cinco
ciclos e a penalidade de falha de buffer sempre de trs ciclos. Considere uma
taxa de acerto de 90%, preciso de 90% e frequncia de desvio de 15%. Quo
mais rpido o processador com o buffer de alvo de desvio comparado a um
226 CAPTULO 3: Paralelismo em nvel de instruo e sua explorao

processador que tenha uma penalidade de desvio fixa de dois ciclos? Considere
um ciclo-base de clock por instruo (CPI) sem stalls de desvio de um.
3.19 [10/5] <3.9> Considere um buffer de alvos de desvio que tenha penalidades
de zero, dois e dois ciclos de clock para previso correta de desvio condicional,
previso incorreta e uma falha de buffer, respectivamente. Considere tambm
um projeto de buffer de alvo de desvio que distingue desvios condicionais e no
condicionais, armazenando os endereos de alvo para um desvio condicional e a
instruo-alvo para um desvio no condicional.
a. [10] <3.9> Qual a penalidade em ciclos de clock quando um desvio no
condicional encontrado no buffer?
b. [10] <3.9> Determine a melhoria da dobra de desvios para desvios no
condicionais. Suponha uma taxa de acerto de 90%, uma frequncia de desvio
no condicional de 5% e uma penalidade de dois ciclos para uma falha de
buffer. Quanta melhoria obtida por essa modificao? Quo alta deve ser a
taxa de acerto para essa melhoria gerar um ganho de desempenho?
CAPTULO 4

Paralelismo em nvel de dados em arquiteturas


vetoriais, SIMD e GPU1

Chamamos esses algoritmos de paralelismo de dados porque seu paralelismo


vem de operaes simultneas atravs de grandes conjuntos de dados,
em vez de mltiplos threads de controle.
W. Daniel Hillis e Guy L. Steele
Data Parallel Algorithms, Comm. ACM (1986).
Se voc estivesse arando um campo, o que preferiria usar: dois bois fortes
ou 1.024 galinhas?
Seymour Cray, Pai do Supercomputador,
(defendendo dois poderosos processadores
vetoriais em vez de vrios processadores simples).

4.1 Introduo............................................................................................................................................227
4.2 Arquitetura vetorial.............................................................................................................................229
4.3 Extenses de conjunto de instrues SIMD para multimdia..........................................................246
4.4 Unidades de processamento grfico..................................................................................................251
4.5 Detectando e melhorando o paralelismo em nvel de loop...............................................................274
4.6 Questes cruzadas...............................................................................................................................282
4.7 Juntando tudo: GPUs mveis versus GPUs servidor Tesla versus Core i7....................................284
4.8 Falcias e armadilhas..........................................................................................................................290
4.9 Consideraes finais............................................................................................................................291
4.10 Perspectivas histricas e referncias...............................................................................................293
Estudo de caso e exerccios por Jason D. Bakos......................................................................................293

4.1INTRODUO
Uma questo para a arquitetura de simples instruo e mltiplos dados (SIMD), apresen-
tada no Captulo1, de que a largura do conjunto de aplicaes tem paralelismo signifi-
cativo em nvel de dados (DLP). Cinquenta anos depois, a resposta no so s os clculos
orientados para a matriz da computao cientfica, mas tambm para o processamento de
imagens e sons orientado para a mdia. Alm disso, como uma nica instruo pode lanar
muitas operaes de dados, o SIMD potencialmente mais eficiente em termos de energia
do que mltiplas instrues e mltiplos dados (MIMD), que precisam buscare executar
uma instruo por operao de dados. Essas duas respostas tornam o SIMD atraente para
dispositivos pessoais mveis. Por fim, talvez a maior vantagem do SIMD em comparao
ao MIMD seja que o programador continua a pensar sequencialmente e, ainda assim,
atinge um ganho de velocidade ao realizar operaes de dados paralelas.
227
228 CAPTULO 4: Paralelismo em nvel de dados em arquiteturas vetoriais, SIMD e GPU

Este captulo abrange trs variaes do SIMD: arquiteturas vetoriais, extenses de conjunto
de instruo SIMD para multimdia e unidades de processamento grfico (GPUs).1
A primeira variao, que antecede as outras duas em mais de 30 anos, significa essencial-
mente a execuo em pipeline de muitas operaes de dados. Essas arquiteturas vetoriais
so mais fceis de entender e compilar do que outras variaes de SIMD, mas at bem
recentemente eram consideradas muito caras para os microprocessadores. Parte desse
custo era referente a transistores e parte largura de banda suficiente para a DRAM, dada
a dependncia generalizada das caches para atender s demandas de desempenho de
memria em microprocessadores convencionais.
A segunda variao SIMD pega esse nome emprestado para representar operaes si-
multneas de dados paralelos (Simultaneous Parallel Data Operations) e encontrada
na maioria das arquiteturas de conjunto de instrues atuais que suportam aplicaes
multimdia. Para arquiteturas 86, as extenses de instrues SIMD comearam com
o MMX (extenses multimdia) em 1996, seguidas por diversas verses SSE (extenses
SIMD para streaming) na dcada seguinte e continuam com as AVX (extenses vetoriais
avanadas). Muitas vezes, para obter a maior taxa de computao de um computador 86,
voc precisa usar essas instrues SIMD, especialmente para programas de ponto flutuante.
A terceira variao do SIMD vem da comunidade GPU, oferecendo maior desempenho
potencial do que o encontrado nos computadores multicore tradicionais de hoje. Embora
as GPUs compartilhem caractersticas com as arquiteturas vetoriais, elas tm suas prprias
caractersticas, em parte devido ao ecossistema no qual evoluram. Esse ambiente tem
um sistema de processador e um sistema de memria, alm da GPU e de sua memria
grfica. De fato, para reconhecer essas distines, a comunidade GPU se refere a esse tipo
de arquitetura como heterognea.
Por problemas com muito paralelismo de dados, as trs variaes de SIMD compartilham
a vantagem de serem mais fceis para os programadores do que a clssica programao
MIMD. Para colocar em perspectiva a importncia do SIMD versus o MIMD, a Figura4.1
plota o nmero de ncleos para o MIMD versus o nmero de operaes de 32 bits e 64 bits
por ciclo de clock no modo SIMD para computadores 86 ao longo do tempo.
Para os computadores 86, esperamos ver dois ncleos adicionais por chip a cada dois
anos e a largura SIMD dobrar a cada quatro anos. Dadas essas suposies, ao longo da
prxima dcada, o ganho potencial de velocidade do paralelismo SIMD ser duas vezes o
do paralelismo MIMD. Portanto, igualmente importante entender o paralelismo SIMD
como paralelismo MIMD, embora recentemente o ltimo tenha recebido muito mais
destaque. Para aplicaes com paralelismo em nvel de dados e paralelismo em nvel de
thread, o ganho potencial de velocidade em 2020 ter magnitude maior do que hoje.
O objetivo deste captulo fazer que os arquitetos entendam por que os vetores so mais
gerais do que o SIMD de multimdia, assim como as similaridades e diferenas entre as arqui-
teturas vetoriais e as de GPU. Como as arquiteturas vetoriais so superconjuntos das instrues
SIMD multimdia, incluindo um modelo melhor para compilao, e as GPUs compartilham
diversas similaridades com as arquiteturas vetoriais, comeamos com arquiteturas vetoriais
para estabelecer a base para as duas sees a seguir. A seo seguinte apresenta as arquiteturas
vetoriais, e o Apndice G vai muito mais fundo no assunto.
1 Este captulo se baseia em material do Apndice F, Processadores Vetoriais, de Krste Asanovic,
edoApndice G, Hardware e Software para VLIW e EPIC da 4a edio deste livro; em material
doApndice A, Graphics and Computing GPUs, de John Nickolls e David Kirk, da 4a edio de Computer
Organization and Design; e, em menor escala, em material de Embracing and Extending 20th-Century
Instruction Set Architectures, de Joe Gebis e David Patterson, IEEE Computer, abril de 2007.
4.2 Arquitetura vetorial 229

FIGURA 4.1 Ganho de vista potencial atravs de paralelismo de MIMD, SIMD e tanto MIMD quanto SIMD
aolongo do tempo para computadores 86.
Esta figura supe que dois ncleos por chip para MIMD sero adicionados a cada dois anos e o nmero de operaes
para SIMD vai dobrar a cada quatro anos.

4.2 ARQUITETURA VETORIAL


O modo mais eficiente de executar uma aplicao vetorizvel um processador
vetorial.
Jim Smith
International Symposium on Computer Architecture (1994)

As arquiteturas vetoriais coletam conjuntos de elementos de dados espalhados pela


memria, os colocam em arquivos de registradores sequenciais, operam sobre dados
nesses arquivos de registradores e ento dispersam os resultados de volta para a memria.
Uma nica instruo opera sobre vetores de dados, que resulta em dzias de operaes
registrador-registrador em elementos de dados independentes.
Esses grandes arquivos de registradores agem como buffers controlados pelo compilador,
tanto para ocultar a latncia de memria quanto para aproveitar a largura de banda da
memria. Como carregamentos e armazenamentos vetorias so fortemente pipelined, o
programa paga pela grande latncia de memria somente uma vez por carregamento ou
armazenamento vetorial em comparao a uma vez por elemento, amortizando assim a
latncia ao longo de cerca de 64 elementos. De fato, os programas vetoriais lutam para
manter a memria ocupada.

VMIPS
Comeamos com um processador vetorial que consiste nos principais componentes mos-
trados na Figura4.2. Esse processador, que livremente baseado no Cray-1, o alicerce
para a discusso por quase toda esta seo. Ns o chamaremos de VMIPS; sua parte escalar
230 CAPTULO 4: Paralelismo em nvel de dados em arquiteturas vetoriais, SIMD e GPU

MIPS e sua parte vetorial a extenso vetorial lgica do MIPS. O restante desta seo
examina a forma como a arquitetura bsica do VMIPS est relacionada com os outros
processadores.
Os principais componentes da arquitetura do conjunto de instrues do VMIPS so os
seguintes:
j Registradores vetorial. Cada registrador vetorial um banco de tamanho fixo
mantendo um nico vetor. O VMIPS possui oito registradores vetoriais, cada qual
com 64 elementos. O registrador vetorial precisa fornecer portas suficientes para
alimentar todas as unidades funcionais vetoriais. Essas portas vo permitir alto grau
de sobreposio entre as operaes vetoriais para diferentes registradores vetoriais.
As portas de leitura e escrita, que totalizam pelo menos 16 portas de leitura e oito
portas de escrita, esto conectadas s entradas ou sadas de unidade funcional por
um par de matrizes de chaveamento crossbars.
j Unidades funcionais vetoriais. Cada unidade totalmente pipelined e pode iniciar
uma nova operao a cada ciclo de clock. Uma unidade de controle necessria
para detectar os riscos, sejam riscos estruturais para unidades funcionais, sejam
riscos de dados em acessos de registradores. A Figura4.2 mostra que o VMIPS
possui cinco unidades funcionais. Para simplificar, focalizaremos exclusivamente
asunidades funcionais de ponto flutuante.
j Unidade carregamento-armazenamento vetorial. Essa uma unidade de memria
vetorial que carrega ou armazena um vetor na memria. Os carregamentos e
armazenamentos vetoriais do VMIPS so totalmente pipelined, de modo que as
palavras podem ser movidas entre os registradores vetoriais e memria com largura
de banda de uma palavra por ciclo de clock, aps uma latncia inicial. Normalmente,
essa unidade trataria tambm de carregamentos e armazenamentos de escalares.
j Um conjunto de registradores escalares. Os registradores escalares tambm podem
oferecer dados como entrada para as unidades funcionais vetoriais, alm de calcular
endereos para passar para a unidade load/store vetorial. Esses so os 32 registradores
de uso geral normais e 32 registradores de ponto flutuante do MIPS. Uma entrada
da unidade funcional vetorial trava valores escalares como lidos do banco de
registradoreses escalares.
A Figura4.3 lista as instrues vetoriais do VMIPS. No VMIPS, as operaes vetoriais
utilizam os mesmos nomes das operaes do MIPS, mas com as letras VV anexadas.
Assim, ADDVV.D uma adio de dois vetores de preciso dupla. As instrues vetoriais
tm como entrada um par de registradores vetoriais (ADDVV.D) ou um registrador vetorial
e um registrador escalar, designado pelo acrscimo de VS (ADDVS.D). Neste ltimo
caso, o valor no registrador escalar ser usado como entrada para todas as operaes a
operao ADDVS.D acrescentar o contedo de um registrador escalar a cada elemento
em um registrador vetorial. O valor escalar ser copiado para a unidade funcional vetorial
no momento da emisso. A maioria das operaes vetoriais possui um registrador de des-
tino vetorial, embora algumas (contagem de elementos) produzam um valor escalar, que
armazenado em um registrador escalar.
Os nomes LV e SV indicam load vetorial e store vetorial, e carregam ou armazenam um vetor
de dados inteiros de preciso dupla. Um operando o registrador vetorial a ser carregado
ou armazenado; o outro operando, que um registrador de uso geral do MIPS, o endereo
inicial do vetor na memria. Como veremos, alm dos registradores vetoriais, precisamos
de dois registradores adicionais de uso especial: os registradores de comprimento vetorial
e de mscara vetorial. O primeiro usado quando o tamanho natural do vetor no 64, e
o ltimo usado quando os loops envolvem declaraes IF.
4.2 Arquitetura vetorial 231

FIGURA 4.2 Estrutura bsica de uma arquitetura vetorial, VMIPS.


Esse processador possui uma arquitetura escalar, assim como o MIPS. H tambm oito registradores vetoriais
de64elementos, e todas as unidades funcionais so unidades funcionais vetoriais. Instrues especiais vetoriais so definidas,
neste captulo, tanto para aritmtica quanto para acessos memria. A figura mostra as unidades vetoriais para operaes
lgicas e de inteiros, fazendo com que o VMIPS se parea com um processador vetorial padro, que normalmente as
inclui. Porm, no vamos discutir essas unidades, exceto nos exerccios. Os registradores vetoriais eescalares tm nmero
significativo de portas de leitura e escrita para permitir vrias operaes vetoriais simultneas. Essas portas esto conectadas
s entradas e sadas das unidades funcionais vetoriais por um conjunto de swichtes crossbars (mostrados em linhas cinza
grossas) conectadas a essas portas de entradas e sadas das unidades funcionais vetoriais.

A barreira da potncia levou os arquitetos a avaliarem arquiteturas que possam apresentar


alto desempenho sem os custos de energia e a complexidade de processadores superes-
calares com processamento fora de ordem. As instrues vetoriais so um parceiro natural
para essa tendncia, j que os arquitetos podem us-las para aumentar o desempenho de
simples processadores escalares em ordem sem aumentar muito as demandas de energia
e complexidade de projeto. Na prtica, os desenvolvedores podem expressar muitos
dos programas que funcionavam bem em projetos complexos fora de ordem com mais
eficincia como paralelismo em nvel de dados na forma de instrues vetoriais, tal como
mostrado por Kozyrakis e Patterson (2002).
Com uma instruo vetorial, o sistema pode realizar as operaes sobre os elementos de
dados do vetor de muitas maneiras, incluindo como operar em muitos elementos simul-
taneamente. Essa flexibilidade permite aos projetos vetoriais usar unidades de execuo
lentas, porm largas, sem realizar custosas verificaes adicionais de dependncia, como
exigem os processadores superescalares.
Os vetores acomodam naturalmente tamanhos variveis de dados. Portanto, uma interpreta-
o de um tamanho de registrador vetorial de 64 elementos de 64 bits, mas 128 elementos
232 CAPTULO 4: Paralelismo em nvel de dados em arquiteturas vetoriais, SIMD e GPU

FIGURA 4.3 Instrues vetoriais do VMIPS.


Apenas as operaes de PF de preciso dupla aparecem. Alm dos registradores vetoriais, existem dois registradores especiais, VLR (discutido
na Seo F.3) e VM (discutido na Seo F.4). Esses registradores especiais so considerados como vivendo no espao do coprocessador
1doMIPS, junto comosregistradores FPU. As operaes com passo sero explicadas na Seo F.3, e os usos da criao de ndice e operaes
carregamento-armazenamento indexadas sero explicadas mais adiante.

de 32 bits, 256 elementos de 16 bits e at mesmo 512 elementos de 8 bits so interpretaes


igualmente vlidas. Essa multiplicidade de hardware o motivo de uma arquitetura vetorial
ser til para aplicaes multimdia e cientficas.

Como os processadores vetoriais funcionam: exemplo


Um processador vetorial pode ser mais bem entendido examinando-se um loop vetorial no
VMIPS. Vamos usar um problema tpico vetorial, que ser usado no decorrer desta seo:
Y=aX+Y

X e Y so vetores, inicialmente residentes na memria, e a um escalar. Esse o chamado


loop SAXPY ou DAXPY, que forma o loop interno do benchmark Linpack. (SAXPY a sigla
para single-precision aX plus Y; DAXPY a sigla para double-precision aX plus Y.)
4.2 Arquitetura vetorial 233

Linpack uma coleo de rotinas da lgebra linear, e o benchmark Limpack consite em


rotinas que realizam a eliminao gaussiana. A rotina DAXPY, que implementa o loop
anterior, representa uma pequena frao do cdigo-fonte do benchmark Linpack, mas
considera a maior parte do tempo de execuo para esse benchmark.
Por enquanto, vamos considerar que o nmero de elementos, ou tamanho de um regis-
trador vetorial (64), corresponde ao tamanho da operao vetorial em que estamos in-
teressados (essa restrio ser removida brevemente).

Exemplo Mostre o cdigo para MIPS e VMIPS para o loop DAXPY. Considere que os
endereos iniciais de X e Y esto em Rx e Ry, respectivamente.
Resposta Aqui est o cdigo MIPS.

Aqui est o cdigo VMIPS para o loop DAXPY.

A diferena mais importante que o processador vetorial reduz bastante a largura de banda
de instruo dinmica, executando apenas seis instrues contra quase 600 para MIPS.
Essa reduo ocorre tanto porque as operaes vetoriais trabalham sobre 64 elementos
quanto porque as instrues de overhead que constituem quase metade do loop no MIPS
no esto presentes no cdigo VMIPS. Quando o compilador produz instrues vetoriais
para essa sequncia e o cdigo passa grande parte do tempo sendo executado em modo
vetorial, diz-se que o cdigo est vetorizado ou vetorizvel. Loops podem ser vetorizados
quando no tm dependncias entre as suas iteraes loop, as quais so chamadas
dependncias loop-carried (Seo 4.5).
Outra diferena importante entre MIPS e VMIPS a frequncia dos interbloqueios do
pipeline. No cdigo MIPS direto, cada ADD.D precisa esperar por um MUL.D e cada S.D
precisa esperar pelo ADD.D. No processador vetorial, cada instruo vetorial sofrer stall
somente para o primeiro elemento em cada vetor, e depois os elementos subsequentes
fluiro suavemente pelo pipeline. Assim, stalls de pipeline so exigidos apenas uma
vez por operao vetorial, e no uma vez por elemento do vetor. Os arquitetos vetoriais
chamam o adiantamento de operaes de elementos dependentes de encadeamento,
onde as operaes dependentes formam uma corrente ou cadeia. Neste exemplo, a
frequncia de stall do pipeline no MIPS ser cerca de 64 vezes maior do que no VMIPS. Os
stalls de pipeline podem ser eliminados no MIPS usando pipelining de software ou des-
dobramento de loop (descrito no Apndice H). Contudo, a grande diferena na largura de
banda de instruo no pode ser reduzida.
234 CAPTULO 4: Paralelismo em nvel de dados em arquiteturas vetoriais, SIMD e GPU

Tempo de execuo vetorial


O tempo de execuo de uma sequncia de operaes vetoriais depende principalmente
de trs fatores: 1) o tamanho dos vetores do operando; 2) os riscos estruturais entre as
operaes; e 3) as dependncias de dados. Dados o tamanho do vetor e a taxa de iniciao,
que a velocidade com que uma unidade vetorial consome novos operandos e produz
novos resultados, podemos calcular o tempo para uma nica instruo vetorial. Todos os
supercomputadores modernos tm unidades funcionais vetoriais com mltiplos pipelines
paralelos (ou pistas) que podem produzir dois ou mais resultados por ciclo de clock,
mas tambm tm algumas unidades funcionais que no so totalmente pipelineds. Por
simplicidade, nossa implementao VMIPS tem uma pista com taxa de iniciao de um
elemento por ciclo de clock para operaes individuais. Assim, o tempo de execuo para
uma nica instruo vetorial aproximadamente o tamanho do vetor.
Para simplificar a discusso sobre a execuo do vetor e seu tempo, usaremos a noo
de comboio, que o conjunto de instrues vetoriais que podem iniciar a execuo juntas
em um perodo de clock. (Embora o conceito de comboio seja usado em compiladores
vetoriais, no existe uma terminologia-padro. Por isso, criamos o termo comboio.) Asins-
trues em um comboio no podem conter quaisquer riscos estruturais ou de dados; se
esses riscos estivessem presentes, as instrues no comboio em potencial precisariam ser
seriadas e iniciadas em diferentes comboios. Para manter a anlise simples, consideramos
que um comboio de instrues precisa completar a execuo antes que quaisquer outras
instrues (escalares ou vetoriais) possam iniciar a execuo.
Pode parecer que, alm das sequncias de instrues vetoriais com riscos estruturais, seria: as
sequncias de leitura com riscos de dependncia leitura aps gravao tambm deveriam estar
em comboios diferentes, mas o encadeamento permite que elas estejam no mesmo comboio.
O encadeamento permite que uma operao vetorial comece assim que os elementos
individuais do operando-fonte desse vetor fiquem disponveis: os resultados da primeira
unidade funcional na cadeia so adiantados para a segunda unidade funcional. Na
prtica, muitas vezes implementamos o encadeamento permitindo que o processador
leia e grave um registrador vetorial particular ao mesmo tempo, embora para diferentes
elementos. As primeiras implementaes de encadeamento funcionavam do mesmo
modo que o adiantamento em pipelines escalares, mas isso restringia a temporizao
dos fontes e destinos das instrues na cadeia. Implementaes recentes usam o enca-
deamento flexvel, que permite que uma instruo vetorial seja encadeada para qualquer
outra instruo vetorial ativa, supondo que isso no gere um risco estrutural. Todas as
arquiteturas vetoriais modernas suportam encadeamento flexvel, que vamos considerar
neste captulo.
Para converter comboios em tempo de execuo precisamos de uma medida de tempori-
zao para estimar o tempo de um comboio. Ela chamada de chime, que a unidade de
tempo necessria para executar um comboio. Assim, uma sequncia vetorial que consiste
em m comboios executada em m chimes, e, para um tamanho vetorial de n, isso apro-
ximadamente mn ciclos de clock. Uma aproximao do chime ignora alguns overheads
especficos do processador, muitos dos quais dependem do tamanho do vetor. Logo, medir
o tempo em chimes uma aproximao melhor para vetores longos. Usaremos a medida
do chime em vez de ciclos de clock por resultado para indicar explicitamente que certos
overheads esto sendo ignorados.
Se soubermos o nmero de comboios em uma sequncia vetorial, saberemos o tempo de
execuo em chimes. Uma fonte de overhead ignorada na medio de chimes qualquer
limitao na iniciao de mltiplas instrues vetoriais em um ciclo de clock. Se apenas
4.2 Arquitetura vetorial 235

uma instruo vetorial puder ser iniciada em um ciclo de clock (a realidade na maioria dos
processadores vetoriais), a contagem de chime subestimar o tempo de execuo real de
um comboio. Como o tamanho do vetor normalmente muito maior que o nmero
deinstrues no comboio, simplesmente consideraremos que o comboio executado
em um chime.

Exemplo Mostre como a sequncia de cdigo a seguuir disposta em comboios,


considerando uma nica cpia de cada unidade funcional vetorial:

De quantos chimes essa sequncia vetorial precisa? Quantos ciclos por


FLOP (operao de ponto flutuante) so necessrios, ignorando o overhead
da emisso da instruo vetorial?
Resposta O primeiro comboio ocupado pela primeira instruo LV. O MULVS.D
depende do primeiro LV, de modo que no pode estar no mesmo comboio.
A segunda instruo LV pode estar no mesmo comboio de MULVS.D. O
ADDV.D dependente do segundo LV, de modo que precisa vir em um
terceiro comboio, e por fim o SV depende do ADDVV.D, de modo que precisa
vir em um comboio seguinte. Isso leva ao seguinte leiaute de instrues
vetoriais nos comboios:

A sequncia exige trs comboios. Como a sequncia usa um total de trs


chimes e existem duas operaes de ponto flutuante por resultado, o nmero
de ciclos por FLOP 1,5 (ignorando qualquer overhead de emisso de ins-
truo vetorial). Observe que, embora permitssemos que MULVS.D e LV
fossem executadas no primeiro comboio, a maioria das mquinas vetoriais
usar dois ciclos de clock para iniciar as instrues.
Este exemplo mostra que a aproximao chime razoavelmente precisa
para vetores longos. Por exemplo, para vetores de 64 elementos, o tempo
em chimes 3, ento a sequncia levaria cerca de 643 ou 192 ciclos de
clock. O overhead de despachar comboios em dois ciclos de clock separados
seria pequeno.

Outra fonte de overhead muito mais significativa do que a limitao de despacho.


A fonte mais importante de overhead, ignorada pelo modelo de chime, o tempo de
incio do vetor. O tempo de incio vem da latncia de pipelining da operao vetorial e
determinado principalmente pela profundidade do pipeline para a unidade funcional
utilizada. Para VMIPS, vamos usar as mesmas profundidades de pipeline do Cray-1,
embora as latncias em processadores mais modernos tenham aumentado, especialmente
para carregamentos vetoriais. Todas as unidades funcionais so totalmente pipelined.
As profundidades de pipeline so de seis ciclos de clock por soma de ponto flutuante,
sete para multiplicao de ponto flutuante, 20 para diviso de ponto flutuante e 12 para
carregamento vetorial.
236 CAPTULO 4: Paralelismo em nvel de dados em arquiteturas vetoriais, SIMD e GPU

Dados esses conceitos bsicos vetoriais, as prximas subsees vo dar otimizaes que
melhoram o desempenho ou diminuem os tipos de programas que podem ser bem
executados em arquiteturas vetoriais. Em particular, elas vo responder s questes:
j Como um processador vetorial executa um nico vetor mais rpido do que um
elemento por ciclo de clock? Mltiplos elementos por ciclo de clock melhoram
o desempenho.
j Como um processador vetorial trata programas em que os comprimentos dos
vetores no so iguais ao comprimento do registrador vetorial (64 para VMIPS)?
Como a maioria dos vetores de aplicao no corresponde ao comprimento de
vetor da arquitetura, precisamos de uma soluo eficiente para esse caso comum.
j O que acontece quando existe uma declarao IF dentro do cdigo a ser vetorizado?
Mais cdigo pode ser vetorizado se pudermos lidar eficientemente com declaraes
condicionais.
j O que um processador vetorial precisa do sistema de memria? Sem largura de
banda de memria suficiente, a execuo vetorial pode ser ftil.
j Como um processador vetorial lida com matrizes multidimensionais? Essa popular
estrutura de dados deve ser vetorizada para arquiteturas vetoriais para funcionar bem.
j Como um processador vetorial lida com matrizes dispersas? Essa popular estrutura
de dados tambm deve ser vetorizada.
j Como voc programa um computador vetorial? Inovaes arquiteturais que no
correspondam tecnologia de compilador podem no ser amplamente utilizadas.
O restante desta seo apresentar cada uma dessas otimizaes da arquitetura vetorial,
e o Apndice G mostrar mais detalhes.

Mltiplas pistas: alm de um elemento por ciclo de clock


Uma das maiores vantagens de um conjunto de instrues vetoriais que ele permite que
o software passe uma grande quantidade de trabalho paralelo para o hardware usando
uma nica instruo curta. Uma nica instruo vetorial pode incluir entre dezenas e
centenas de operaes independentes, porm ser codificada com o mesmo nmero de bits
de uma instruo escalar convencional. A semntica paralela de uma instruo vetorial per-
mite que uma implementao execute essas operaes elementares usando uma unidade
funcional de pipeline profundo, como na implementao VMIPS que estudamos at aqui,
ou usando um array de unidades funcionais paralelas ou uma combinao de unidades
funcionais paralelas e em pipeline. A Figura4.4 ilustra como o desempenho do vetor pode
ser melhorado usando pipelines paralelos para executar uma instruo de adio vetorial.
O conjunto de instrues VMIPS foi projetado com a propriedade de que todas as ins-
trues de aritmtica vetorial s permitem que o elemento N de um registrador vetorial
tome parte das operaes com o elemento N de outros registradores vetoriais. Isso sim-
plifica bastante a construo de uma unidade vetorial altamente paralela, que pode ser
estruturada como mltiplas pistas paralelas. Assim como em uma rodovia de trnsito,
podemos aumentar a vazo de pico de uma unidade vetorial acrescentando pistas.
A estrutura de uma unidade vetorial de quatro pistas aparece na Figura4.5. Assim, mudar
de uma pista para quatro pistas reduz o nmero de clocks de um chime de 64 para 16.
Para que mltiplas pistas sejam vantajosas, as aplicaes e a arquitetura devem suportar
vetores longos. Caso contrrio, elas sero executadas to rapidamente que voc vai ficar
sem largura de banda de instruo, requerendo tcnicas de ILP (Cap.3) para fornecer
instrues vetoriais suficientes.
Cada pista contm uma parte do banco de registradores vetoriais e um pipeline de execuo
de cada unidade funcional vetorial. Cada unidade funcional vetorial executa instrues
4.2 Arquitetura vetorial 237

FIGURA 4.4 Uso de mltiplas unidades funcionais para melhorar o desempenho de uma nica instr