Transmeta Efficeon

Rogério Alves Cardoso

Institute of Computing UNICAMP

Transmeta Efficeon 1 Tecnologia da Transmeta

Baixo + CMS = Consumo

VLIW Hardware Code Morphing Software

Compatibilidade ● ● Very Long Instruction Word Provê compatibilidade Processor ●Traduz instruções x86 para ●Simples e Rápido (?) operações VLIW equivalentes.

● Poucos Transistores ●Aprende e Melhora com o Bom tempo Desempenho

Transmeta Efficeon 2 Hierarquia Processador/Software

Aplicações x86

Software x86 Sistemas Operacionais x86 (Linux, Windows, etc.)

Hardware BIOS x86 Drivers

Code Morphing Software Efficeon TM8300/8600 Processador

VLIW Hardware

Transmeta Efficeon 3 Características do Efficeon

● VLIW: Até 8 operações e modificadores; ● Unidades Funcionais: ALUs, memória, FP/media, branch; ● Registradores: 64 GPRs, 64 FPRs, 4 dedicados ao conjunto x86, Shadow Registers; ● Poucos interlocks: CMS evita os hazards; ● Semântica compatível com x86: modos de endereçamento, tipos de dados, condition codes, partial word operations.

Transmeta Efficeon 4 Outras Características

● Suporte a instruções multimídia (SSE, SSE2 e MMX);

● Interface Northbridge;

● Interface gráfica AGP;

● Tecnologia HyperTransportTM;

● Tecnologia LongRun2;

● Cache de Dados (L1 64KB e L2 512KB/1MB*) e de Instruções (L1 64KB e L2 512KB/1MB*) separadas.

Transmeta Efficeon 5 Diagrama de Blocos do Efficeon

Transmeta Efficeon 6 Diagrama de Blocos do Efficeon

Transmeta Efficeon 7 VLIW

● O Efficeon é um processador VLIW; ● Uma instrução VLIW é chamada de molécula

● Cada molécula pode conter até 8 instruções chamadas de átomos (RISC-like operations). ● Uma molécula pode ter uma largura de até 256 bits.

Transmeta Efficeon 8 Características VLIW

● O Efficeon é um processador VLIW; ● Uma instrução VLIW é chamada de molécula

● Cada molécula pode conter até 8 instruções chamadas de átomos. ● Uma molécula pode ter uma largura de até 256 bits. ● 2x mais que o seu antecessor o Crusoe. Mais ILP?

Transmeta Efficeon 9 Mais ILP?

Transmeta Efficeon 10 Diagrama VLIW

O Efficeon é capaz de emitir de uma a oito instruções (átomos) por ciclo de clock 256 bits

átomo 1 átomo 2 átomo 3 átomo 4 átomo 5 átomo 6 átomo 7 átomo 8

load/store ou load/store ou ALU-1 Inteiro ALU-2 Inteiro Alias Controle 32 bits add 32 bits add

FP/MMX/SSE/ FP/MMX/SSE/ Branch Exec 1 Exec 2 SSE2 SSE2

Transmeta Efficeon 11 Diagrama VLIW

O CMS é responsável por converter uma instrução x86 em uma instrução VLIW. A microarquitetura é transparente para o programador 256 bits

átomo 1 átomo 2 átomo 3 átomo 4 átomo 5 átomo 6 átomo 7 átomo 8

load/store ou load/store ou ALU-1 Inteiro ALU-2 Inteiro Alias Controle 32 bits add 32 bits add

FP/MMX/SSE/ FP/MMX/SSE/ Branch Exec 1 Exec 2 SSE2 SSE2

Transmeta Efficeon 12 Pipeline VLIW

Transmeta Efficeon 13 Pipeline VLIW

Transmeta Efficeon 14 CMS (Code Morphing Software)

● O CMS provê uma camada com uma implementação completa e compatível da arquitetura x86 em um processador VLIW:

