1 Suporte em software para o conjunto de instruções SPARC16 Bruno Cardoso Lopes [email protected] Laboratório de Sistemas de Computação Instituto de Computação UNICAMP Suporte em software para o conjunto de instruções SPARC16 1 Agenda 2 • Introdução • Trabalhos Relacionados –Métodos de compressão de código –Conjuntos de instruções de 16-bits • Descrição da proposta – Objetivos – Etapas – Desafios • Cronograma Suporte em software para o conjunto de instruções SPARC16 2 Introdução 3 • SOCs estão se tornando complexos • Techos de código maiores • RISC = baixa densidade de código • Alta necessidade de memória • Memória recurso raro Suporte em software para o conjunto de instruções SPARC16 3 Trabalhos relacionados 4 • Duas soluções para memória: –Compressão de código. –Criação de conjuntos de instruções de 16 bits a partir dos modelos RISC de 32 bits (MIPS16 e Thumb) • Razão de compressão: Suporte em software para o conjunto de instruções SPARC16 4 Conjunto de instruções de 16-bits 5 • DLX –Criada por Hennessy e Patterson –Primeira a ter uma extensão 16-bits –Razão de compressão: 62% –5% de perda de desempenho Suporte em software para o conjunto de instruções SPARC16 5 Conjunto de instruções de 16-bits 6 • Thumb –Extensão 16-bits do ARM –Troca de modo (BX) –8 registradores, 1 stack pointer e 1 link register –Thumb 2, presença de instruções privilegiadas. –Razão de compressão: 70% –Ganho de 30% em desempenho (barramento de 16 bits), 10% de perda caso contrário. Suporte em software para o conjunto de instruções SPARC16 6 Conjunto de instruções de 16-bits 7 • Thumb: Suporte em software para o conjunto de instruções SPARC16 7 Conjunto de instruções de 16-bits 8 • Mips16 –Versão 16 bits do MIPS –Troca de modo (JALX) –Redução do tamanho de imediatos (16 para 5) –8 Registradores visíveis e instruções especiais para outros registradores (MOVR32) –Deslocamento de offsets em Loads/Stores –Endereçamento relativo a SP e PC –Instrução EXTEND. –Razão de compressão: 60% Suporte em software para o conjunto de instruções SPARC16 8 Conjunto de instruções de 16-bits 9 • Mips16 Suporte em software para o conjunto de instruções SPARC16 9 Compressão de Código 10 • Diversos métodos: –Técnicas em software –Técnicas em hardware • Software –Fraser e Proebsting: Representação compacta do código original e interpretador gerado. –Liao: Baseado em dicionário, bloco de instruções mais executados transformados em procedimentos, substituidos por chamadas ao dicionário. –Desvantagem: Desempenho inferior ao original. Suporte em software para o conjunto de instruções SPARC16 10 Compressão de Código 11 • Hardware –Compressão em software e descompressão no hardware. –PDC (Processor-Descompressor-Cache) –CDM (Cache-Descompressor-Memory) Suporte em software para o conjunto de instruções SPARC16 11 Compressão de Código 12 • Hardware –PDC possui melhores resultados em desempenho e consumo de memória –Wolfe e Chanin: Huffman e CDM –Lekatsas: Dois métodos • Instruções classificadas em 4 classes, cada uma recebe um método de compressão. PDC com um pipeline para cada classe. Suporte em software para o conjunto de instruções SPARC16 12 Compressão de Código 13 • Hardware –Lekatsas: • PDC com método de dicionário: contagem estática do número de instruções. 25% de aumento de desempenho, 35% na redução do código. –Benini: Método de dicionário, perfil dinâmico de execução das instruções. Razão de compressão de 72% e 28% no ganho de desempenho. Suporte em software para o conjunto de instruções SPARC16 13 Compressão de Código 14 • Hardware –IC-UNICAMP: Método baseado em dicionário • Mistura entre elementros estáticos e dinâmicos • PDC • I-Cache com presença de bursting • Descompressão simultânea aos bursts • Razão de descompressão: 72% a 88% • Ganho de desempenho: até 45% • Redução do consumo de potência: até 35% Suporte em software para o conjunto de instruções SPARC16 14 Compressor 15 • Hardware –IC-UNICAMP: Suporte em software para o conjunto de instruções SPARC16 15 Descrição da Proposta 16 • Objetivos: –Criar uma representação de 16 bits para as instruções do processador SPARCv8. –Implementação do suporte em software para emissão de código. • Alterações na etapa de geração de código de um compilador com suporte a arquitetura SPARC. Suporte em software para o conjunto de instruções SPARC16 16 Escolha do SPARCv8 17 • Processador com especificação aberta. • Casos de sucesso com outros dois processadores RISC (Mips e ARM). • Mercado (Leon 3, Agência Espacial Europeia). • Grande potencial de compressão. Suporte em software para o conjunto de instruções SPARC16 17 Escolha do SPARCv8 18 Suporte em software para o conjunto de instruções SPARC16 18 Escolha do SPARCv8 19 • Mesmo em arquiteturas RISC, nem todas instruções são utilizadas pelos compiladores. • Análise das instruções do MIPS para o SPEC2006. • Como nem todas são utilizadas, é mais fácil realizar o corte na instruções. Suporte em software para o conjunto de instruções SPARC16 19 Escolha do SPARCv8 20 Suporte em software para o conjunto de instruções SPARC16 20 Etapas 21 • Escolha do subconjunto SPARCv8. • Análise de instruções privilegiadas –Impacto da sua utilizaçao em rotinas que geram gargalo em um sistemas operacional. • Codificação do SPARC16 –Facilitando o processo de decodificação em hardware. • Modelo que permita coexistência e troca entre os modos SPARC16 e SPARCv8 –Inclusive entre procedimentos diferentes. Suporte em software para o conjunto de instruções SPARC16 21 Etapas 22 • Escolha de um compilador • Implementação do suporte básico a 16 bits neste compilador. • Implementação de otimizações específicas para o SPARC16. Suporte em software para o conjunto de instruções SPARC16 22 Subconjunto SPARC16 23 • Análise estatística da ocorrência de instruções em benchmarks consagrados: MediaBench, MiBench e SPEC2006. • Benchmarks compilados com pelo menos 2 compiladores diferentes. • Contagem estática e dinâmica. Suporte em software para o conjunto de instruções SPARC16 23 Instruções privilegiadas 24 • Análise diferenciada de instruções privilegiadas. –Mapeamento de I/O em memória. –Campos especias para ASI (Address Space Identifier) –Traps em software. Suporte em software para o conjunto de instruções SPARC16 24 Codificação do conjunto 25 • Dados provenientes da análise –Tamanho médio de imediatos –Registradores por bloco básico • Determinar: –Quantidade de registradores visíveis –Tamanho da janela de registradores –Quantidade de operandos Suporte em software para o conjunto de instruções SPARC16 25 Compilador 26 • Ponto crítico do projeto. • Escolha do compilador adequado –Suporte a SPARC –Código Aberto (LLVM, GCC). • Modificação da etapa de geração de código –Alteração no backend SPARC. Suporte em software para o conjunto de instruções SPARC16 26 Compilador 27 • Teste da geração de código: –SAV (Sparc Application Verifier) benchmark, fornecido pela SPARC International • Implementação de algumas otimizações: –Preenchimento de delay slots –Otimização de load/store –Utilização de small sections Suporte em software para o conjunto de instruções SPARC16 27 Compilador 28 • LLVM (Low Level Virtual Machine) –Código aberto –Otimizações agressivas (LTO) –Back-end SPARC –Projeto moderno, baixa curva de aprendizado –Facil integração de novos recursos e otimizações –Back-ends pouco estáveis Suporte em software para o conjunto de instruções SPARC16 28 Compilador 29 • GCC (Gnu Compiler Collection) –Código aberto –Possui cerca de 50 back-ends estáveis –Otimizações conservativas –Alta curva de aprendizado (presença de código legado) –A implementação e teste de novos recursos são demorados. Suporte em software para o conjunto de instruções SPARC16 29 Compilador 30 • Entendimento dos seguintes componentes: –Estruturas de dados da representação intermediária –Algoritmos de geração de código independente de arquitetura. –Estruturas de dados e callbacks genéricos customizados em cada arquitetura. –Back-end SPARC Suporte em software para o conjunto de instruções SPARC16 30 Desafios 31 • SPARCv8 possui janela de registradores –Redução do tamanho da janela • Densidade de código do SPARCv8 é maior que o das outras arquiteturas –Dificuldade na decisão das instruções. Suporte em software para o conjunto de instruções SPARC16 31 Cronograma 32 Suporte em software para o conjunto de instruções SPARC16 32 Cronograma 33 Suporte em software para o conjunto de instruções SPARC16 33