• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Jai2008 energia-capitulo
 

Jai2008 energia-capitulo

on

  • 481 views

Capitulo aceito para publicacao e apresentado no evento JAI 2008, na cidade de Belem, em Julho de 2008. JAI/SBC - Jornadas de Atualizaçao em Informatica. Capitulo 6.

Capitulo aceito para publicacao e apresentado no evento JAI 2008, na cidade de Belem, em Julho de 2008. JAI/SBC - Jornadas de Atualizaçao em Informatica. Capitulo 6.

Statistics

Views

Total Views
481
Views on SlideShare
481
Embed Views
0

Actions

Likes
0
Downloads
6
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Jai2008 energia-capitulo Jai2008 energia-capitulo Document Transcript

    • Técnicas para Diminuir o Consumo de Energia em Sistemas Embarcados Edward David Moreno e Raimundo da Silva Barreto AbstractThe increase in user demands for battery-operated mobile and embedded devices requires an equi-valent increase in processor performance, which on the other hand causes an increase in the energyconsumption of these devices. Thus, this work aims to present the importance of that problem, empha-sizing and showing which critical components are in mobile devices. Later, this work focuses in themain techniques, strategies, and impact in the development of low energy systems. The techniquesare presented and discussed in six levels, namely, circuit, architecture, operating system, compiler,communication, and application. Finally, it presents a case study and a discussion about future chal-lenges in this research area. ResumoO incremento na demanda dos usuários de dispositivos móveis e embarcados requer um incrementoequivalente no desempenho do processador, o qual, por outro lado, causa um incremento no consumode energia desses dispositivos. Assim, este trabalho visa apresentar a importância do consumo deenergia e potência, enfatizando e mostrando quais são os componentes críticos em um dispositivomóvel. Depois, foca nas principais técnicas, estratégias e o impacto na diminuição do consumo deenergia. As técnicas são apresentadas e discutidas em seis níveis, isto é, circuito, arquitetura, sistemaoperacional, compilador, comunicação e aplicação. Finalmente, apresenta-se um estudo de caso euma discussão sobre os desafios futuros nesta área de pesquisa.6.1. Introdução Esta seção apresenta definições e conceitos gerais sobre consumo deenergia e potência, além de descrever diversos métodos e técnicas para aredução do consumo de energia em sistemas embarcados e móveis. Um sistema embarcado pode ser definido como um computador de propó-sito especial, que está incorporado a outro dispositivo (que pode não ser umcomputador), onde a utilização deste tem como intuito acrescentar ou otimizarfuncionalidades, executa uma função específica e possui diversas restrições(temporais, consumo de energia e memória, peso, tamanho, etc). O avanço tecnológico, principalmente da micro-eletrônica, e o barateamentode sistemas microprocessados fizeram com que ocorresse uma explosão na 1
    • E. Moreno e R. Barretoutilização desse tipo de sistema nas mais diversas áreas da vida humana. Ohomem moderno, mesmo sem perceber, depende cada vez mais da utilizaçãode sistemas embarcados no seu dia-a-dia. Isto inclui não somente sistemascríticos que operam em automóveis, estradas de ferro, aviões, naves espaciaise na medicina, mas também automação industrial e de residências, video ga-mes, aparelhos domésticos, telefones celulares, fornos de micro-ondas, dentreoutros. Atualmente, o consumo de energia é ponto de discussão e pesquisa tantona indústria como na academia. Isto se deve principalmente à massificaçãodo uso de dispositivos móveis e a exigência, cada vez maior do mercado paraque os mesmos tenham grande potencial computacional e maior grau de au-tonomia. Devido a essa característica, o consumo de energia passou a figurarcomo métrica de qualidade no contexto dos projetos de sistemas embarcados.Além disso, tal consumo tem impacto na forma de encapsulamento do sistema,implicando no custo final do produto. No mundo inteiro a utilização de dispositivos móveis está cada vez maiscrescente e, aos poucos, esses aparelhos permitem realizar mais e mais fun-ções de forma automática, facilitando algumas atividades rotineiras do ser hu-mano. A área da computação móvel depende de algumas outras sub-áreas comomicroeletrônica, sistemas digitais, sistemas embarcados, automação, progra-mação de dispositivos móveis, avaliação e simulação, desempenho, lingua-gens de programação, redes de computadores e sistemas distribuídos, dentreoutras áreas. Essa grande diversidade de aplicações deve-se aos avançosnessas áreas e, em especial, aos avanços na área de dispositivos eletrônicose ao uso da comunicação sem fio (wireless), que possibilitam a aplicação des-ses dispositivos e ferramentas em casos em que a conexão física é um fatorlimitante. Alguns exemplos de dispositivos móveis são os notebooks, PDA (PersonalDigital Assistants), o pager, o IPoD, os dispositivos de música MP3, os sen-sores inteligentes, os telefones celulares e, recentemente, os smart phones.Não obstante, ainda há vários desafios a vencer, tanto do ponto de vista desoftware e hardware, principalmente com relação ao atendimento das diversasrestrições. Os dispositivos móveis estão com mais e mais potência computacional.Como exemplo pode-se citar, o computador de mão conhecido como PocketItsy, projetado pela HP. Este dispositivo usa o processador ARM, que possuiboas características de desempenho. A Tabela 6.1 mostra que o Pocket Itsypossui desempenho comparável a máquinas do SGI Índigo e Pentium, quandose usa a métrica MIPS (Milhões de Instruções Por Segundo) e quando se exe-cuta um subconjunto de programas especificados pelo benchmark SPEC. Éimportante ressaltar que esta métrica não é a única usada para comparar de-sempenho [Patterson and Hennessy 2007, Stallings 2005]. É importante observar que os dispositivos móveis possuem cada vez mais2
    • Técnicas para Diminuir o Consumo de Energia Tabela 6.1. Exemplo de Desempenho Computacional de Dispositivos Móveis [Bartlett et al. 2000]recursos em hardware que permitem a execução de tarefas cada vez maisvariadas e complexas. Porém, eles são fortemente dependentes do bom funci-onamento e capacidade da bateria, que é a fonte de energia. Figura 6.1. Consumo de Potência de Pico em Processa- dores da Intel No lado esquerdo da Figura 6.1 é possível observar que os processadorescada vez mais aumentam a sua freqüência de operação e usam também umnúmero maior de componentes em hardware (portanto, há um maior númerode transistores sendo utilizados), o que produz um aumento no desempenhocomputacional, porém, aumenta-se também o consumo de pico, medido em 3
    • E. Moreno e R. Barretowatts, desses dispositivos. No lado direito da Figura 6.1 mostra-se o consumo da bateria de um dis-positivo móvel. Quando não se executa nenhuma aplicação, ela começa a sedescarregar de forma natural, e a capacidade de oferecer energia diminui como avanço do tempo. Essa situação se torna ainda mais critica quando ela é efe-tivamente usada, fazendo com que a sua descarga total aconteça bem antesdo tempo máximo de funcionamento (dado pelo funcionamento em standby).Na Figura 6.1 (lado direito), por exemplo, a bateria normal teria uma duraçãode 45 horas, porém quando o dispositivo começa a funcionar, ela tem umaduração máxima de 14 horas, ou seja, em torno de 30% da sua capacidadetotal. Obviamente esses tempos variam para cada dispositivo e para cada formade utilização. Assim, o mesmo dispositivo pode ter um tempo menor se exe-cutar operações críticas, ou se possuir mais elementos de hardware do que onecessário para uma determinada função. A seguir, algumas outras informações que motivam a realização de pesqui-sas na área de otimização do consumo de energia em sistemas computacio-nais, de acordo com [Yang et al. 2004] e [Hsu 2003]: • Há um aumento de consumo de energia da família de processadores da INTEL: de 7.9W para o processador Pentium 133MHz para 82W do Pentium-IV a 3GHz. • Em 1992 a dissipação mundial de potência dos processadores tipo PC foi de 160 MegaWatts. Em 2001 aumentou para 9000 MegaWatts. • No mesmo período, 8% da energia consumida nos Estados Unidos foi com o uso de Internet e estima-se que para o ano 2020 chegue a 30%. • O consumo aumenta os custos relacionados com o encapsulamento dos chips, ar condicionado, salas de refrigeração, etc. Esses custos repre- sentam 25% dos custos totais do projeto. • A Intel estima que o custo dos chips produzidos seja aumentado em mais de $1/W, toda vez que o consumo excede a faixa de 35 a 40 W. • A taxa de falhas dos chips duplica a cada 18◦ F de aumento da tempera- tura. O consumo de energia nesses dispositivos é altamente dependente dassuas características tecnológicas e arquiteturais, das características de cadacomponente que compõem o dispositivo, da forma de operação, e do própriofuncionamento. As características de funcionamento dependem também dosaplicativos que ele consegue executar, da forma em que esses programas exe-cutam, e até na forma em que essas aplicações são programadas. Portanto,conhecer o consumo de energia de um dispositivo móvel é uma tarefa com-plexa e dependente de muitas variáveis, o que a torna um desafio.4
    • Técnicas para Diminuir o Consumo de Energia Conhecer como um dispositivo consome a energia (caracterização do con-sumo) é um dos primeiros passos no sentido de aplicar e criar métodos e téc-nicas com o objetivo de melhorar o consumo e permitir que esses dispositivossejam então usados por mais tempo e com bom desempenho. O objetivo geral deste capítulo é apresentar e discutir as diferentes técnicasexistentes para diminuir o consumo de energia em sistemas computacionais,com ênfase em sistemas embarcados, ao mesmo tempo em que pretende-semostrar que é importante que os projetistas entendam a necessidade de levarem consideração o consumo de energia em aplicações modernas. O capítulodiscute também assuntos e técnicas que continuam sendo alvo de pesquisae desenvolvimento para diminuir o consumo de energia, principalmente emdispositivos móveis. Uma contribuição deste trabalho é dedicar esforços ao problema do con-sumo de energia, o qual se torna crítico em sistemas móveis, principalmenteem sistemas de telefonia celular.6.2. Nível de Circuito Nesta seção são apresentadas as principais técnicas e o estado da artepara diminuir o consumo de energia sob o ponto de vista do projeto de circuitos. A Equacão 1 expressa o cálculo do consumo de potência. P = αCVdd f + T αVdd Ishort f +Vdd Ileak 2 ˇ (1)Onde:V dd = voltagem;f = freqüência do relógio;C = capacitância de carga;α = densidade de chaveamento (ou transição); ˇT = parâmetros físicos do dispositivo que dependem do semiconductor;Ishort = corrente de curto circuito; eIleak = corrente de fuga. Neste caso, de acordo com a Equacão 1, observa-se que o valor de potên-cia (P) depende de variáveis como: voltagem ou tensão (Vdd ), freqüência ( f ),densidade de chaveamento ou de transição (α ), da corrente de fuga (Ileak ), ede algumas constantes e parâmetros físicos que dependem do material semi- ˇcondutor sendo usado na construção do circuito (T ). A potência de consumo em um circuito baseado em CMOS depende de 3componentes principais: curto circuito, estática e dinâmica. • A parte de curto circuito refere-se aquela energia perdida quando a fonte de tensão é colocada no terra, isto é, deve-se ao fenômeno de curto circuito que acontece toda vez que há um processo de chaveamento dos circuitos. Este tempo geralmente é muito pequeno e acontece em um pe- queno período de tempo. Por isso, não interessa muito do ponto de vista computacional e sim do ponto de vista eletrônico. Segundo [Hsu 2003] 5
    • E. Moreno e R. Barreto e [Yang et al. 2004], este valor está se tornando crítico nos circuitos na medida em que se diminui o tamanho dos transistores usados. • A parte estática captura a energia perdida devido à corrente de fuga (leakage), que acontece independentemente do estado das portas, isto é, de forma contínua. Esta corrente vem se tornando cada vez mais relevante, devido à tensão limiar que está sendo usada. Geralmente de- pende da área do circuito, da tecnologia de fabricação e do estilo usado no projeto do circuito. Segundo [Yang et al. 2004], para chips baseados na tecnologia CMOS, representa de 2% a 5% da dissipação de potencia total. Atualmente, esse valor encontra-se próximo de 15% e, no futuro, essa influência tende a aumentar. • A parte dinâmica mede o consumo de carga e descarga dos capacitores na saída de cada porta lógica quando alguma operação de computação é realizada. Este componente é o de maior interesse e tem sempre dominado o consumo em dispositivos. Pode-se isolar o consumo dinâmico como sendo: P = αCVdd f 2 (2)Onde:V dd = voltagem;f = freqüência do relógio;C = capacitância de carga; eα = densidade de chaveamento (ou transição). Na Equação 2 pode-se notar que a voltagem é o principal componentedo consumo de potência porque é um termo quadrático. Contudo, a reduçãoda voltagem tem um efeito negativo no atraso e, com isso, o desempenho étambém afetado. Neste caso, é sugerido primeiro reduzir a potência por outros meios, e fi-nalmente reduzir a voltagem tanto quando possível de acordo com o requisitode desempenho [Shin and Choi 1997]. No contexto deste capítulo, é essencial identificar a diferença entre “po-tência” e “energia”. Apesar de serem muito próximas, referem-se a conceitosdistintos. A energia (E) é simplesmente o produto do tempo de execução pelapotência média, enquanto que potência é a taxa na qual a energia é consumida[Tiwari et al. 1996]. Nesse caso, tem-se as seguintes equações: E = P×T (3) T = N ×τ (4)Onde:N = ciclos;6
    • Técnicas para Diminuir o Consumo de EnergiaT = tempo de execução;τ = período = 1 f Se as fórmulas 2, 3 e 4 forem juntadas é possível obter a seguinte expres-são: V dd 2 ·C E= 2 ·α ·N Assumindo que (V dd 2 /2)C é uma constante K pode-se verificar que o con-sumo de energia depende dos ciclos de relógio (N) e da densidade de transição(α ). Neste caso E = K ·α ·N (5) Conseqüentemente, para diminuir o consumo dinâmico, os principais pon-tos da análise tentarão reduzir a densidade de chaveamento α , tanto quantopossível, por diferentes meios [Shin and Choi 1997]. Observando a Equação 1, é possível verificar que outra forma de diminuira potencia energética de um circuito é diminuindo o valor da capacitância, oqual pode ser diminuído usando algum outro material semicondutor, ou usandotécnicas mais avançadas no projeto dos transistores que são o elemento basede todo sistema digital. Nos últimos anos as pesquisas têm sido direcionadaspara a diminuição do canal de cada elemento transistor mas, infelizmente, esseprocesso traz um efeito colateral que é o aumento do valor da corrente defuga (Ileak ), o qual obriga a pensar em alternativas diferentes para diminuir oconsumo de energia. Essa técnica relaciona-se com a criação e uso de novas tecnologias di-ferentes do tradicional uso de circuitos baseados em Silício. Essa parte daspesquisas está mais relacionada com novos processos e com técnicas de mi-croeletrônica. Outro destaque é a criação de circuitos que usem menos tran-sistores, o que certamente traz redução no consumo de energia. Na comunidade tem-se iniciado também muitos trabalhos para projetar ou-tros elementos base nos sistemas digitais, como é o flip-flop, com característi-cas de baixo consumo. Busca-se que o flip-flop seja de baixa potência quandoestá em seu estado normal de operação, e em baixo consumo de corrente defuga (leakage) quando está em seu estado de não operação. Isso tem sido alcançado por meio de metodologias como clock gating e datagating [Srikantam and Martinez 2002]. Clock gating é um método para reduzira potência ativa durante os períodos ociosos (idle) de operação do circuito.Não é permitido que as entradas desses blocos mudem, pois existe a açãodos flip-flops disparados por relógio, o que evita computação desnecessáriaconseguindo então diminuir o consumo desnecessário. 7
    • E. Moreno e R. Barreto Ferramentas de projeto para ASICs são capazes de gerar sinais do tipoclock gating e sleep, para conseguir determinar os períodos de inatividadeem um circuito [Srikantam and Martinez 2002]. Basicamente, um sinal do tiposleep ou do tipo enable desativa o clock não permitindo, então, que o flip-flopconsiga ter um novo dado. A Figura 6.2 mostra uma forma simples de ter um circuito baseado emclock gating. Observa-se que quando o valor de enable = 0 e Clkin = 0, o flip-flop não deixa passar qualquer dado, economizando potência. Não obstante,esta forma é somente aplicável a flip-flops estáticos, pois o mestre é estático eo latch escravo mantém o dado quando o clock está desativado. Esta forma deeconomia apresenta os problemas de teste e cobertura de falhas [Srikantam,2002]. Em flip-flops dinâmicos o relógio tem que estar executando de formacontínua para o dado poder ser armazenado (latched). Se o relógio é desabili-tado, os nós internos podem ficar em estados não definidos, uma vez que nãohá re-alimentação (feedback) causando que a saída seja não definida. Figura 6.2. Estrutura Simples da técnica CLOCK-Gating [Srikantam and Martinez 2002]. Para evitar esse problema, usa-se outra alternativa de projeto, chamada dedata gating, que consiste em parar o dado antes de ter-se um sinal de relógio,conforme mostrado na Figura 6.3. Nesta figura observa-se que quando o sinalenable = 0, o flip-flop mantém a saída. Quando enable = 1, um novo dado épermitido ser usado. O efeito é o mesmo da técnica clock gating e tambémnão apresenta problemas de teste. Esta técnica é mais usada em projetos dealto desempenho, pois não apresenta problemas de teste, além de ter maioreficiência no consumo de energia. Outra técnica de destaque relaciona-se com o projeto de dispositivos dememória eficientes no consumo de energia. Em [Daughton et al. 2002] é pro-posto um circuito capaz de armazenar informação ainda em estados de baixoconsumo até que o dado seja efetivamente usado. Portanto, os autores criaramum elemento de memória capaz de guardar o dado em um estado desligado(off). Para tanto, eles decidiram usar uma MRAM (Megnetoresistive RandomAccess Memory). Esta tecnologia usa o fenômeno de histereses, próprio de8
    • Técnicas para Diminuir o Consumo de Energia Figura 6.3. Estrutura Simples da técnica data gating [Srikantam and Martinez 2002].materiais magnéticos, para armazenar dados e as propriedades de magneto-resistência de novos materiais para realizar operações de leitura de dados. Ascélulas de memória são depositadas em substratos de circuitos integrados, osquais fornecem funções de seleção de bits e de sensoriamento dos circuitos.Segundo [Beech et al. 2000], a MRAM tem o potencial de ser ideal para todosos propósitos, pois ela é relativamente rápida, densa e não volátil. Em termos práticos e gerais, observa-se que a potência consumida au-menta de modo linear quando se aumenta a freqüência, e a potência aumentaquadraticamente com o aumento da tensão Vdd . É bom lembrar que semprese deseja ter sistemas com mais desempenho e com eficiência energética. Natentativa de ter sistemas com melhor desempenho aumenta-se a freqüênciamas, neste caso, aumenta-se a energia consumida. Outra forma é diminuindoos valores de tensão aplicada, mas isso faz com que exista menos energia e,portanto, faz com que o sistema seja usado com uma duração menor, alémde ter uma possível diminuição do seu desempenho. Portanto, há um com-promisso de projeto, e os projetistas ou os usuários devem estar cientes destecompromisso. Para melhorar o consumo de energia, existem propostas baseadas emhardware e a respectiva contrapartida daquelas baseadas em software. As soluções em hardware focalizam o projeto de novos componentes, adefinição de novas arquiteturas e a utilização de novas tecnologias, que con-sumam menos potência. O re-projeto de circuitos ou componentes baseadosem software, visa criar uma nova versão de um programa que tem a mesmafuncionalidade, mas com menor consumo de potência. Assim, uma técnica bastante usada é conhecida como escalonamento devoltagem (voltage scaling), a qual permite ajustar, em tempo de execução, afreqüência do processador e a tensão fornecida, sob controle do software deaplicação. Alguns resultados podem ser vistos na Figura 6.4. A figura mostra que como aumento da freqüência de operação, aumenta-se também a corrente consu- 9
    • E. Moreno e R. Barretomida pelo circuito, o que produz um aumento no consumo de energia. Isso éválido para os diferentes programas executados. O lado direito da Figura 6.4mostra o comportamento do consumo de energia para o programa FFT. Nestecaso, verifica-se que com o aumento da tensão ou freqüência, aumenta o con-sumo de energia medido em Joules. Figura 6.4. Impacto de Diminuir Voltagem e Freqüência [Ellis 2003] A técnica de usar vários valores de tensão e/ou de freqüência está se tor-nando tão significativa, que na atualidade há vários processadores que ofere-cem a posssibilidade de ter vários níveis de tensão, e o valor de funcionamentopode ser selecionado pelo usuário. Por exemplo, a Figura 6.5 mostra que o pro-cessador StrongARM permite dois valores (233 MHz e 2V e, 175 MHz e 1.5V),enquanto o processador XScale permite cinco possíveis valores, a saber: 150MHz e 0.75V, 400 MHz e 1.0V, 600 MHz e 1.3V, 800 MHz e 1.6V e, 1 GHz e1.8V. A Figura 6.5 permite visualizar o desempenho (medido em MIPS - Milhõesde Instruções Por Segundo) e a potência consumida pelo processador (medidaem watts). Nesta figura observa-se que tanto o desempenho quanto a energiado processador aumenta, conforme também aumenta os valores de tensão ede freqüência. Na Figura 6.5 também é possível observar que o processador StrongARMpossui consumo de energia maior que o desempenho, enquanto o processadorXScale possui menor consumo de energia. Isso se deve ao fato de que aIntel tem investido em pesquisas e técnicas para diminuição do consumo deenergia. A Tabela 6.2 mostra a política de diminuição de energia que a Inteltem especificado para um sistema computacional, assim como para cada umde seus principais componentes. Na Tabela 6.2 é possível observar que a Intel possui um projeto de cons-trução de um notebook, o qual tem aproximadamente 50% do consumo de um10
    • Técnicas para Diminuir o Consumo de Energia Figura 6.5. Voltagem e freqüência no processador Intel XScale [Intel 2005].sistema normal. Isso será possível usando técnicas para diminuir o consumoda maioria dos componentes que constituem o sistema. Os componentes queterão diminuição são: o processador, a memória cache, o subsistema gráfico,o subsistema de áudio, a fonte de potência, e o sistema de tela. Os outroscomponentes não apresentam muita diferença com os sistemas já existentes. Um outro ponto importante relacionado com a técnica de mudar os valoresde tensão e de freqüência, é que é possível mudar ambas variáveis ao mesmotempo, tendo assim um maior impacto na diminuição do consumo de energia.Só recomenda-se ter cuidado, pois diminuir esses valores pode acarretar pro-blemas de degradação do desempenho, conforme se observa na Figura 6.5. Essa mudança pode acontecer de forma estática, isto é, antes de se ini-ciar a execução de um determinado programa. Porém, o grande desafio atualé realizar essa mudança de forma dinâmica, isto é, em tempo de execução.Essa técnica é conhecida como DVS - Dynamic Voltage Scaling, ou mais com-pleta ainda DVFS, que inclui também a possível mudança dinâmica do valor dafreqüência de operação do sistema. Outra técnica está ligada com a otimização dos dados e/ou do código namemória. Esta técnica pode produzir um menor uso dos componentes do sis-tema. As otimizações de código, por exemplo, podem produzir menos tran-sições dependendo da forma como o código é executado e, também, da or- 11
    • E. Moreno e R. Barreto Tabela 6.2. Comparação nos Objetivos de Potência em Sistemas Intel [Intel, 2005]ganização dos bits. Conseqüentemente, pode-se ter resultados diferentes noconsumo de energia dependendo, principalmente, da ordem de execução dasinstruções. Da mesma forma, de acordo com o dado a ser enviado, pode-se ter diferen-tes arranjos e diferentes consumos. Na Figura 6.6 tem-se que enviar 2 bytes0xFF e 2 bytes 0x00, existem diversas formas de arranjá-los considerando quea atividade de chaveamento (ou transição) pode variar de 1, 2, ou 3 transi-ções. Se a preocupação principal for economia de energia, então tem-se queprocurar o melhor arranjo. Figura 6.6. Exemplo de atividade de chaveamento ou transição. Um exemplo do consumo de energia e da quantidade de energia salva podeser dado usando como medida a distância de Hamming [Lin and Costello 1993],12
    • Técnicas para Diminuir o Consumo de Energiaque é a diferença entre duas strings binárias de mesmo tamanho. Em outraspalavras, a distância de Hamming é o número de bits que diferem na mesmaposição em duas seqüências de igual tamanho. Esta medida pode ser usada,por exemplo, para estimar o consumo de energia e a quantidade de energiaque pode ser economizada. Supondo que é desejado transmitir os 5 bytes se-guintes 0xB3, 0x4C, 0xAB, 0x58, 0xBE. Se o dado for transmitido na ordemmencionada pode-se ver na Figura 6.7(a) que haverá 30 transições, ou seja,a distância de Hamming é 30. Por outro lado, na Figura 6.7(b) o mesmo con-junto de dados é transmitido com apenas 20 transições (a nova distância deHamming é 20). Neste caso, tem-se uma economia de (1 − 20 ) = 33% nas 30transições, o que representa uma boa economia de energia. Figura 6.7. Seqüência de dados e código de Hamming. É importante ressaltar que as técnicas de DVFS e a de re-organização dosdados estão intimamente ligadas às técnicas de diminuição de consumo deenergia pelos compiladores. Estas técnicas são melhor explicadas nas Seções6.3 e 6.5. Entretanto, é importante ter em mente que elas produzem, também,diminuição de energia devido aos circuitos.6.3. Nível de Arquitetura Esta seção apresenta as principais considerações para diminuir consumode energia, sob aspectos e técnicas arquiteturais. Como exemplo pode-semencionar que há esforços na tentativa de definir o conjunto de instruçõesde forma específica à aplicação, os conhecidos ASICs (circuitos integrados deaplicação específica) e ASIPs (processadores de aplicação específica). Além disso, outra técnica é definir instruções específicas que permitam teras mesmas funcionalidades de uma instrução normal, porém com critérios demenor consumo. Como exemplo, pode-se mencionar que haverá instruçõesespeciais para acessar memória, instruções para acesso eficiente a memóriacache, instruções que permitam realizar funcionalidades mais complexas dedi-cadas a somas, multiplicações e outras operações aritméticas eficientes tantoem desempenho quanto em consumo de energia. 13
    • E. Moreno e R. Barreto Outro ponto relevante é o uso de arquiteturas reconfiguráveis, as quaispermitem reconfigurar de forma dinâmica não somente o conjunto ISA, mastambém as funcionalidades arquiteturais de um determinado circuito em funçãodas necessidades específicas da aplicação [Hauck 2008]. Conforme discutido em [Silva et al. 2007], a técnica rISA (ou Reduced Bit-width Instruction Set Architecture) é um recurso arquitetural empregado parareduzir o tamanho do código de programas [Shrivastava et al. 2002]. Algunsprocessadores possuem este recurso e executam instruções baseados em doisconjuntos distintos. Um deles é o conjunto normal ISA do próprio processadore o outro é o conjunto de instruções reduzidas, o qual engloba as instruçõesmais freqüentes, existentes no código do programa, as quais são codificadasem um número menor de bits. Alguns exemplos de processadores que usamesta técnica rISA são: o processador ARM7TDMI, o TinyRISC, o ARC Tangent,o STMicro da família ST100 e o MIPS32/16 bit. Segundo [Silva et al. 2007], os processadores baseados na técnica rISA,expandem dinamicamente as instruções reduzidas em suas correspondentesinstruções normais. Conforme afirmado por [Shrivastava et al. 2002], cada ins-trução reduzida conta com uma instrução equivalente no conjunto de instru-ções normal, fazendo com que o processo de tradução seja simples e direto,o que exige somente a inclusão de uma simples unidade de tradução no hard-ware do processador. Importante observar que nenhum hardware adicional énecessário. Além da redução de tamanho do código do programa, um programa cominstruções reduzidas requer menos acessos à memória de instruções quandoé executado. Conseqüentemente, há um decréscimo no consumo de ener-gia neste subsistema. Se todo o código do programa pudesse ser expressoem termos de instruções reduzidas, então aproximadamente 50% de reduçãode tamanho seria obtida e, conseqüentemente, haveria uma proporcional redu-ção no consumo de energia na memória de instruções [Shrivastava et al. 2004,Silva et al. 2007]. Segundo [Silva et al. 2007], o uso do rISA para a redução do tamanho docódigo de programas e, conseqüentemente, para a redução do tamanho damemória ROM exigida no sistema, diminui o custo do produto final. Seguindo alinha de pesquisa de [Shrivastava et al. 2004], os processadores contemporâ-neos que usam rISA, e suas implementações que usam instruções reduzidas,dependem também dos formato que essas instruções seguem. Em [Shrivastava et al. 2002], foram empregados diversos formatos, os quaisvariam na quantidade de bits que empregam para a especificação dos diferen-tes campos da instrução (opcode, registradores e imediatos), assim como noemprego ou não de instruções especiais, que não fazem parte do código origi-nal do programa, e que têm como objetivo complementar informações que nãopodem ser representadas com o reduzido número de bits disponível no formatoem questão. Segundo [Silva et al. 2007], essas instruções reduzidas especiais, como14
    • Técnicas para Diminuir o Consumo de EnergiarISA extend, por exemplo, usada para completar valores imediatos, requeremum processo de tradução mais complexo e geram um impacto negativo no de-sempenho da aplicação, como será explicado na próxima seção. O número debits usados para especificar o opcode, nestes formatos abordados, é 4 e 7, oque permite a redução de 16 e 128 instruções distintas (diferentes opcodes)do código original, respectivamente. Eles relatam que o formato rISA-4444 (16opcodes distintos e acesso a 16 registradores por operando) apresenta o me-lhor resultado em termos de redução de código, levando-se em consideração ocompromisso entre a redução obtida e a complexidade da unidade de tradução.O trabalho descrito por [Shrivastava et al. 2004], afirma que a principal vanta-gem de rISA é a alta taxa de compressão de código e a economia de energia,vantagens obtidas com um mínimo de alterações no hardware do processador. Levando em consideração as analises anteriores, [Silva et al. 2007] con-seguiu mostrar que a existência de um algoritmo de busca para redução decódigo não é suficiente para atingir os melhores resultados em termos de con-sumo de energia, uma vez que não leva em consideração o aspecto dinâmicode execução da aplicação. Silva mostrou e analisou também um algoritmo queleva em consideração este aspecto dinâmico. O algoritmo foi aplicado e usadoem um processador MIPS com e sem memória cache, obtendo uma economiamédia de 26% no acesso à memória de instruções em um modelo base rISA,em uma organização sem memória cache. Outra técnica arquitetural relaciona-se com o tratamento da fila de execu-ção das operações fora de ordem (out-of-order execution). Nos processadoresque adotam pipeline com a técnica de execução fora de ordem, varias instru-ções fora da ordem normal e seqüencial podem ser executadas conforme osdados das próximas instruções estejam disponíveis. Só que esses dados de-vem ser armazenados em buffers especiais, o que acarreta um acréscimo noconsumo de energia. Em [Buyuktosunoglu et al. 2002], foi mostrado um trabalho de pesquisa di-recionado a técnicas que significativamente diminuem a potência das filas deexecução enquanto mantém o funcionamento de alto desempenho. Eles pro-puseram duas técnicas: a primeira é a implementação de uma estrutura CAM/-RAM para a emissão de instruções na fila de instruções aptas para serem exe-cutadas, e um modelo adaptativo que libera a inserção e transmissão de portas(ver Seção 6.2, que discute os circuitos ativos ou não, em função da sua atualnecessidade de funcionamento). Segundo os autores, a utilização dessas duastécnicas fornece um ganho de 73% na diminuição de energia consumida pelosprocessadores executando o benchmark SPEC CPU 2000, com somente 3%de degradação do desempenho. A Figura 6.8 mostra o impacto dessa técnica, quando comparada a técnicasnormais como aquelas que somente usam sistemas baseados em clock gating,ou sistemas que usam a técnica de data-gating. Observa-se que a técnicade CAM/RAM permite um ganho de até 60%, na diminuição do consumo deenergia. 15
    • E. Moreno e R. Barreto Figura 6.8. Dissipação alternativa na emissão de instru- ções [Buyuktosunoglu et al. 2002]. A idéia central baseia-se no fato de cada aplicação possuir um padrão deexecução e, portanto, pode-se ajustar a fila das instruções que podem ser exe-cutadas. Outras técnicas baseiam-se no fato de realizar um escalonamentoestático, dando ênfase na redução da complexidade da lógica de emissãodessas instruções [Canal and Gonzalez 2000, Folegnani and Gonzalez 2000,Folegnani and Gonzalez 2001]. Outra vertente de otimização do desempenho de um programa relaciona-se com diminuição do número de instruções, o qual melhora também a energiaconsumida uma vez que se diminui o número de ciclos necessários para com-pletar uma tarefa [Grunwald 2002]. Esta técnica está intimamente ligada aomelhoramento e eficiência de algoritmos e compiladores. Alguns trabalhos, por exemplo [Patterson and Hennessy 2007], têm focadoem técnicas de especulação, que é uma ferramenta fundamental em arquite-tura de computadores, pois permite que uma implementação arquitetural al-cance alto paralelismo de instruções e, portanto, alto desempenho, tentandofazer predição de algum resultado de alguns eventos específicos. A maioria dosprocessadores atuais implementam predição de desvios (branch) para permitirmudanças especulativas no fluxo de controle, enquanto outros trabalhos temfocado em predição de valores de dados para diminuir as dependências de da-dos [Graybill and Melhem 2002, Lipasti 1997]. Importante salientar que o usoinadequado de técnicas de especulação faz com que exista trabalho perdido, oque pode trazer uma sobrecarga no consumo de energia. O trabalho de [Grunwald 2002] propôs duas técnicas para melhorar a es-peculação. Uma das técnicas usa intervalos de confiança para implementarmelhor a técnica de pipeline gating. Intervalo de confiança é uma técnica quepermite aumentar a qualidade de uma determinada predição, enquanto pipe-line gating é uma técnica de controle da especulação que usa intervalo deconfiança para reduzir a especulação em processadores com pipelining. A16
    • Técnicas para Diminuir o Consumo de Energiadiminuição da atividade de processamento diminui o número de buscas de ins-truções realizadas pelo processador, o que pode então diminuir a energia. Aoutra técnica proposta por [Grunwald 2002] faz um maior controle da especu-lação usando técnicas de escalonamento de voltagem (DVS). Como se observa, várias técnicas estão intimamente relacionadas e po-dem ser usadas em conjunto. Interessante perceber que há novamente certoparadoxo entre desempenho e energia. Para aumentar o desempenho, os pro-cessadores têm incluído melhoramentos arquiteturais baseados em técnicasagressivas de especulação, aumentando o paralelismo de instrução. Estasmelhorias têm aumentado o número de instruções por ciclo (IPC - InstructionsPer Cycle), aumentando assim o consumo de energia, o qual pode se tornarainda mais crítico se houver trabalho perdido, isto é, se a especulação nãofor adequada. Neste sentido, quando o alvo do projeto é a energia, então énecessário usar técnicas de pipeline gating, que visa melhorar ou diminuir apercentagem de instruções que estimulam a especulação [Grunwald 2002]. A Figura 6.9 mostra o consumo de potência de um processador Pentium-Pro, o qual foi dividido em função do consumo de cada componente. Observa-se que os componentes que mais demandam consumo são a busca e a de-codificação, assim como a utilização das memórias cache e os componentespara realizar o escalonamento dinâmico. Por esse motivo, pesquisadores têmdedicado muito esforço investigando como diminuir o consumo nesses compo-nentes. Figura 6.9. Consumo de Energia em um Processador com Pipeline [Grunwald 2002]. 17
    • E. Moreno e R. Barreto É possível observar também que há várias operações que requerem a exe-cução de várias operações micro-arquiteturais, as quais acabam consumindomais energia do que a instrução de processamento desejada. Por exemplo,quando se realiza uma soma de dois inteiros em uma máquina RISC, somente5% do consumo total de energia é devido à circuitaria do próprio somador, orestante é dissipado por estruturas tais como tag do cache, arranjos de dados,TLBs, arquivos de registradores, registradores do pipeline, e lógica do controledo pipeline [Grunwald 2002]. Portanto, dada a consideração anterior há vários estudos que tentam mu-dar o padrão de acesso ou o uso de alguns desses componentes, visando en-tão diminuir o consumo sem afetar consideravelmente o desempenho. Nessesentido, [Grunwald 2002] propôs três técnicas, sendo duas delas arquiteturaise uma terceira devido ao compilador. Uma das técnicas consiste em usar latches especiais para realizar um by-pass exposto, com ajuda de uma arquitetura baseada em acumulador, que usainformação do tempo de vida de um registrador (em tempo de compilação) parareduzir o número de leituras e escritas ao arquivo de registradores realizadosem tempo de execução. Em uma computação, vários valores de registradorespossuem uma vida curta, pois são produzidos por uma instrução e consumidospela instrução seguinte, e nunca mais são usados novamente. A informaçãodo tempo de vida desses registradores pode ser codificada adicionando regis-tradores do acumulador a registradores de propósito geral da arquitetura RISC,permitindo então que o software passe esses valores diretamente de uma ins-trução à próxima, sem necessidade de acessar esses registradores de propó-sito geral. [Grunwald 2002] mostrou que essa técnica pode remover 34% detodas as escritas em registradores e uma média de 28% dos acessos a todasas leituras. A segunda técnica proposta por [Grunwald 2002] é uma otimização dosacessos aos tags quando se faz uso da memória cache. Em processadores debaixo consumo de energia, os acessos aos tags são responsáveis por aproxi-madamente 50% da energia usada quando se faz um acesso ao cache. Elesconseguiram mostrar que há casos onde se pode verificar 2 acessos ao mesmobloco do cache e, neste caso, se realiza então uma marcação de operaçõesload e store, em tempo de compilação, que fazem com que o hardware evite dechecar o tag do segundo acesso. Os autores mostraram que é possível indicaraté 70% da checagem dos tags, em experimentos realizados com programasdo SPECint95 e do benchmark Mediabench. Em termos de arquitetura, pode-se também pensar em adicionar instruçõesespeciais ao conjunto ISA do processador, que permitam realizar otimizaçõesaos acessos de memória, incluindo otimizações de código que permitam termais dados nas memórias caches. Essas otimizações são necessárias, poisconforme mostra [Tiwari and Lee 2005], na Tabela 6.3, os acessos a dados quenão estão no cache ou não estão na memória principal de um computador 486DX2 são críticos em termos de consumo de energia.18
    • Técnicas para Diminuir o Consumo de Energia Tabela 6.3. Consumo de Energia em Instruções e Opera- ções de Memória [Tiwari and Lee 2005]. Os dados da Figura 6.10 foram obtidos por [Marwedel et al. 2005] a partirda utilização do simulador CACTI. A parte superior da Figura 6.10 mostra ocomportamento do consumo de energia (medido em nJ) conforme se aumentao tamanho da memória. A parte intermediária da Figura 6.10 mostra a energiapor acesso a memória em função do tamanho de memória, para vários tama-nhos de sub-bancos de memória, e a parte inferior da Figura 6.10 mostra otempo de acesso (ns) em função do tamanho da cache, também para váriossub-bancos de memória. Os autores concluíram os benefícios em se usar pe-quenas memórias, e caso a memória seja de tamanho maior, então, sugeremo uso de sub-bancos.6.4. Nível do Sistema Operacional Esta seção apresenta as principais técnicas para otimizar o consumo deenergia em sistemas embarcados, sob uma visão de mudar e otimizar as fun-ções inerentes ao sistema operacional. Técnicas em hardware conhecidas como clock gating permitem ao softwarecolocar os recursos em um estado de hibernação quando eles se encontramno estado ocioso (idle), e muda depois seu estado, para o de execução ou deoperação quando são novamente solicitados para alguma operação. Em geral,essas técnicas confiam na existência de uma camada arquitetural que permiteacesso aos múltiplos modos ou configurações de potência sempre sob con-trole do software. Esses modos de potencia têm diferentes compromissos dedesempenho e potencia. A idéia é que o software (aplicação) consiga gerenciaresses modos satisfazendo certa demanda de desempenho enquanto reduz apotencia da CPU (ou de outros componentes) tanto quanto seja possível. Interessante observar que a configuração desses modos de potência, emfunção dos diferentes estados de execução da CPU, podem ser também apli-cados a outros componentes e a dispositivos não necessariamente micropro-cessados. A Figura 6.11 mostra a distribuição e uso dos diferentes estados de compo-nentes eletrônicos. Pode se visualizar que há tempo para operação e temposem que esses componentes estão em estado dormente (sleeping) ou ocioso 19
    • E. Moreno e R. Barreto Figura 6.10. Impacto da memória no consumo de ener- gia [Marwedel et al. 2005].(idle), e seria interessante aproveitar esses tempos para desligar esses com-ponentes ou aplicar alguma técnica para que nesses estados o consumo dimi-nua. A Tabela 6.4 mostra duas placas de transmissão de dados onde os diferen-tes estados possuem um consumo de energia diferente, o que valoriza aindamais a idéia de criar técnicas e ou mecanismos que permitam mudar o estadode operação dos componentes visando um menor consumo. Nessa tabela épossível verificar que o estado de menor consumo é o sleep, seguido pelo es-tado idle. Observe que quando o componente se encontra em operação detransmissão, o consumo de energia é bem maior (em torno de 47%) do quequando está em operação de recebimento de dados. Assim, uma idéia se-ria colocar, se possível, o componente em estado sleep, em invés do estado20
    • Técnicas para Diminuir o Consumo de Energia Figura 6.11. Transição de estados de execução. Tabela 6.4. Consumo de Corrente para Diferentes Esta- dos de Execuçãoidle, economizando de 12 a 23 vezes o consumo desse componente (ver Ta-bela 6.4). Os dados de potência para o processador StrongARM 160MHz, 2 caches-on chip de 16kB, em função dos seus estados de funcionamento são: • Modo Normal Ativo: 450 mW. • Modo idle: 20mW, retorna ao normal, não há atrasos. Neste caso, o relógio interno é parado. • Modo sleep: 150 nW, retorna ao estado normal em 140ns. Neste caso, a potencia interna está desligada (off) e os circuitos de I/O permanecem ativos. Importante salientar que cada componente possui seu próprio sistema deexecução, o que faz com que tenha estados diferentes e cada um deles comseus próprios tempos de funcionamento. Deve-se observar também que na transição de um estado para outro háum tempo de atraso e esta é uma operação que também consome energia,conforme se observa na Figura 6.12. Importante salientar que nas transiçõesocorre um fenômeno conhecido como transitório elétrico (produzido quandoo sistema ou componente está funcionando em um determinado estado, sobuma condição, e muda para outro com características físicas diferentes) quepode ser prejudicial para o consumo de energia do circuito e para seu próprio 21
    • E. Moreno e R. Barretofuncionamento pois, dependendo do transitório, pode levar a uma falha físicado circuito. Portanto, apesar de ser aparentemente simples de implementar,deve-se ter cuidado com a energia consumida e com os efeitos gerados nastransições. Figura 6.12. Energia consumida em diferentes estados de uma RAMBUS [Ellis, 2003].6.5. Nível do Complilador Esta seção descreve os principais métodos ou técnicas para diminuir o con-sumo de energia considerando aspectos de otimização do compilador. No contexto dessa seção, um otimizador é um programa que recebe comoentrada um programa P e constrói outro programa P , equivalente a P, que émelhor que P segundo algum critério [Rangel 2000]. Há diversas formas de se fazer otimização em compiladores. A maneira detratar a otimização pode ser extremamente pragmática. Por exemplo, em umprograma grande, a execução gasta 90% em 10% do código, e 10% do temponos 90% do código restantes. Nesse caso, o tempo maior de execução (“os90%”) é gasto no laço mais interno (“os 10%”) [Aho et al. 2006]. Por isso queas otimizações são principalmente dedicadas aos laços. Até pouco tempo atrás, os otimizadores do compilador enfocavam maisa questão desempenho e tamanho do código. As otimizações tradicionais,tais como, eliminação de sub-expressões comuns, eliminação de redundânciaparcial, redução de força (strenght reduction), ou eliminação de código mortosimplesmente melhoram o desempenho de um programa por reduzir o trabalhoa ser feito durante a execução do programa [Allen and Kennedy 2001].22
    • Técnicas para Diminuir o Consumo de Energia Com o avanço dos sistemas embarcados, principalmente os sistemas mó-veis e sem fio, os quais são dependentes de bateria, surgiu a demanda poraplicações com baixo consumo de energia/potência. Uma das alternativas desolução desse problema é a otimização do compilador segundo o critério con-sumo de energia/potência. É sabido que a redução da carga de trabalho (workload) pode também re-sultar em redução de consumo de potência/energia. Por isso é que há algumastécnicas de otimização em que o código é otimizado tanto para melhorar seudesempenho quanto para o consumo de energia. Por exemplo, as otimizaçõesrelacionadas com a hierarquia de memória, tais como bloqueio de laço (loopblocking ou loop tiling) e alocação de registradores, tentam manter o dado omais próximo possível de modo que seja acessado rapidamente. Obviamenteque mantendo o valor na cache, no lugar da memória, ou em um registrador, nolugar da cache, também ajuda a reduzir o consumo de potência/energia devidoa redução das atividades de chaveamento (ver Seção 6.2). Entretanto, existe uma diferença fundamental nos modelos e métricas usa-dos para otimizar o desempenho das usadas para otimização de consumo depotência/energia. Muitos modelos e/ou métricas levam em consideração o ca-minho crítico (critical path), que pode ser definido como a seqüência de ati-vidades que devem ser concluídas no tempo programado para que o projetocomo um todo possa ser finalizado dentro do prazo final [Woolf 2007]. O ca-minho crítico pode também ser entendido como o pior caminho a ser seguido.É importante entender a seqüência do caminho crítico para saber onde há ounão flexibilidade. Por exemplo, poderá haver uma série de atividades que fo-ram finalizadas com atraso, no entanto, o projeto como um todo ainda seráconcluído dentro do prazo. Isto ocorre porque tais atividades não se encontra-vam no caminho crítico. Portanto, se uma otimização introduz atividades forado caminho crítico o desempenho não é afetado. Quando essas atividadesnão-críticas levar a um decremento do caminho crítico, a otimização será be-néfica. Entretanto, no contexto de otimização de potência/energia, isto não éverdade. Qualquer atividade, estando ou não no caminho crítico irá contribuirpara a dissipação de potência geral e uso de energia. A Figura 6.13 mostra um exemplo que ilustra a diferença de otimizaçãopara potência/energia versus otimização para melhorar o desempenho, consi-derando uma transformação de código fonte, nesse caso, a movimentação decódigo de invariante de laço [Ponce 2006]. No programa exemplo, a atribuiçãoa = b * 2 é um invariante de laço. Para uma arquitetura escalar tradicional,esta otimização irá mover a atribuição para fora do laço, resultando no códigoda Figura 6.13(b). Em uma arquitetura VLIW (Very Long Instruction Word), otrecho de código da Figura 6.13(a) pode ser melhor que o código em (b) seinstruções vazias estiverem disponíveis para executar a atribuição invariantedo laço para cada interação do mesmo. Embora a atribuição ocorra 10 vezes,esta abordagem pode reduzir o caminho crítico. Dependendo da estratégia decompilação usada, a movimentação da atribuição para fora do laço pode in- 23
    • E. Moreno e R. Barretocrementar o caminho crítico. No contexto de otimização de potência/energia,executar computações redundantes devem ser evitadas, e portanto, mover aatribuição invariante fora do laço tipicamente leva a uma redução do consumode potência/energia.for (i=0; i<10; i++) { a = b * 2; a = b * 2; for (i=0; i<10; i++) c[i] = d[i] + 2.0; c[i] = d[i] + 2.0;} (a) (b) Figura 6.13. Comparação entre otimizações [Ponce 2006] Outro exemplo onde otimizações para potência/energia pode ser diferentedaquelas relacionadas com a melhoria do desempenho é a execução especula-tiva [Kaeli and Yew 2005]. A especulação executa atividades à frente baseadoem algumas suposições sobre o comportamento futuro do programa. Se estassuposições forem falsas, algum trabalho adicional será necessário para desfa-zer o impacto das atividades especuladas. Software pre-fetching é um exemplode tais transformações. O compilador pode inserir instruções de pre-fetching para acesso a memó-ria entre desvios de controle. Essa otimização pode ser muito efetiva, assu-mindo que a máquina alvo permita múltiplas cargas de dados. Além do mais,se a atividade especulativa puder ser escondida no caminho de execução não-crítico, nenhum impacto negativo no desempenho irá ocorrer. No contexto deotimização de potência/energia cada atividade especulativa adicional tem queser compensada pelo benefício geral da otimização a fim de fazer com que osresultados não sejam piores. Em outras palavras, a janela de benefício temque ser maior para potência/energia do que desempenho. Isto não significaque especulação não possa ser aplicada para otimização de potência/energia,mas sugere-se uma aplicação menos agressiva dessa transformação restrin-gindo para casos onde o benefício é mais provável. Os primeiros compiladores usavam a velocidade ou tamanho do códigocomo métricas de otimização. Os compiladores mais modernos incluíram umanova métrica, o consumo de energia. A energia consumida por um processadordepende do estado anterior e da entrada atual. Nesse caso, o consumo é de-pendente da escolha da instrução e a ordem das instruções. Reordenar as ins-truções pode reduzir a atividade de chaveamento e conseqüentemente o con-sumo de energia geral. Existem diversos esforços no ajuste de escalonadoresde instruções para otimizar o consumo de energia [Allen and Kennedy 2001,Ponce 2006]. Uma observação chave nessas otimizações é que o maior deter-minante do consumo de energia é a atividade de chaveamento (switching) nocaminho de dados (datapaths). Assim, por meio do ordenamento das instru-ções, de tal forma a reduzir o chaveamento entre instruções sucessivas, pode24
    • Técnicas para Diminuir o Consumo de Energiaser criada uma escala de instruções cujo resultado final produz um menor con-sumo de energia [Muchnick 1997]. A seguir será detalhado as abordagens para redução de acesso ao barra-mento, redução no acesso à memória, técnicas de escalonamento de instru-ções e transformação de laços [Ponce 2006].6.5.1. Redução no Barramento Com o incremento do tamanho do armazenamento de dados, ao mesmotempo em que os processadores estão com grandes palavras de instruções(instruction words), hoje com 32, 64 ou 128, os barramentos de transmissão dedados estão ganhando muita importância. É natural que com este incremento,os barramentos passem a consumir cada vez mais potência. Por causa da lar-gura e comprimento, barramentos contém uma grande capacitância em suaslinhas. Reduções de consumo de energia importantes podem ser atingidaspor meio da redução da atividade de chaveamento. Algumas técnicas foramdesenvolvidas para reduzir as transições nos barramentos de dados e de en-dereço [Stan and Burleson 1995, Su et al. 1994]. Código de Gray e inversãoda codificação serão detalhadas nesta seção.6.5.1.1. Código de Gray O código de Gray é devido ao físico e pesquisador da Bell Labs FrankGray que em 1953 registrou uma patente nos EUA sobre uma nova forma decodificação chamada de Pulse Code Communication. Código de Gray é uma seqüência binária com a propriedade de que so-mente um bit é trocado entre qualquer dois elementos consecutivos, ou seja,os dois códigos têm distância de Hamming igual a um. Na Figura 6.14(a) pode-se ver a codificação em binário de uma seqüência de números, e na Figura6.14(b) a mesma seqüência codificada pelo código de Gray. Pode-se calcularque para os 4 bits, a codificação binária vai requerer 26 transições, enquantoque a codificação de Gray requer somente 15. Portanto, a redução seria de 11transições, que corresponde a 42%. Uma vez que é comum novas aplicações acessarem grandes quantidadesde dados, é importante encontrar uma forma de endereçar a memória de talforma que possa-se reduzir a atividade de chaveamento. Quando o dado aser trazido é uma instrução, com exceção das instruções de desvio, na maioriadas vezes o acesso à memória será contínuo devido a execução seqüencialdos programas. Nesse contexto, para reduzir a distância de Hamming entreacessos a instruções, uma alternativa para baixo consumo de energia seria aadoção do código de Gray [Su et al. 1994]. 25
    • E. Moreno e R. Barreto Figura 6.14. Código binário e código Gray.6.5.1.2. Inversão de Codificação de Barramento Caso a distância de Hamming entre dois acessos consecutivos consecuti-vos ao barramento seja maior do que a metade do tamanho do barramento, istoé, mais do que a metade dos bits devem ser trocados, [Stan and Burleson 1995]propuseram um método que provê redução na atividade de chaveamento nobarramento pela inversão da codificação do barramento. Neste caso, este mé-todo melhora em pelo menos 50% de redução em cada utilização do barra-mento. Entretanto, esta abordagem requer um bit extra, como um sinal, parasaber se o barramento está no modo original ou no modo invertido. Con-seqüentemente, este bit introduz uma atividade de chaveamento adicional, em-bora usualmente proveja uma redução na potência consumida.6.5.2. Redução no Acesso à Memória Uma grande quantidade de uso do barramento é devido ao acesso à me-mória, não somente para endereço, mas principalmente para recuperar dados.Isto possibilita outro meio de economizar potência, uma vez que a partir daminimização do uso do barramento, a comunicação com os dispositivos dememória e com outros componentes é otimizada. Reduções no acesso a memória externa são obtidos por meio de: • incremento da localidade; • uso de registradores;26
    • Técnicas para Diminuir o Consumo de Energia • entrelaçamento de arranjos de dados; e • redução de taxa de falta de cache. Ao executar otimizações do compilador deve-se tentar usar o máximo pos-sível de memória interna. Portanto, a prioridade deve ser o uso de registrado-res internos, depois cache-L1, em seguida cache-L2 e, por último, a memóriaexterna. Otimizando o código para usar endereços da memória interna, nãosomente levará a um melhor desempenho por meio da minimização das ope-rações de E/S, mas também menos potência devido a minimização do uso dobarramento. Para cada uma dessas opções de otimização, existem aborda-gens específicas. Para o caso da otimização do uso de registradores, umaalternativa seria que o compilador reorganize os registradores de tal forma queos registradores usados em cada rotina estejam o mais próximo um do outroquanto possível. Uma técnica proposta por [Delaluz et al. 2000] é entrelaçar os arranjos dedados de tal forma que as operações executadas entre arranjos estejam tam-bém em memória contínua. Um exemplo é mostrado na Figura 6.15. Se essesarranjos forem constantes, será muito mais simples arranjá-los e predizer ocaminho de dados em tempo de compilação, mas este entrelaçamento podetambém ser feito por qualquer tipo de arranjo que seja usado dentro de umprograma. Figura 6.15. Entrelaçamento de arranjos de dados. Esta técnica incrementa a localidade de cache. Um programa em execu-ção como o da Figura 6.15(a) tem uma boa localidade espacial. Entretanto, oarranjo Better da Figura 6.15(b) é mais improvável de ser mantido fora da ca-che. A razão é simples, se mantivermos dois arranjos separados, o endereçobase deles pode causar um conflito na cache. Usando somente um arranjo,como combinação de dois ou três arranjos, é possível garantir que o arranjona cache seja usado o tempo todo. Essa arrumação reduz a taxa de falta nacache. Portanto, o custo de potência de recuperação de novos dados é gran-demente minimizado porque reduz o uso do barramento.6.5.3. Escalonamento de Instruções Escalonamento de instruções é uma técnica de software que rearranjaseqüências de código durante a compilação com o objetivo de reduzir pos-síveis atrasos de execução. Para escalonar as instruções usa-se um grafo 27
    • E. Moreno e R. Barretoacíclico dirigido (directed acyclic graph - DAG) onde cada vértice representauma instrução em um programa. Diferentes restrições podem ser usadas nosDAGs para atingir redução de potência. Uma das otimizações mais comunspara baixo consumo de potência é minimizar a distância de Hamming. Comoapresentado anteriormente, isto pode ser feito pela escolha da ordem de valo-res, mas esses valores podem tratar não somente informação de dados mastambém as instruções a serem executadas. O procedimento para reescalonar um código é o mesmo, tanto para infor-mações de dados quanto de controle. Este pode ser sintetizado em três passosprincipais: 1. particionar o código em blocos, de modo que o procedimento possa ser aplicado seqüencialmente em cada uma das partes; 2. gerar um grafo de dependência de controle (control dependency graph - CDG), para instruções, e um grafo de dependência de dados (data dependency graph -DDG); e 3. percorrer os grafos de dependência para selecionar a nova ordem de instruções e/ou dados mas sujeito às restrições escolhidas (reescalona- mento). Geralmente este escalonamento de instruções é feito pelo compilador. Sóque, nesse caso, acontece um problema. A fim de reduzir a atividade de cha-veamento, o DDG e CDG são normalmente derivados da forma simbólica dasinstruções no código. Entretanto, para calcular a atividade de chaveamento ainformação não é provida neste nível. Por exemplo, a informação do endereçodas instruções de desvio não são conhecidas até serem escalonadas e alo-cadas nos registradores. Por outro lado, quando a montagem é feita antes doescalonamento das instruções, perde-se muita flexibilidade no escalonamento. As principais abordagens de escalonamento de instruções são: cold sche-duling, escalonamento horizontal e escalonamento vertical.6.5.3.1. Cold Scheduling Cold Sheduling [Su et al. 1994, Tiwari et al. 1994] é uma técnica de escalo-namento de instruções executada como uma fase da compilação que prioriza aseleção de cada instrução baseada no custo da energia de se colocar esta ins-trução como a próxima instrução a ser executada. Esta técnica visa, portanto,reduzir o consumo de energia minimizando as atividades de troca ocorridas nocircuito do processador durante a transição entre duas instruções consecutivas.As entradas para o cold scheduling são o DDG e o custo de potência entre duasinstruções consecutivas. Este escalonamento foi testado por [Su et al. 1994] eteve reduções de consumo de energia de 20% a 30% com uma redução dedesempenho de somente 2% a 4%.28
    • Técnicas para Diminuir o Consumo de Energia Uma vez que o DDG tenha sido gerado, o custo de potência entre duasinstruções pode ser calculado por sua distância de Hamming. Nesse caso,quanto menor for a distância de Hamming menor será o consumo de potência. A idéia pode ser sumarizada da seguinte forma: cada instrução é assumidater um custo base (denotando o seu consumo de energia médio). Uma arestaponderada entre nodos i e j fornece a energia consumida pela atividade dechaveamento da instrução i para a instrução j. Esta aresta é também chamadade custo interinstrução (ou custo do estado do circuito, do inglês circuit-statecost). Uma vez que o tipo e número de instruções são fixos antes do esca-lonamento das instruções, um algoritmo de escalonamento pode reduzir comsucesso o custo total inter-instrução. O algoritmo de escalonamento é um processo iterativo que funciona comodescrito abaixo: • para cada bloco de instruções, enquanto houver instruções do bloco a serem escalonadas: – dada a lista de instruções prontas para executar (obtidas do grafo de dependência) e a última instrução da escala: selecione a ins- trução da lista que exija menor troca de bits em relação à última instrução executada de acordo com a tabela de custos de ativida- des de troca; – adicione a instrução selecionada da lista à nova escala de instru- ções; – adicione à lista de instruções prontas para execução aquelas que estavam dependendo da instrução que foi escolhida nesta iteração utilizando o grafo de dependências.6.5.3.2. Escalonamento Horizontal O escalonamento horizontal necessita de alguma forma de execução pa-ralela de instruções, portanto, é comumente usado em arquitetura VLIW (verylarge instruction word) [Lee et al. 2003]. A idéia inicial da arquitetura VLIW sur-giu nos estudos de computação paralela feitas por Alan Turing, em 1946, e notrabalho de microprogramação de Maurice Wilkes, em 1951 [Wilkes 1986]. Uma CPU microprogramada está relacionada a macroinstruções, as quaisrepresentam as instruções do programa em si. Cada macroinstrução é, por suavez, composta por uma seqüência de microinstruções, cada qual associada di-retamente a alguma unidade funcional do processador (por exemplo, a ALU).Esta organização é denominada microprogramação horizontal [Dasgupta 1977]e é a base das arquiteturas VLIW. Ela se contrapõe à microprogramação ver-tical, onde os campos das instruções devem ser decodificados para produziros respectivos sinais de controle. Assim, a microprogramação horizontal per-mite que todas as possíveis combinações de sinais (e, portanto, operações) 29
    • E. Moreno e R. Barretosejam expressas diretamente como instruções, evitando-se que a lógica de si-nais seja concentrada em apenas uma única unidade de decodificação. Destaforma, uma conseqüência natural da microprogramação horizontal é a neces-sidade de uma palavra maior para cada instrução. A filosofia VLIW propõe a utilização de técnicas de escalonamento estáticoefetuadas exclusivamente pelo compilador, onde múltiplas operações indepen-dentes são compactadas em apenas uma palavra longa, conseguindo-se odespacho simultâneo de mais de uma instrução [Phillips White Papers 2003]. Por exemplo, considerando um barramento de macroinstruções de 128 bits,este pode encaixar quatro microinstruções de 32 bits, e com quatro unidadesde processamento (uma para cada microinstrução) cada uma dessas microins-truções escalonadas na palavra de 128 bits podem ser executadas simultane-amente. A idéia do escalonamento horizontal é reescalonar as microinstruções deuma macroinstrução para minimizar atividades de chaveamento de barramentode instrução. O objetivo é encontrar um escalonamento de instrução tal que adistância de Hamming total de n instruções VLIW consecutivas seja minimi-zada e, adicionalmente, cada macroinstrução seja uma permutação de suasmicroinstruções. O escalonamento horizontal move as microinstruções horizontalmente den-tro de uma única macroinstrução.6.5.3.3. Escalonamento Vertical No escalonamento vertical a execução das instruções são trocadas entresi (antes ou depois) levando em consideração que o resultado deve ser sem-pre o mesmo e, ao mesmo tempo, tentando não degradar o desempenho daexecução [Allen and Kennedy 2001] . Este escalonamento tem complexidadeNP-difícil. Na Figura 6.16 tem-se códigos que podem ser escritos de diferentes for-mas sem alterar o seu significado. Entretanto, este rearranjo deve ser feito emcódigo assembly, de tal forma que o compilador possa efetuar as otimizaçõesnecessárias para que seja escolhido o melhor arranjo dos bits, com o intuito deminimizar a distância de Hamming [Ponce 2006]. No escalonamento vertical as microinstruções se movem entre diversasinstruções. Usualmente este escalonamento ocorre somente dentro de umbloco básico, que tem um grafo de dependência de dados e uma quantidadede ciclos total. Obviamente que a nova escala tem que obedecer o grafo dedependência original e que o novo tempo de ciclo seja menor ou igual que otempo de ciclo original.6.5.4. Transformações de Laços As transformações de laços têm um papel importante na melhoria do de-sempenho da cache e no uso efetivo da capacidade de processamento para-30
    • Técnicas para Diminuir o Consumo de Energia Figura 6.16. Exemplo de escalonamento vertical.lelo. Estudos comprovam que a maior parte do tempo de um programa cien-tífico é gasto em laços [Aho et al. 2006]. Conseqüentemente, a maioria dasanálises e otimizações dos compiladores foram desenvolvidas para fazer comque a execução de laços sejam mais rápidas. Existem algumas otimizações sugeridas em [Kandemir et al. 2000] para im-plementar transformação de laços. Isto pode causar uma melhoria na taxa deacerto da cache, resultando em diminuição do consumo de potência. O prin-cípio da localidade é reforçado, no sentido de forçar o uso de variáveis locaise, portanto, reutilização de registradores. As transformações de laços linearbásicas são: • extensão de laços (loop unrolling). • fusão de laços (loop fusion). • separação de laços (loop tiling).6.5.4.1. Extensão de Laços (Loop Unrolling) Esta técnica tenta salvar tempo por meio da redução do número de instru-ções adicionais que são executadas em laços, reduz as instruções de desvioe incrementa a taxa de acerto da cache [Davidson and Jinturkar 1995]. Alémdisso, esta também ajuda na escala de execução de arquiteturas paralelas. In-felizmente, o uso de registradores em cada interação é incrementado, o quepode ser uma desvantagem em aplicações embarcadas, que usualmente pos-suem severas restrições de memória e registradores. A Figura 6.17 apresenta um código original e o respectivo código após aextensão do laço. Nesse exemplo, o código da Figura 6.17(b) terá somente 20interações. O algoritmo fará 5 vezes menos instruções de desvio, e ainda fazero mesmo trabalho. Com a disponibilidade do paralelismo, cada uma das linhaspoderia ser atribuída a cinco diferentes processadores e o escalonamento ho-rizontal poderá ser aplicado de acordo com o dado a ser usado. 31
    • E. Moreno e R. Barreto Figura 6.17. Extensão de Laços.6.5.4.2. Fusão de Laço (Loop Fusion) Esta técnica junta dois laços em um único laço com a garantia de que amesma tarefa (mesma semântica) é executada [Qian et al. 2002]. Na fusão delaços da Figura 6.18, instruções adicionais foram evitadas uma vez que o laçoocorreu uma única vez mas ainda assim gerou ambos arranjos a e b. A fusãode laços usualmente melhora o reúso de dados e, portanto, reduz a potênciaconsumida. Figura 6.18. Fusão de Laços.6.5.4.3. Divisão de Laço (Loop Tiling) Arranjos que não se encaixam na cache são divididos em peças menoresde tal forma que cada uma possa se ajustar na cache [Song and Li 1999]. Umdos objetivos da redução de potência é evitar a situação de falta do dado nacache, além de tentar fazer um melhor reúso de dados. Por outro lado, quandoum código é dividido, dois ou mais laços são necessários para percorrer omesmo código original. Portanto, deve ser tomado cuidado para determinar seo resultado será de diminuição ou aumento de potência.32
    • Técnicas para Diminuir o Consumo de Energia6.5.5. Considerações Finais Esta seção mostrou as principais técnicas de otimização do compiladorconsiderando o critério de economia de energia. Algumas otimizações comesse fim também otimizam o desempenho, mas não todas. O objetivo maiordessa otimização é reduzir a distância de Hamming entre dois códigos suces-sivos.6.6. Nível de Comunicação Os sistemas móveis são operados a bateria e, usualmente, fazem parte deuma grande rede onde a comunicação ocorre sem fio com outros sistemas. Astécnicas convencionais de projeto com baixo consumo de energia com foco nocircuito e na computação são inadequadas para este tipo de sistema em rede.Apesar de ser usada em parcelas menores de tempo, a comunicação consomealta potência de pico, o qual é muito maior que o custo de potência associadocom computações. A interface de rede sem fio de um computador móvel consome uma fraçãosubstancial da energia total. Medidas mostram que em aplicações típicas, tiponavegador web ou email, a energia consumida quando a interface está ligadae ociosa é mais do que o custo de receber pacotes. Além do mais, o chave-amento entre estados (desligado, ocioso, recebendo e transmitindo) consometempo e energia. A arquitetura de uma rede de computadores é formada por camadas (ou ní-veis), interfaces e protocolos [Tanenbaum 2003]. As camadas são processos,implementados por hardware ou software, que se comunicam com o processocorrespondente na outra máquina. Cada camada oferece um conjunto de ser-viços ao nível superior, usando funções realizadas no próprio nível e serviçosdisponíveis nos níveis inferiores. Nesta arquitetura, os dados transferidos emuma comunicação de um nível específico não são enviados diretamente aoprocesso do mesmo nível na outra máquina, mas são repassados para a ca-mada inferior da máquina transmissora até o nível mais baixo (inicial), onde étransmitido, para depois subir através de cada camada adjacente da máquinareceptora. Os protocolos são conjuntos de regras e formatos que permitem acomunicação entre as camadas nas diferentes máquinas. Em cada camadapodem ser definidos um ou mais protocolos. Já as interfaces representam afronteira entre cada nível adjacente onde uma camada consegue compreenderas informações vindas de outra camada. Inicialmente, nesta seção, será visto como reduzir o consumo de energianas camadas física, enlace, rede e camada de transporte. Depois será apre-sentado algumas formas específicas para redução do consumo de energia de-vido à comunicação, a saber: (a) decomposição do sistema; (b) tratamentodos erros de transmissão; (c) modo dormindo; (d) modificação no protocolo deacesso ao meio. 33
    • E. Moreno e R. Barreto6.6.1. Camada Física Na camada física, sinalização low-swing está sendo investigada para redu-zir a energia da comunicação em interconexões [Zhang et al. 2000]. No casode um simples CMOS driver, a sinalização low-swing é alcançada baixando avoltagem fornecida (Vdd ) do driver. Infelizmente, redução de swing no transmis-sor complica o projeto do receptor. Sensibilidade incrementada e imunidade àruídos são necessários para garantir recepção de dados confiáveis. Recepto-res diferenciais têm sensibilidade e robustês superiores, mas requerem o do-bro da largura de banda do barramento. Para reduzir os overheads, esquemaspseudo-diferenciais foram propostos, onde um sinal de referência é comparti-lhado entre muitas linhas de barramentos e receptores, e o dado de entrada écomparado com a referência em cada receptor. Outra questão chave da camada física é a sincronização. A comunicaçãotradicional tem sido baseada na suposição síncrona, que implica na presençade um sinal de sincronização global, isto é relógios, que definem instantes deamostragem dos dados. Infelizmente, relógios são extremamente ineficientesenergeticamente, e são responsáveis por uma significante fração da potência.Assim, sincronização global não é uma escolha ótima do ponto de vista ener-gético.6.6.2. Camada de Enlace Na camada de enlace, uma característica chave é atingir o nível de confia-bilidade da comunicação com o gasto mínimo de energia. Considere duas técnicas de melhoria da confiabilidade: (i) código de cor-reção de erros; e (ii) código de detecção de erros com retransmissão. Ambasabordagens são baseadas na transmissão de informação redundante, mas cor-reção de erro demanda mais do que a detecção de erros em termos de redun-dância e complexidade de decodificação. Conseqüentemente, pode-se esperarque a transmissão com correção de erros venha a consumir mais potência doque no caso da transmissão sem erros. Entretanto, quando ocorre um erro, osesquemas de detecção de erros requerem retransmissões do dado corrompido.Dependendo da arquitetura da rede, retransmissões podem ser muito custosasem termos da energia (e desempenho). Claramente, escolha entre o custo dacorreção de erros e a penalidade de energia das retransmissões devem ser cui-dadosamente exploradas quando projetando redes eficientes energeticamente. O artigo [Bertolozzi et al. 2002] investiga como lidar com erros de barra-mentos on-chip (por exemplo, ruídos, radiação e atrasos) de modo eficiente doponto de vista de consumo de energia e usando o código de Hamming. Códigode Hamming é um código de detecção que permite não apenas detectar erro deum bit, mas também a localização do bit errado através da inserção de algunsbits de paridade. Se a palavra for de 8 bits, o código de Hamming acrescenta4 bits adicionais, formando o código de Hamming de 12 bits. Mais informa-ções sobre o código de Hamming pode ser encontrada em [Tanenbaum 2003].Usando a correção de erros de Hamming implica em um decodificador um34
    • Técnicas para Diminuir o Consumo de Energiapouco mais complexo, mas com uma penalidade temporal pequena. Se, poroutro lado, o código de Hamming for usado para detecção de erros a retrans-missão tem que ser disparada no barramento caso uma transferência errôneaseja detectada. Este método conta com decodificadores simples e uma boacapacidade de detecção, mas gera um grande número de transições no bar-ramento e, conseqüentemente, degrada o desempenho por causa do atrasoassociado. Em [Bertolozzi et al. 2002] mostrado que, com a condição de quea penalidade de atraso temporal possa ser tolerada, as estratégias de retrans-missão são mais efetivas do que as que tratam de correção de erros do pontode vista de consumo de energia, principalmente por causa da grande capaci-dade de detecção e menor complexidade de decodificação. A análise foi feitausando diversas variantes do código de Hamming em um modelo VHDL deum processador baseado no Sparc V8, e explorando as características de umbarramento AMBA. A análise considerou um nível pré-definido de tolerância aruídos em uma dissipação mínima de potência. Os resultados consideraramum barramento sem qualquer codificação e, também, com o tradicional códigode um bit de paridade. No caso de links de redes de meio compartilhado (tais como barramentos),a função de controle de acesso ao meio da camada de enlace é também crí-tica para a eficiência energética. Atualmente, esquemas de multiplexação pordivisão do tempo centralizado (centralized time-division multiplexing schemes)são muito adotados. Nestes esquemas, um simples circuito árbitro decide quetransmissor acessa o barramento em cada slot de tempo. Infelizmente, a pobreescalabilidade da arbitragem centralizada indica que esta abordagem é prova-velmente ineficiente energeticamente com o crescimento da rede. Esquemas de arbitragem distribuída assim como abordagens alternativasde multiplexação, tais como multiplexação por divisão do código (code divisionmultiplexing) tem sido extensivamente estudados, mas muito trabalho aindaprecisa ser feito.6.6.3. Camada de Rede A arquitetura da rede influencia fortemente a energia da comunicação. Sabe-se que os barramentos são a escolha mais comum, embora seja intuitivamenteclaro que barramentos não são eficientes do ponto de vista energético quandoa rede cresce. Na comunicação baseada em barramentos, o dado é sempredifundido (broadcasted) de um transmissor para todos os possíveis receptores,enquanto que as mensagens são destinadas a somente um receptor (ou umpequeno grupo de receptores). Contenção do barramento, com o overhead daarbitração, contribui para o aumento do consumo de energia. Estudos preliminares indicam que arquiteturas hierárquicas e heterogêneassão muito mais eficientes energeticamente que barramentos. Em seu trabalho,[Zhang et al. 1999] desenvolveram uma rede em malha generalizada e hierár-quica (hierarchical generalized mesh) onde nodos com alto requisito de largurade banda são agrupados e conectados por meio de uma malha generalizada 35
    • E. Moreno e R. Barretoprogramável consistindo de diversos canais de comunicação juntos com swit-ches programáveis. Os agrupamentos (clusters) são então conectados pormeio de uma malha generalizada de canais de comunicação mais longos eglobais. Tal arquitetura é heterogênea porque o custo de energia da comunica-ção intra-cluster é muito menor que a comunicação inter-cluster.6.6.4. Camada de Transporte Acima da camada de rede, a abstração da comunicação é uma conexãofim-a-fim. A camada de transporte está interessada em otimizar o uso de re-cursos de redes e prover a qualidade de serviço requerida. A energia pode servista como um recurso de rede ou um componente na métrica da qualidadede serviço. Um exemplo de questão de projeto da camada de transporte é aescolha entre protocolo com e sem conexão. A eficiência energética pode sergrandemente impactada por esta decisão. De fato, protocolos com conexão po-dem ser energeticamente ineficientes sob condições de tráfego intenso porqueeles tendem a incrementar o número de re-transmissões. Por outro lado, en-trega de dados fora de ordem (que pode ser o caso do protocolo sem conexão)implica em trabalho adicional no receptor, que por sua vez, causa um adicionalno consumo de energia. Outra tarefa da camada de transporte com grandes implicações de energiaé o controle de fluxo. Quando muitos transmissores competem por recursoslimitados, a rede torna-se congestionada, e o custo por bit transmitido incre-menta por causa do incremento na contenção e overhead da resolução da con-tenção. Controle de fluxo pode reduzir o efeito do congestionamento pela regu-lação da quantidade de dados que entram na rede sob o preço de alguma pe-nalidade de processamento (throughput). A redução de energia via o controlede fluxo tem sido estudado para redes sem fio [Walrand and Varaiya 2000].6.6.5. Decomposição do Sistema Usualmente, a pilha de protocolo de redes locais executam no processa-dor principal. Conseqüentemente, a interface de redes e o processador devemestar sempre ligados para que a rede local esteja ativa. Como quase todos osdados são transportados por meio do processador, desempenho e consumo deenergia pode ser um problema. A decomposição da pilha de protocolo da redee o fluxo de dados do sistema podem reduzir o consumo de energia. Primeiro,porque quando o sistema é construído a partir de componentes independen-tes que implementam diferentes camadas da pilha de comunicação, cópias dedados desnecessários são eliminados. Segundo, porque um hardware dedi-cado pode fazer o processamento de sinais básicos e podem mover os dadosdiretamente para o destino, mantendo cópias dos dados longe do barramento.Finalmente, um processador específico para a comunicação pode ser usadopara tratar a maioria dos aspectos de baixo nível da pilha de protocolo, sem so-brecarregar o processador principal, ao mesmo tempo em que possibilita queo mesmo possa dormir por maior período de tempo sem afetar o desempenhoe/ou funcionalidades.36
    • Técnicas para Diminuir o Consumo de Energia6.6.6. Taxas de Erros Redes sem fio têm uma taxa de erros muito maior do que redes com fio.Na presença de altas taxas de erros de pacotes, alguns protocolos de redes(tais como o TCP) pode reagir exageradamente confundindo com congestiona-mento. Isto leva a retornar a uma taxa de transferência muito baixa, o que incre-menta o consumo de energia porque leva a um tempo de transferência muitomaior. Qualquer protocolo que deixa um receptor móvel ocioso desnecessari-amente desperdiça energia. As limitações do TCP podem ser superadas porum controle de congestionamento mais adequado durante erros de pacotes.A colocação de dados em buffers das estações base podem ser usadas paraexecutar somente retransmissões locais que são causadas por erros na redesem fio.6.6.7. Modo Dormindo Os protocolos de rede podem ser modificados para suportar conectividadetotal enquanto estão em modo desligado (power down). O esquema store-and-forward para redes sem fio, tal como o IEEE 802.11, propôs o modo dormindo,que não somente possibilita que a interface de rede entre no modo dormindomas também possa executar retransmissões locais não envolvendo camadasde protocolo de rede superiores. Entretanto, tais esquemas têm a desvantagemde requerer uma estação base para atuar como uma interface de armazena-mento temporário em buffers.6.6.8. Protocolo de Acesso ao Meio Usualmente, as redes sem fio atuais não atentam para o consumo de ener-gia, mas principalmente focam na maximização do throughput. Em um sistemasem fio, o protocolo de acesso ao meio (MAC) pode ser adaptado e sintoni-zado (tuned) para melhorar a eficiência energética. O objetivo básico é que oprotocolo consiga minimizar as ações da interface de redes, ou seja, minimizaro tempo de transmissão assim como da recepção. Um exemplo de protocolo MAC com eficiência energética é o LPMAC (Low-Power Medium Access Protocol) [Mangione-Smith 1996], que usa um esquemaponto-a-ponto para reduzir o consumo de energia dentro de uma rede. Umavantagem desse esquema é o incremento efetivo da largura de banda disponí-vel na rede. Todo o controle do tráfego é estruturado a partir da definição de super-quadros, como mostrado na Figura 6.19, onde cada quadro tem uma certaquantidade de células de dados e células de controle de tráfego. Um terminalda rede local deve ser designado como o coordenador da rede (também conhe-cido como estação-base), e este terminal é responsável por adaptar e manteressa estrutura de super-quadros. Cada super-quadro inicia com uma escalade tráfego, que indica os terminais que tem tráfego. Tal escala é gerenciadapelo coordenador da rede. Os terminais que tenham sido escalonados para tráfegar são indicados emuma lista ordenada. Obviamente que os outros computadores que não estive- 37
    • E. Moreno e R. Barretorem nessa lista, portanto sem tráfego, podem rapidamente desligar os recepto-res e transmissores e, com isso, reduzir potência. Usando o escalonamento explícito de todas as transferências de dados, oLPMAC possibilita que um terminal “cochile” (e desligue o receptor) dentro deum quadro durante uma comunicação ativa, assim como, reativar o transmissorou receptor somente no tempo da escala. Um pequeno período de tempo dentro de cada super-quadro é reservadopara tráfego baseado em contenção, por exemplo, usando esquemas baseadosem CSMA/CD. Este período permite que novos terminais, que não estavamparticipando de qualquer comunicação, enviem uma mensagem de requisiçãoao coordenador da rede. Como nesse período não ocorre tráfego de dados,a mensagem pode ser pequena e, conseqüentemente, largura de banda podeser conservada. Algo que precisa ser considerado nesses esquemas é que o chaveamentoentre estados (desligado, ocioso, recebendo, transmitindo) consome tempo eenergia. Portanto, o número de transições de estados têm que ser minimizado. Escala do Comunicações ponto-a-ponto Período de Tráfego Contenção Figura 6.19. Estrutura do super-quadro LPMAC.6.7. Nível de Aplicação Os sistemas computacionais possuem diversas camadas de software queexecutam sobre o hardware. O software não consome energia por si só, masé a execução e armazenamento do software que requerem consumo de ener-gia do hardware. Neste caso, a execução do software envolve dissipação depotência na computação, armazenagem e comunicação. Entretanto, a energiagasta para armazenar programas é usualmente baixa (com a escolha de com-ponentes apropriados) e previsível em tempo de projeto. Contudo, a reduçãodo tamanho do programa armazenado é benéfico. Como já apresentado, istopode ser alcançado pelo compilador e compressão de código. No último caso,o código é comprimido antes de ser armazenado. Em tempo de execução, ocódigo é descomprimido o mais rápido possível [Benini and De Micheli 2002]. Os sistemas embarcados são dedicados a uma aplicação específica. Nestecaso, o objetivo é prover a qualidade do serviço requisitado dentro das restri-ções. Se for considerado, por exemplo, um terminal de video móvel e sem fio, aqualidade de serviço estará relacionada com a qualidade do vídeo, que implicaem níveis de desempenho específicos tanto de computação quanto de arma-zenamento e comunicação. As restrições podem estar na relação sinal/ruído38
    • Técnicas para Diminuir o Consumo de Energiado sinal de radio-freqüência e da energia disponível na bateria. Conseqüen-temente, a maior tarefa do software será prover alto desempenho por meioda orquestração do processamento de informações ao mesmo tempo em queprovê o melhor fluxo de informação. Além do mais, esta tarefa deve ser feitamantendo um consumo mínimo de energia. Esta seção descreverá formas para diminuir o consumo de energia a partirdas aplicações. É importante que no nível de aplicação o sistema seja mo-delado e seja aplicada alguma técnica de análise, seja analítica ou simulada.Interfaces de programação de aplicações (ou APIs) também são usadas paraque as aplicações gerenciem o consumo de energia de componentes de hard-ware e software, onde decisões podem ser tomadas, por exemplo, para permitirque aplicações desliguem certos componentes quando os mesmos não estãomais sendo usados. Uma das estratégias para atingir esse objetivo é o gerenciamento dinâmicode potência dos componentes (do inglês dynamic power management - DPM).O gerenciamento dinâmico de potência (DPM) é uma característica do ambi-ente de tempo de execução que dinamicamente reconfigura o ambiente paraprover o serviço requisitado e desempenho com o número mínimo de compo-nentes ativos ou um nível mínimo de atividades nesses componentes. DPMengloba um conjunto de técnicas que provê a computação com eficiência deenergia, desligando (ou reduzindo o desempenho) de componentes do sistemaquando estão ociosos (ou parcialmente inexplorados). DPM também é rea-lizado por meio da diminuição da freqüência do processador (algumas vezesaté parando o relógio) e/ou reduzindo a voltagem [Benini and De Micheli 2002]. A premissa para aplicabilidade do DPM é que o sistema (e seus compo-nentes) possuam cargas de trabalho não-uniformes. Uma segunda suposiçãoé que seja possível prever, com certo grau de precisão, a flutuação da carga detrabalho. É necessário, entretanto, que a observação de carga e previsão nãoconsuma energia significante. O projeto de um sistema com gerenciamentode potência engloba diversas tarefas, incluindo a seleção dos componentes aserem gerenciados, determinação da política de gerenciamento, e implementa-ção dessa política em um nível apropriado do software. A forma mais simplesde implementação de uma política é como um filter driver, ou seja, um pro-grama anexo ao driver de um componente específico. Nesse caso, o drivermonitora o tráfego de/para o componente e tem acesso ao estado do compo-nente. Contudo, o driver tem uma visão limitada de outros componentes e,conseqüentemente, tal implementação pode sofrer de localidade excessiva. Outra alternativa seria se a política de gerenciamento fosse implementadaem kernels e estivesse altamente acoplada ao gerenciamento de processos.De fato, o gerente de processos tem conhecimento das tarefas que estão emexecução e as tarefas que virão para serem executadas. Gerentes de pro-cessos também sabem que componentes (dispositivos) são necessários paracada tarefa. Assim, a implementação da política desfrutaria tanto da visão glo-bal quanto de uma perspectiva da operação do sistema em um futuro próximo. 39
    • E. Moreno e R. BarretoDeste modo, é possível “acordar” componentes de forma preditiva pelo conhe-cimento das tarefas a chegar e dos componentes necessários. O software pode ser projetado para melhorar a efetividade do gerencia-mento de potência. Gerenciamento de potência explora tempos ociosos decomponentes. Nesse caso, o escalonador pode sequencializar tarefas paraexecução com o objeitvo adicional de agrupar operações sobre componentes,de tal forma a atingir períodos mais longos de ociosidade. Algo que é muito importante enfatizar é que o projeto de sistema requer acoordenação de vários componentes de hardware e software. Dessa forma, aavaliação dos programas não podem ser feitos de forma isolada. Técnicas paratraçar o perfil (profile) podem e devem ser usadas para determinar a distribui-ção de freqüência dos valores da entrada para os programas e sub-programas.Tais informações são de grande importância para se obter software de aplica-ção que seja eficiente no consumo de energia dentro do ambiente específicoonde será executado. É também importante notar que, dado um perfil de umambiente especifico, o software pode ser re-estruturado tal que consumo baixode energia pode ser atingido ao preço de latência um pouco mais alta. Síntese de software é um termo usado com diferentes conotações. Nestecontexto, síntese de software é um procedimento automático que gera códigofonte que possa ser compilado. Síntese de software é freqüentemente neces-sário porque o consumo de energia de programas depende do estilo e cons-truções usadas. É importante lembrar que os programas são escritos comsomente funcionalidade e/ou desempenho em mente, e raramente consideraconsumo de energia. Além do mais, em aplicações embarcadas é uma prá-tica comum usar código legado, o que pode levar a uma grande penalidade doponto de vista de consumo de energia [Benini and De Micheli 2002]. A busca por software com baixo custo energético leva a uma sintonia fina(tuning) de programas de aplicação. A proposta é que os próprios programasde aplicação controlem os níveis de serviço e custo energético dos compo-nentes de hardware. O problema com este método é que ele compromete aportabilidade da aplicação e força o programador desta a adquirir informaçãodetalhada sobre o hardware que está se utilizando. Outra alternativa foi proposta por [Benini and De Micheli 2002]. Os progra-mas de aplicação contém chamadas ao sistema (system calls) que solicitam osoftware para controlar um componente de hardware, por exemplo, ligando oudesligando, ou requerendo uma voltagem ou freqüência específica. O pedidopode ser aceito ou recusado pelo sistema operacional, que tem acesso a in-formação da escala das tarefas e dos níveis operacionais dos componentes. Avantagem dessa abordagem é que o gerenciamento de potência é melhoradono sentido de que o pedido de serviço é mais detalhado pelas aplicações e,assim, em uma posição de tomar melhores decisões. É usual que políticas para gerenciamento do consumo de energia anali-zem dinamicamente o comportamento do sistema para determinar quando umcomponente de hardware deve modificar seu modo de operação. Contudo, a40
    • Técnicas para Diminuir o Consumo de Energiamaioria dos sistemas embarcados não podem arcar com os custos destas es-tratégias dinâmicas. Além disso, considerando que um sistema profundamenteembarcado é normalmente composto por uma única aplicação, o melhor lu-gar para determinar a estratégia de gerenciamento do consumo de energiaé na própria aplicação. Em [Hoeller Junior et al. 2006] é proposta uma API(Application Programming Interface) que possibilita ao programador da apli-cação a mudança do estado de operação de cada componente do sistema,tanto de software quanto de hardware, por meio da definição de uma inter-face para o gerenciamento do consumo de energia de componentes do sis-tema. A interface é composta por dois métodos: um para verificar o estadode operação atual do componente (power()) e outro para modificá-lo (power(estado_desejado)). O mecanismo por trás desta interface faz uso da or-ganização hierárquica de componentes de software e hardware para permitirque esta migração de estados seja feita de forma consistente. Componentesde hardware de baixa potência que são utilizados em sistemas embarcadosfrequentemente apresentam um grande conjunto de modos de operação. Per-mitir o uso de todos os modos de operação disponíveis, embora aumente aconfigurabilidade do sistema, pode aumentar a complexidade das aplicaçõesquando gerenciando o consumo de energia do sistema. Para resolver esteproblema, foi estabelecido um conjunto de definições de alto-nível para os es-tados de cada componente, tornando desnecessário que o programador daaplicação conheça detalhes acerca de cada um dos componentes de hard-ware que seu sistema possui. Quatro modos universais foram definidos: FULL,LIGHT, STANDBY and OFF. Contudo, estes modos podem ser extendidos pe-los componentes sempre que necessário.6.8. Conclusões Este capítulo apresentou que no projeto de sistemas embarcados moder-nos além de ser considerar o aspecto desempenho, é importante também pen-sar no consumo de energia e de potência. Em aplicações móveis, por exemplo,o uso de técnicas de consumo de energia podem aumentar a usabilidade deum dispositivo pois permite que a bateria conserve a carga por mais tempo, oque aumenta o tempo de funcionamento do dispositivo. Este capítulo apresentou e discutiu as principais técnicas existentes paradiminuir o consumo de energia em sistemas embarcados. A Tabela 6.5 apre-senta as principais técnicas, as quais podem ser classificadas como técnicasem hardware ou software. O capítulo apresentou uma visão um pouco dife-renciada, seguindo a linha de pensamento de [Graybill and Melhem 2002], quediscute as técnicas de gerenciamento de energia e potência sob a forma deníveis. Os níveis apresentados neste capítulo são: de circuito, de arquitetura,de sistema operacional, de compilador, de comunicação e de aplicação. Essa visão parece adequada uma vez que o consumo de energia (ou po-tência) está intimamente ligado à operação própria de cada sistema, ou decada circuito. Outro ponto interessante, é que várias das técnicas criadas para 41
    • E. Moreno e R. Barretodiminuir o consumo de energia em um determinado nível, acabam trazendobenefícios no consumo de energia em outros níveis. Pode acontecer tambémque o uso de técnicas para diminuir o consumo de energia em um determinadonível possa acarretar prejuízos sob o ponto de vista de desempenho do dispo-sitivo. Isso leva os projetistas a terem sempre em mente o forte compromissoque há entre desempenho e consumo de energia (ou potência). Tabela 6.5. Resumo das Técnicas mais Usadas para Di- minuir Consumo de Energia [Benini et al. 2005] Classificação Técnicas Software Aplicação Projeto de Algoritmos Máquina Virtual Escalonamento Compilador Hibernação de Recursos Sistema Operacional Gerenciamento de Memória Redução da Fidelidade Gerenciamento da Energia Execução Remota Hardware Arquitetura Clock, Memória, Otimizações de Interconexão, Otimização do Conjunto de Instruções, Otimização dos Acessos a memória, Otimização da arquitetura da memória Portas Mapeamento da tecnologia, Reestruturação das Portas Transistores Tamanho dos Transistores, Re-organização dos TransistoresReferências Bibliográficas[Aho et al. 2006] Aho, A., Lam, M., Sethi, R., and Ullman, J. (2006). Compilers: Principles, Techniques, and Tools. Addison Wesley, 2a. edição.[Allen and Kennedy 2001] Allen, R. and Kennedy, K. (2001). Optimizing Com- pilers for Modern Architectures: A Dependence-based Approach. Morgan Kaufmann.[Bartlett et al. 2000] Bartlett, J., Farkas, L., Hamburgen, W., Mann, T., Viredaz, M., Waldspurger, C., and Wallach, D. (2000). The itsy pocket computer. Te- chnical report, University Avenue Palo Alto, California.[Beech et al. 2000] Beech, R., Anderson, J., Pohm, A., and Daighton, J. (2000). Journal of Applied Physics, 87(8).[Benini and De Micheli 2002] Benini, L. and De Micheli, G. (2002). Energy- efficient system-level design. In Pedram, M. and Rabaey, J., editors, Power- Aware Design Methodologies, pages 473–516. Kluwer Academic Publishers.[Benini et al. 2005] Benini, L., Kremer, U., Probst, C., and Schelkens, P. (2005). Power-aware computing. Seminar on Power Aware Computing Systems,42
    • Técnicas para Diminuir o Consumo de Energia page http://drops.dagstuhl.de/opus/volltexte/2005.[Bertolozzi et al. 2002] Bertolozzi, D., Benini, L., and De Micheli, G. (2002). Low-power error-resilient encoding for on-chip data buses. Design, Automa- tion, and Test in Europe (DATE’02), pages 102–109.[Buyuktosunoglu et al. 2002] Buyuktosunoglu, A., Albonesi, D., Shuster, S., Brooks, D., Bose, P., and Cook, P. (2002). Power efficient issue queue de- sign. In Graybill, R. and Melhem, R., editors, Power Aware Computing, pages 35–58. Kluwer Academic Publishers.[Canal and Gonzalez 2000] Canal, R. and Gonzalez, A. (2000). A low com- plexity issue logic. In ACM International Conference on Supercomputing (ICS’00), pages 327–335.[Dasgupta 1977] Dasgupta, S. (1977). The design of some language cons- tructs for horizontal microprogramming. In Proceedings of the 4th annual symposium on Computer architecture (ISCA’77), pages 10–16. ACM Press.[Daughton et al. 2002] Daughton, J., Pohm, A., and Beech, R. (2002). Low power sandwich/spin tunneling memory device. In Graybill, R. and Melhem, R., editors, Power Aware Computing, pages 19–32. Kluwer.[Davidson and Jinturkar 1995] Davidson, J. W. and Jinturkar, S. (1995). Im- proving instruction-level parallelism by loop unrolling and dynamic memory disambiguation. In Proceedings of the 28th Annual IEEE/ACM International Symposium on Microarchitecture, pages 125–132.[Delaluz et al. 2000] Delaluz, V., Kandemir, M., Vijaykrishnan, N., and Irwin, M. (2000). Energy-oriented compiler optimizations for partitioned memory archi- tectures. Internactional Conference on Compilers, Architecture, and Synthe- sis of Embedded Systems.[Ellis 2003] Ellis, C. S. (2003). Power-aware memory management and milly watt project. In Duke University. USA.[Folegnani and Gonzalez 2000] Folegnani, D. and Gonzalez, A. (2000). Redu- cing the power consumption of the issue logic. International Workshop on Complexity-Effective Design.[Folegnani and Gonzalez 2001] Folegnani, D. and Gonzalez, A. (2001). Energy-effective issue logic. Proc. of the ISCA’2001, pages 230–239.[Graybill and Melhem 2002] Graybill, R. and Melhem, R. (2002). Power-aware computing. Kluwer Academic, Series in Computing Science, pages ISBN 0–306–46786–0.[Grunwald 2002] Grunwald, D. (2002). Micro-architecture design and control speculation for energy reduction. In Graybill, R. and Melhem, R., editors, Power Aware Computing, pages 59–78. Kluwer Academic Publishers.[Hauck 2008] Hauck, S. (2008). Reconfigurable Architecture and Applications. Elsevier. 43
    • E. Moreno e R. Barreto[Hoeller Junior et al. 2006] Hoeller Junior, A. S., Wanner, L. F., and Fröhlich, A. A. (2006). Gerenciamento do consumo de energia dirigido pela aplicação em sistemas profundamente embarcados. Proceedings of the 32th Latin- American Conference on Informatics, Santiago, Chile.[Hsu 2003] Hsu, C.-H. (2003). Compiler-Directed Dynamic Voltage and Fre- quency Scaling for CPU Power and Energy Reduction. PhD thesis, State University of New Jersey, Rutgers, USA.[Intel 2005] Intel (2005). Mobile Power Guidelines 2005. Intel Corporation. Dis- ponível em ftp://download.intel.com/design/mobile/intelpower.[Kaeli and Yew 2005] Kaeli, D. and Yew, P.-C. (2005). Speculative Execution in High Performance Computer Architectures. Chapman & Hall.[Kandemir et al. 2000] Kandemir, M., Vijaykrishnan, N., Irwin, M., and W.Ye (2000). Influence of compiler optimizations on system power. Proceedings of the 37th conference on design automation conference, pages 304–307.[Lee et al. 2003] Lee, C., Lee, J. K., Hwang, T., and Tsai, S.-C. (2003). Compi- ler optimization on vliw instruction scheduling for low power. ACM Transacti- ons on Design Automation of Electronic Systems, 8(2):252–268.[Lin and Costello 1993] Lin, S. and Costello, D. (1993). Error Control Coding: Fundamentals and Applications. Prentice Hall.[Lipasti 1997] Lipasti, M. (1997). Value Locality and Speculative Execution. PhD thesis, Carnegie Mellon University.[Mangione-Smith 1996] Mangione-Smith, W. (1996). A low power architecture for wireless multimedia systems: lessons learned from building a power hog. In Proceedings of the International Symposium on Low power Electronics and Design.[Marwedel et al. 2005] Marwedel, P., Wehmeyer, L., and Verma, M. (2005). Fast, energy-efficient and timing predictable memory accesses enabled by memory-architecture-aware compilation. Technical report.[Muchnick 1997] Muchnick, S. (1997). Advanced Compiler Design and Imple- mentation. Morgan Kaufmann.[Patterson and Hennessy 2007] Patterson, D. and Hennessy, J. (2007). Com- puter Architecture: A Quantitative Approach. Prentice Hall.[Phillips White Papers 2003] Phillips White Papers (2003). An introduction to very-long instruction word computer architecture. Phillips.[Ponce 2006] Ponce, R. C. (2006). Compiler Optimization for Low Power. Semi- nar Modern CPU Architectures: Aspects of Parallelism and Energy Efficiency, University of Sttutgart, Alemanha.[Qian et al. 2002] Qian, Y., Carr, S., and Sweany, P. (2002). Loop fusion for clustered vliw architectures. In LCTES/SCOPES ’02: Proceedings of the joint conference on Languages, compilers and tools for embedded systems,44
    • Técnicas para Diminuir o Consumo de Energia pages 112–119, New York, NY, USA. ACM.[Rangel 2000] Rangel, J. L. (2000). Compiladores - Otimização de Código. Notas de Aula. Depto de Informática. PUC-Rio.[Shin and Choi 1997] Shin, D. and Choi, K. (1997). Low power high level syn- tesis by increasing data correlation. In Proceedings of the 1997 international symposium on Low power electronics and design, pages 62–67.[Shrivastava et al. 2002] Shrivastava, A., Biswas, P., Halambi, A., Dutt, N., and Nicolau, A. (2002). A design space exploration framework for reduced bit- width instruction set architecture (risa) design. In International Symposium on System Synthesis (ISSS’02).[Shrivastava et al. 2004] Shrivastava, A., Biswas, P., Halambi, A., and Nicolau, A. (2004). Energy efficient code generation using risa. In Asia and South Pacific Design Automation Conference (ASPDAC’04).[Silva et al. 2007] Silva, J. F., Wagner, F. R., and Soares, S. N. (2007). Ex- plorando o espaço de projeto com o objetivo de redução do consumo de energia usando reduced bit-width instruction set architecture (risa). In Anais Workshop de Sistemas Computacionais de Alto Desempenho (WSCAD- 2007), Gramado, RS, Brasil.[Song and Li 1999] Song, Y. and Li, Z. (1999). New tiling techniques to improve cache temporal locality. In SIGPLAN Conference on Programming Language Design and Implementation, pages 215–228.[Srikantam and Martinez 2002] Srikantam, V. and Martinez, M. (2002). Com- parative analysis of flip-flops and application of data-gating in dynamic flip- flops for high speed and low active and low leakage power dissipation. In Graybill, R. and Melhem, R., editors, Power Aware Computing, pages 3–18. Kluwer Academic Publishers.[Stallings 2005] Stallings, W. (2005). Organização e Arquitetura de Computa- dores. Prentice Hall.[Stan and Burleson 1995] Stan, M. and Burleson, W. (1995). Bus-invert coding for low power i/o. IEEE Transactions on Very Large Scale Integration (VLSI) Systems, 3(1).[Su et al. 1994] Su, C.-L., Tsui, C.-Y., and Despain, A. M. (1994). Low power architecture design and compilation techniques for high-performance proces- sors. In IEEE COMCON, pages 489–498.[Tanenbaum 2003] Tanenbaum, A. (2003). Redes de Computadores. Campus. Tradução da 4a. Edição Americana.[Tiwari and Lee 2005] Tiwari, V. and Lee, M. T.-C. (2005). Power analysis of a 32-bit embedded microcontroller. VLSI Design Journal.[Tiwari et al. 1994] Tiwari, V., Malik, S., and Wolfe, A. (1994). Power analysis of embedded software: a first step towards software power minimization. IEEE 45
    • E. Moreno e R. Barreto Transactions on Very Large Scale Integration (VLSI) Systems, 2(4):437–445.[Tiwari et al. 1996] Tiwari, V., Malk, S., Wolfe, A., and Lee, T.-C. (1996). Ins- truction level power analysis and optimization of software. Journal of VLSI Signal Processing, 13(2):1–18.[Walrand and Varaiya 2000] Walrand, J. and Varaiya, P. (2000). High- Performance Communication networks. Morgan-Kaufman.[Wilkes 1986] Wilkes, M. (1986). The genesis of microprogramming. IEEE Annals of the History of Computing, 8(2):115–126.[Woolf 2007] Woolf, M. (2007). Faster Construction Projects with CPM Sche- duling. McGraw Hill.[Yang et al. 2004] Yang, X. C., Dong, Y. J., and Yi, H. (2004). Compiler-directed energy-aware prefetching optimization for embedded applications. Lecture Notes in Computer Science, Track: Embedded Software and Hardware.[Zhang et al. 2000] Zhang, H., George, V., and Rabaey, J. (2000). Low-swing on-chip signaling techniques: Effectiveness and robustness. IEEE Transacti- ons on Very Large-Scale Integration Systems, 8(3):264–272.[Zhang et al. 1999] Zhang, H., Wan, M., George, V., and Rabaey, J. (1999). Interconnect architecture exploration for low-energy configrable single-chip dsps. IEEE Computer Society Workshop on VLSI, pages 2–8.46