● Todas as instruções alvos (incluindo CMS ● memory mapped I/O;

● Todos os registradores da arquitetura; SO Apps

● Comportamento de exceções compatíveis.

● Não assume qualquer SO ou assistência BIOS ● Vê somente código (instruções e páginas)

Transmeta Efficeon 15 CMS (Code Morphing Software)

Transmeta Efficeon 16 CMS (Code Morphing Software)

Transmeta Efficeon 17 CMS (Code Morphing Software)

Transmeta Efficeon 18 CMS (Code Morphing Software)

Transmeta Efficeon 19 CMS (Code Morphing Software)

● Efetua a tradução dinâmica de um binário x86 em código nativo VLIW via software em tempo de execução

● As traduções são armazenadas em uma “Translation Cache” evitando o overhead de repetidas execuções;

● Completamente transparente para o sistema operacional;

● O CMS utiliza um esquema de interpretação e tradução dinâmica de binários para emular o código x86;

Transmeta Efficeon 20 CMS Interpretação e Tradução

Transmeta Efficeon 21 CMS Interpretação e Tradução

Transmeta Efficeon 22 CMS Interpretação e Tradução

Transmeta Efficeon 23 CMS Interpretação e Tradução

Transmeta Efficeon 24 CMS Interpretação e Tradução

Transmeta Efficeon 25 CMS Construção de Regiões

● No Efficeon as regiões grandes são construídas entre o commit e o rollback do bloco; ● Essas regiões ou blocos podem conter até 100 instruções x86; ● É feita bastante especulação na construção da região de forma a preencher os átomos do VLIW com o máximo de instruções possíveis.

Transmeta Efficeon 26 CMS (Code Morphing Software)

● Moléculas explicitamente codificam o paralelismo em nível de instrução, permitindo a execução em um simples VLIW

● O Hardware não precisa realizar reordenações complexas de instruções

● Atualizações no processador são simplificadas

● Não existe necessidade de recompilar o programa

● O CMS pode ser atualizado de forma independente em uma flash ROM

Transmeta Efficeon 27 CMS (Code Morphing Software)

● Um frontend decodifica uma instrução x86 em uma simples sequencia de átomos (RISC-like ops)

● Um otimizador aplica otimizações bem conhecidas

● incluindo eliminação de átomos desnecessários ● O scheduller reordena os átomos e os grupos em moléculas

Transmeta Efficeon 28 CMS (Code Morphing Software)

Transmeta Efficeon 29 Otimização de código

● O otimizador examina toda a tradução

● O CMS instrumenta o código para ajudar a determinar padrões de uso (# de vezes executado)

● O nível de otimização aplicado é escolhido baseado em heurísticas

● Quanto mais a tradução é executada mais ela é otimizada

● Se a inspeção indica que as otimizações são muito agressivas, algumas otimizações são removidas

Transmeta Efficeon 30 Otimização de código

● Aggressive scheduling of instruction level parallelism for 8-wide VLIW

● Out-of-Order Execution on In-Order Hardware

● Critical path height reduction

● Common sub-expression elimination

● Software register renaming to avoid false dependencies

● Fusing operations

● Dead code elimination

● Removal of conditional branches

● Adaptive re-translation during program execution

● Loop unrolling and optimization

● Remove Exit Branches

● Code motion across back-edge

● Loop invariant code motion

● Strength reduction

Transmeta Efficeon 31 Suporte em hardware

● Atribuição explicita de condition codes

● O Efficeon utiliza registradores específicos para emular o conjunto de condition codes do processador (o sufixo .c é utilizado para indicar que o condition code deve ser setado)

● Todos os registradores que mantém estados x86 são “shadowed”

● Uma operação de commit copia o estado ativo para os shadow registers

● Gated store buffers para escritas em memória

● Alias hardware para permitir ordenação de instruções (load after stores)

● Memory Mapped I/O

● Translated bit em páginas para detectar self-modifyng code

● Predição de saltos indiretos

Transmeta Efficeon 32 Shadow Registers

● 64 registradores de inteiros de 32 bits (48 shadow register), 64 registradores de 80 bits de ponto flutuante(48 shadow registers) e 4 registradores de predicado (4 shadow registers)

● Se uma execução chega ao final de um bloco de tradução é feito um commit:

● Copia de todos os working registers para os shadow registers

● Se qualquer condição excepcional ocorrer dentro do bloco de tradução é feito um rollback:

● Copia de todos os registradores shadow de volta para os working registers

Transmeta Efficeon 33 Suporte para commit/rollback

● Um store buffer/write queue de 14 entradas ● Uma victim cache com 32 entradas ● Suporte a store especulativo na cache de dados ● 4 Write combiners de 32 bits

Transmeta Efficeon 34 CMS Schedulling

● O schedulling é feito de forma agressiva; ● As instruções são executadas fora de ordem em respeito ao programa original; ● É necessário fazer o rollback caso haja uma exceção;

Transmeta Efficeon 35 Tratamento de Exceções

● O x86 possui exceções precisas; ● O CMS assume que nenhuma exceção irá ocorrer (especulação) ● Uma exceção causa um rollback até o ponto de commit anterior e o código passa a ser interpretado; ● Uma instrução que causa frequentemente uma exceção é isolada e o resto do código é retraduzido (tradução adaptativa).

Transmeta Efficeon 36 Tratamento de Exceções

Transmeta Efficeon 37 Interrupções

● Interrupções causam um rollback para um estado consistente (alvo); ● O código traduzido não precisa se preocupar com estados intermediários inconsistentes com um estado x86 entre as instruções; ● Interrupções não ativam a retradução adaptativa.

Transmeta Efficeon 38 Movendo loads na frente dos stores

● Load → load-and-protect

● Efetua o load e guarda o endereço e o tamanho do dado ● Store → store-under-alias-mask

● Checa por uma região protegida ● Levanta uma exceção

Transmeta Efficeon 39 Memory Mapped I/O

● Transações de I/O devem ser realizadas na ordem do programa original x86;

● Memory mapped I/O não podem ser distinguidas, em tempo de transação, de operações normais de memória;

● Especulação: As operações são reordenadas de forma agressiva;

● Solução:

● Os átomos load e store especificam quando eles foram reordenados em respeito a ordem original do programa.

● Se um átomo especulativo acessa uma página na memória mapeada para o espaço de I/O é lançada uma exceção.

Transmeta Efficeon 40 Alias

● Especulação de dados é um outro problema

● O CMS assume que operações de memória não necessitam de alias. Load ou Stores são movidos antes de um store que pode receber um alias (especulação)

● Operações Especuladas setam um registrador de alias a menos que se prove que não há necessidade. O store potencialmente alias checa esses registradores.

● Retradução: Ordenar o código de forma mais conservadora

Transmeta Efficeon 41 Alias

Transmeta Efficeon 42 Alias

Transmeta Efficeon 43 Self Modifyng Code

● Problema Original: Se um código x86 é modificado, todas as traduções devem ser invalidadas ou modificadas;

● O CMS assume que não há SMC (especulação)

● Solução simples: proteger as páginas de código x86 de forma que uma tradução seja invalidada se uma falta ocorrer;

● Problema?

Transmeta Efficeon 44 Self Modifyng Code

● Ineficiente para self-modifyng code: a granularidade é muito grande; ● DMA é visto como self-modifyng code;

● Dados e código em uma mesma página;

● Custo:

● Tratar a falta, invalidar as traduções... ● Gerar novas traduções do código modificado

Transmeta Efficeon 45 SMC Fine-Grain Protection

● Suporte em hardware para proteção de sub página. Somente são necessárias algumas páginas por vez que são mantidas em uma pequena cache;

● Speedup

Transmeta Efficeon 46 SMC Revalidar Tradução

● Subproblema: Código e dado armazenado na mesma região;

● Tradução adaptativa:

● Instalar um prologue para checar o código antes da tradução;

● Retraduzir para capturar código x86;

● Fine-grain fault habilita o prologue e desabilita as faltas;

● Prologue faz a checagem e reabilita as faltas;

● Tradeoff: Checar o código é muito caro porque ele roda em sequencia com a tradução, mas eficiente se as traduções são executadas muitas vezes entre escritas (?);

Transmeta Efficeon 47 Stylized SMC

● Subproblema: True self-modifyng code geralmente apenas substitui o campo imediato da instrução, por exemplo: ajustar parte de um array referenciado; label: lea %eax = 16(%esi)

● Tradução adaptativa:

● O código traduzido obtém os valores do espaço de código do x86 em tempo de execução: ld %temp = [label+2] add %eax = %esi + %temp

● Deve ser usado junto com self-checking or self-revalidation para ver se outros campos além do imediato ou do offset não foram alterados;

Transmeta Efficeon 48 SMC Translation Groups

● Subproblema: True self-modifyng code que repetidamente escreve e executa um pequeno número de versões de código x86 rescrito (drivers BLT do Win/9x)

● Retradução adaptativa:

● Manter múltiplas traduções da mesma região de código; ● Se uma tradução falha, tentar a outra tradução.

Transmeta Efficeon 49 Indirect Branchs

pushf ; save state 1. push eax ; save scratch registers Save state push ebx 2. Save scratch registers mov eax, DWORD PTR [eax] ; move target to eax mov ebx,eax ; save target 3. Save target address and eax,TABLE_MASK 4. lea eax, DWORD PTR [eax*8+IBTC_TABLE_START] Compare tag cmp ebx,DWORD PTR [eax] ; compare tag (app. 5. If miss, return to translator address) jne L2 ; jump if miss Hit: L1: ; IBTC hit 11. Load code cache address mov eax,DWORD PTR [eax+4] ; load code cache address 12. Restore context mov [&bta_loc], eax ; store in memory pop ebx ; restore context 13. Jump to target address in code pop eax cache popf jmp [bta_loc] ; jump via memory L2: ; IBTC miss, return to translator pop ebx ; restore minimal context pop eax popf pusha ; save full context pushf push DWORD PTR [eax] ; pass target PC push fragment_address ; pass from fragment address push reenter_code_cache ; tail call optimization jmp buildFrag ; call buildFrag(targPC,fragAddr) Table: A software-only translation of indirect branch

Transmeta Efficeon 50 Indirect Branchs

● Tradutores em nível de sistema

● Alvo de saltos pode mudar por uma atualização na tabela de páginas ou seguimento ● A permissão da página também pode mudar ● Traduções compartilhadas entre processos também é possível;

● Tradução de saltos indiretos são muito caras em sistemas de tradução de binários tradicionais.

Transmeta Efficeon 51 Predição de Indirect Branchs

● Processadores tradicionais utilizam uma BTB ● Insuficiente: tradução para saltos condicionais diretos;

● Saltos condicionais em uma tradução de saltos incondicionais ● Múltiplos saltos condicionais em uma tradução ● Dependência de dados em um salto indireto ● Esses saltos são difíceis de prever em hardware

Transmeta Efficeon 52 Exemplo x86 Retorno de Chamadas

Consideremos o retorno de chamadas de função como um caso a parte:

foo: call bar foo+2 … bazfoo+2foo+8 call bar baz foo+8 …

bar: … Return Address Stack ret

Ÿ Hardware convencional tem uma predição de retornos quase perfeita – Front-end tipicamente implementa um return address stack

Transmeta Efficeon 53 Exemplo x86

foo: foo’: call bar mov [esp], foo+2 foo+2 … sub esp, esp, 4 call bar br bar’ foo+8 … foo+2’: … bar: mov [esp], foo+8 … sub esp, esp, 4 ret br bar’

foo+8’: …

bar’: Um retorno de uma chamada é … implementado geralmente add esp, esp, 4 utilizando-se saltos indiretos br lookup_ibtc(esp)

Transmeta Efficeon 54 Flook Stack

x86 EIP x86 context x86 CS limit translated target

Tag Target

Ÿ 16-entry flook stack é explicitamente gerenciada pelo CMS – Emula call/return em uma tradução – Inclui uma validação da tag antes da consumação

Transmeta Efficeon 55 Flook Stack

foo’: mov rtemp, mov flook_x86_eip, rtemp st rtemp, [esp-4] sub esp, esp, 4 precall br x86 EIP foo+2’: … bar‘: … ld rtemp, [esp] mov flook_x86_eip, rtemp add esp, esp, 4 ret

Transmeta Efficeon 56 Flook Stack

● A instrução especial precall empurra na pilha os quatro valores (Instruction Pointer EIP, Contexto da Execução, e o limite do Code Segment CS);

● O CS não muda normalmente, uma chamada de função geralmente apenas envolve atualizar o endereço de retorno;

● A instrução ret compara o endereço de retorno, contexto e o CS com a tag na entrada do topo da pilha se forem iguais a execução continua até o alvo traduzido. Caso contrário uma trap ocorre e o CMS é chamado para tratar o caso

Transmeta Efficeon 57 Flook Stack

● A instrução especial precall empurra na pilha os quatro valores (Instruction Pointer EIP, Contexto da Execução, e o limite do Code Segment CS);

● O CS não muda normalmente, uma chamada de função geralmente apenas envolve atualizar o endereço de retorno;

● A instrução ret compara o endereço de retorno, contexto e o CS com a tag na entrada do topo da pilha se forem iguais a execução continua até o alvo traduzido. Caso contrário uma trap ocorre e o CMS é chamado para tratar o caso

Transmeta Efficeon 58 Emulação de Saltos indiretos

● Saltos indiretos que não são retornos de chamadas de função são emulados pelo CMS

● Utiliza registradores arquiteturais adicionais o que reduz o tamanho da tradução

● Melhoria da predição de saltos através do co-design:

● O software insere o endereço alvo em um registrador “link”

● Faz outras computações

● O front-end do pipeline obtem instruções do salto previsto

● O salto real acontece depois via uma instrução especial brl

Transmeta Efficeon 59 Saltos indiretos Nativos

● Translation dispatch e Interpreter

● Ambos utilizam frequentemente saltos indiretos

● Predição de salto fraca

● Software pode ajudar na predição

● Link Pipe

● Empurra o endereço do alvo na estrutura de hardware

● Faça outras computações

● O frontend do pipeline pode obter o alvo do salto em um tempo justo

● Salta para o topo do link pipe usando uma instrução brip

● Subrotinas Nativas

● Link Stack

Transmeta Efficeon 60 SMC Self Checking Translation

● Subproblema: Dados armazenados na região do código são frequentes, então o overhead do prologue é significante

● Tradução adaptativa:

● Integrar o checking code com a tradução

● Deve sempre ser checado após qualquer store que possa modificar a tradução;

● Minimizar o custo fazendo traduções menores primeiro;

● Desabilitar a proteção (fine-grain) para self-checking;

● Tradeoff: Melhor do que faltas, mas ainda sim é caro:

● Tamanho do código pode crescer 83%

● Tamanho do caminho pode crescer 54%

Transmeta Efficeon 61 LongRun

● O LongRun era capaz de ajustar a voltagem e a frequência do processador sem suspensão do processador; ● O ajuste era feito dinamicamente de acordo com a carga de trabalho; ● Transparente para o só, Power management controller e para o usuário; ● Isso permitia uma redução de até 30% no consumo de energia;

Transmeta Efficeon 62 LongRun2

● Um dos grandes desafios da industria hoje em dia é em relação a eficiência energética; ● Leakage é um grande problema

● Leakage pode ser um dos limitadores fundamentais da “Lei de Moore” ● Na segunda versão do LongRun (LongRun2) foi adicionado um gerenciador de Leakage por software para abordar esse problema;

Transmeta Efficeon 63 Uma revisão sobre Leakage

● Os transistores são acionados quando a voltagem de entrada em uma dos gates ultrapassa um certo valor (“Threshold Voltage” ou Vt).

● Normalmente Vt é em torno de 1/2 à 1/5 da voltagem suprida.

● Transistores com baixo Vt fazem o switch muito mais rápido mas tem mais leakage.

● Se o Vt é muito baixo, há desperdício energético.

● Transistores com Vt maior tem menos leakage, mas são mais lentos;

● Se o Vt é muito alto, perdesse frequência MHz.

Transmeta Efficeon 64 LongRun2 Continuação

● O LongRun2 permite ajustar dinamicamente o Vt para uma melhor eficiência; ● Flutuações indesejáveis podem ser eliminadas;

● A muitas demonstrações mas pouco detalhes sobre essa tecnologia ou como isso é feito.

Transmeta Efficeon 65