Organização e Arquitetura de Computadores. Aula 1 - Introdução. 2002 Juliana F. Camapum Wanderley. http://www.cic.unb.br/docentes/juliana/cursos/oac

Documentos relacionados
Organização e Arquitetura de Computadores. Aula 1 - Introdução Juliana F. Camapum Wanderley.

Organização e Arquitetura de Computadores. Aula 2 - Desempenho Juliana F. Camapum Wanderley.

Aula 14: Instruções e Seus Tipos

Capítulo 3. Avaliação de Desempenho. 3.1 Definição de Desempenho

Organização e Arquitetura de Computadores I

Conjunto de Instruções e Arquitectura p.1

Capítulo 4. MARIE (Machine Architecture Really Intuitive and Easy)

Desempenho DESEMPENHO DE COMPUTADORES

Arquiteturas RISC. (Reduced Instructions Set Computers)

Arquitetura de Computadores. Ivan Saraiva Silva

ARQUITETURA DE COMPUTADORES

Tais operações podem utilizar um (operações unárias) ou dois (operações binárias) valores.


Introdução à Arquitetura de Computadores

Aula 26: Arquiteturas RISC vs. CISC

ANHANGUERA EDUCACIONAL. Capítulo 2. Conceitos de Hardware e Software

Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2)

Computadores de Programação (MAB353)

Medidas de desempenho de CPUs. Uma introdução breve

Organização e Arquitetura de Computadores I

Arquitetura de Computadores I

Sistemas Computacionais II Professor Frederico Sauer

Arquitetura de Computadores - Arquitetura RISC. por Helcio Wagner da Silva

Organização de Computadores

Anotações da 2a Edição

Figura 1 - O computador

O processador é composto por: Unidade de controlo - Interpreta as instruções armazenadas; - Dá comandos a todos os elementos do sistema.

Arquitetura de Computadores. Linguagem de Máquina

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

Introdução. Introdução. Introdução. Organização Estruturada de Computadores. Introdução. Máquinas Multiníveis

Memória cache. Prof. Francisco Adelton

Organização de Computadores

Arquitetura de processadores: RISC e CISC

Conjunto de Instruções. Conjunto de Instruções

Organização e Arquitetura de Computadores I. de Computadores

Processador ( CPU ) E/S. Memória. Sistema composto por Processador, Memória e dispositivos de E/S, interligados por um barramento

Sistemas Operacionais

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias:

Conjunto de Instruções

Unidade Central de Processamento (CPU) Processador. Renan Manola Introdução ao Computador 2010/01

Arquitetura de Computadores Moderna

ULA Sinais de Controle enviados pela UC

Capítulo 1 Introdução

1. NÍVEL CONVENCIONAL DE MÁQUINA

NOTAS DE AULA Prof. Antonio Carlos Schneider Beck Filho (UFSM) Prof. Júlio Carlos Balzano de Mattos (UFPel) Arquitetura de Von Neumann

Organização de Computadores 1

MIPS. Prof. Carlos Bazilio

1.3. Componentes dum sistema informático HARDWARE SOFTWARE

RISC X CISC - Pipeline

Arquitetura e Organização de Computadores

Sistema de Computação

Desempenho de Computadores

Computadores de Programação (MAB353)

Edeyson Andrade Gomes

ARQUITETURA DE COMPUTADORES

Organização e Arquitetura de Computadores I

Componentes do Computador e. aula 3. Profa. Débora Matos

Caminho dos Dados e Atrasos

Arquitetura e Organização de Computadores. Capítulo 0 - Introdução

Pipeline. Todos os estágios devem estar prontos ao mesmo tempo para prosseguir.

Informática I. Aula 5. Aula 5-13/05/2006 1

RISC - Reduced Instruction Set Computer

Introdução à Arquitetura de Computadores. Renan Manola Introdução ao Computador 2010/01

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar

O hardware é a parte física do computador, como o processador, memória, placamãe, entre outras. Figura 2.1 Sistema Computacional Hardware

Implementação de um soft-core em VHDL baseado no conjunto de instruções MIPS-I

Infraestrutura de Hardware. Instruindo um Computador

BARRAMENTO DO SISTEMA

Organização e Arquitetura de Computadores. Aula 10 Ponto Flutuante Parte I Juliana F. Camapum Wanderley

Arquitetura de Computadores Paralelismo, CISC X RISC, Interpretação X Tradução, Caminho de dados

Organização de Computadores Hardware

Computadores de Programação (MAB353)

Arquitetura de Computadores

MODOS DE ENDEREÇAMENTO

3. O NIVEL DA LINGUAGEM DE MONTAGEM

Sistemas Operacionais. Prof. Pedro Luís Antonelli Anhanguera Educacional

Arquitetura e Organização de Computadores. Capítulo 0 - Introdução

Arquitetura de Computadores I

Algumas características especiais

AULA 1. Informática Básica. Gustavo Leitão. Disciplina: Professor:

Arquitetura de Computadores RISC x CISC. Gustavo Pinto Vilar

ARQUITETURA DE COMPUTADORES

Organização e Arquitetura de Computadores I. de Computadores

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Arquitetura de Computadores I

Análises Geração RI (representação intermediária) Código Intermediário

Processadores. Prof. Alexandre Beletti Ferreira

2 Formalidades referentes ao trabalho

ARQUITETURA DE COMPUTADORES

Introdução à Organização de Computadores. Sistemas da Computação Prof. Rossano Pablo Pinto, Msc. rossano at gmail com 2 semestre 2007

CPU Unidade Central de Processamento. História e progresso

O modelo do computador

Processadores BIP. Conforme Morandi et al (2006), durante o desenvolvimento do BIP, foram definidas três diretrizes de projeto:

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 8

Algoritmos e Programação Estruturada

ORGANIZACÃO DE COMPUTADORES PROCESSADORES CHIPS TRANSISTORES

Visão Geral da Arquitetura de Computadores. Prof. Elthon Scariel Dias

INSTITUTO DE EMPREGO E FORMAÇÃO PROFISSIONAL, I.P.

3. Arquitetura Básica do Computador

Transcrição:

Organização e Arquitetura de Computadores Aula 1 - Introdução 2002 Juliana F. Camapum Wanderley http://www.cic.unb.br/docentes/juliana/cursos/oac OAC Introdução 1 Sumário Introdução a Arquitetura de Computadores Organização e Anatomia de um Computador Mudanças Tecnológicas Rápidas Conclusões OAC Introdução 2

Introdução Nos anos 60/70: minimizar espaço em memória melhora o desempenho Problema atual: hierarquia de memórias paralelismo dos processadores (pipeline) otimização dos compiladores sistema operacional... OAC Introdução 3 O que é "Arquitetura de Computadores"? Software Hardware Application (Netscape) Compiler Assembler Processor Memory Operating System (Linux) Datapath & Control Digital Design Circuit Design transistors I/O system AC Instruction Set Architecture Arquitetura do conjunto de instruções + Organização da máquina Coordenação de muitos Níveis de Abstração OAC Introdução 4

Abstração Maior aprofundamento revela mais informações Uma abstração omite detalhes desnecessários, ajudando a lidar com a complexidade É uma descrição simplificada ou seletiva de um sistema OAC Introdução 5 Arquitetura do Conjunto de Instruções Uma importante abstração interface entre hardware e software de baixo nível padronização das instruções, linguagem de máquina, etc... Vantagens: diferentes implementações da mesma arquitetura desvantagem: algumas vezes impossibilita o uso de inovações Modernas arquiteturas de conjunto de instruções: Intel (80x86/Pentium/K6/MMX), PowerPC, DEC Alpha, SGI MIPS, SUN SPARC, HP PA-RISC OAC Introdução 6

OAC Introdução 7 Arquitetura do Conjunto de Instruções Conjunto de instruções (ou códigos de operação). Categorias de Instruções - MIPS R3000 Carregar/Armazenar Cálculo Desvio Ponto flutuante Gerenciamento de Memória Formato das instruções. 3 formatos de instruções (32 bits) - MIPS R3000 Tipos e estruturas de dados, codificação e representação Modos de endereçamento e acesso a dados e instruções. Organização da memória. Níveis de Representação High Level Language Program (e.g., C) Assembly Language Program (e.g.,mips) Machine Language Program (MIPS) Control Signal Specification OAC Introdução 8 Compiler Assembler Machine Interpretation AC temp = v[k]; v[k] = v[k+1]; v[k+1] = temp; lw $t0, 0($2) lw $t1, 4($2) sw $t1, 0($2) sw $t0, 4($2) 0000 1001 1100 0110 1010 1111 0101 1000 1010 1111 0101 1000 0000 1001 1100 0110 1100 0110 1010 1111 0101 1000 0000 1001 0101 1000 0000 1001 1100 0110 1010 1111

Por trás do Programa Computadores: dois dígitos 0 e 1 (bit s). Em computadores: bits são agrupados em grupos na memória: Z-80 Grupos de 8 bits (1 byte). MIPS Grupos de 32 bits. Memória de um computador: Endereço Conteúdo 0 0000 0000 0000 0000 0000 0000 1001 1000 1 0000 0000 0000 0000 0000 1000 0001 1010 2 0000 0000 0000 0000 1111 0000 1001 1000 Representação popular: em hexa: Endereço Conteúdo 0000 0000 0000 0098 0000 0001 0000 F098 Significado dos bits: Programas, números, texto, imagens, sons, etc. OAC Introdução 9 Organização da Máquina Características de performance e capacidade das principais unidades funcionais. Registradores, Unidade lógica e aritmética, Unidade de controle... Como estas unidades funcionais são conectadas. A natureza das informações trocadas entre componentes. A lógica e os meios pelos quais é controlado este fluxo de informações. OAC Introdução 10

Anatomia: 5 componentes de qualquer Computador Computador Pessoal Computador Processador Controle Datapath Via de dados Memória (onde programas, dados vivem qdo rodando) Devices Input Entrada Output Saída Teclado, Mouse Disco (onde programas, dados vivem quando não estão rodando) Monitor, Impressora OAC Introdução 11 Nosso primeiro enfoque O processador (datapath e controle) Implementado usando milhões de transistores Impossível de entender olhando cada transistor Nós precisamos de abstrações OAC Introdução 12

Arquitetura de Computadores Data cache Control Branch Arquitetura Pentium Instruction cache Bus Integer data path Floatingpoint data path OAC Introdução 13 Mudanças tecnológicas Grande desenvolvimento da eletrônica Transistor: chave on/off CI: dúzias a milhões de transistores em um VLSI. OAC Introdução 14

Circuitos Integrados Silício semicondutor. Pode ser: Excelentes condutores. Excelentes isolantes. Áreas que alternam entre condutores e isolantes (chaves). Fabricação: Bastão (ingot) diâmetro de 6 a 12 polegadas, comprimento de 12 a 24 polegadas. Fatiados em finas fatias wafers (largura de 0,1 polegada). Série de passos de processamento químico, que cria transistores, condutores e isolantes. Conectar o chip com os pinos externos. Encapsulamento. OAC Introdução 15 1000000000 100000000 10000000 1000000 100000 10000 1000 Tendências Tecnológicas: Capacidade de Memória (cada chip DRAM) size 1970 1975 1980 1985 1990 1995 2000 Ano Tam. (Mbit) 1980 0.0625 1983 0.25 1986 1 1989 4 1992 16 1996 64 2000 256 OAC Introdução 16 Year - Aprox 1.4X/ano, ou dobro a cada 2 anos. - 4000X desde 1980.

Tendências Tecnológicas: Complexidade do Microprocessador 100000000 10000000 1000000 100000 Lei de Moore i80486 i80386 i80286 Pentium i8086 10000 i8080 i4004 1000 1970 1975 1980 1985 1990 1995 2000 Year Athlon (K7): 22 Milhões Alpha 21264: 15 milhões Pentium Pro: 5.5 milhões PowerPC 620: 6.9 milhões Alpha 21164: 9.3 milhões Sparc Ultra: 5.2 milhões 2X transistores/chip Cada 1.5 anos Chamada "Lei de Moore" OAC Introdução 17 1200 1100 1000 900 800 700 600 500 400 300 200 100 0 OAC Introdução 18 Tendências Tecnológicas: Desempenho de Processador 1.54X/ano 87 88 89 90 91 92 93 94 95 96 97 DEC Alpha 21264/600 DEC Alpha 5/500 DEC Alpha 5/300 DEC Alpha 4/266 IBM POWER 100 Intel P4 1500 MHz (Prim. 2001) Desempenho Processador aumento/ano, erroneamente referido como Lei de Moore (transistores/chip)

Tecnologia do Computador Mudança Dramática! Processador 2X em veloc. cada 1.5 anos; 100X desempenho na última década. Memória Capacidade DRAM: 2x / 2 anos; 64x tamanho na última década. Disco capacidade: > 2X em tamanho cada 1 ano. Custo por bit: melhora cerca de 100% por ano. 120X tamanho na última década. OAC Introdução 19 Tecnologia do Computador Mudança Dramática PC Estado-da-arte: Velocidade Clock do Processador: 4000 MHz (4.0 GigaHertz) Capacidade da Memória: 1000 MegaByte (1.0 GigaBytes) Capacidade do Disco: 1000 GigaBytes (1.0 TeraBytes) Novas unidades! Mega => Giga, Giga => Tera OAC Introdução 20

Por que Estudar Arq de Computadores? Mudança; É excitante!; nunca foi tão excitante! Impacta todos os outros aspectos de engenharia elétrica/eletrônica e ciência dos computadores. Bionics: Sensors in latex fingers instantly register hot and cold, and an electronic interface in his artificial limb stimulates the nerve endings in his upper arm, which then pass the information to his brain. The $3,000 system allows his hand to feel pressure and weight, so for the first time since losing his arms in a 1986 accident, he can pick up a can of soda without crushing it or having it slip through his fingers. One Digital Day OAC Introdução 21 AC: Então, o que aprenderei neste curso? Arq de Computadores do ponto de vista do programador O que o programador escreve Como é convertido para algo que o computador entende Como o computador interpreta o programa O que torna programas lentos OAC Introdução 22

AC: Então, o que será visto neste curso? Aprender as grandes idéias em CC e engenharia: 5 componentes clássicos de um computador Dados podem ser qualquer coisa (inteiros, ponto flutuante, caracteres); um programa determina o que ele é Conceito de programa armazenado: instruções são apenas dados Princípio de Localidade, explorado via hierarquia de memória (cache) Maior performance via exploração de paralelismo (pipeline). Princípio de abstração, utilizado para construir sistemas em camadas Compilação vs. Interpretação através das camadas do sistema. Princípios/Armadilhas de Medidas de Desempenho. OAC Introdução 23 C C++ O que AC não é Aprendizado de C Se você sabe uma, você deveria ser capaz de aprender outra ling. de programação praticamente sozinho. Dado que você sabe Pascal ou Java, deve ser mais ou menos fácil entender/aprender C. Java Programação em Linguagem Assembly Esta é uma habilidade que você aprenderá como um efeito colateral de entender as Grandes Idéias. Projeto de Hardware Nós trabalharemos com hardware em nível de abstração, com muito pouco de lógica física para que tenhamos uma perspectiva adequada do assunto. OAC Introdução 24

Organização do curso Desempenho (Capítulo 2) Uma arquitetura de conjunto de instruções (Capítulo 3) Aritmética e como construir uma ALU (Capítulo 4) Lógica Seqüencial (Apêndice B) Construção de um processador para executar nossas instruções (Capítulo 5) Mapeamento do Controle no Hardware (Apêndice C) Pipelining para melhorar desempenho (Capítulo 6) Memória: caches e memória virtual (Capítulo 7) I/O (Capítulo 8) Chave para um bom curso: Ler o livro! OAC Introdução 25 Literatura Livro Texto: Requerido: Organização e Projeto de Computadores: A Interface Hardware/Software, Segunda Edição, Patterson and Hennessy (P&H) - Editora LTC OAC Introdução 26

Leitura Todo o capítulo 1 do livro texto Itens 1.1-1.8 OAC Introdução 27

Organização e Arquitetura de Computadores Aula 2 - Desempenho 2002 Juliana F. Camapum Wanderley http://www.cic.unb.br/docentes/juliana/cursos/oac OAC Desempenho 1 Objetivo: como... Medir e relatar Fazer escolhas inteligentes Ter um bom julgamento em avaliações de marketing. Entender relação entre desempenho e arquitetura. Medidas de desempenho difícil Impossível de julgar pela análise do conjunto de instruções. Diferente métodos: diferente resultados. É importante entender os critérios, para poder fazer escolhas inteligentes. Comparação entre máquinas é importante para Compradores e Projetistas. OAC Desempenho 2

Desempenho Importância para projetistas: Saber se uma máquina é mais rápida que a outra. Saber porque isto acontece (hardware, set de instruções, etc.). Fatores que influenciam performance: Quão bem o programa usa as instruções de máquina. Quão bem o hardware implementa as instruções. Quão bem os sistemas de I/O funcionam. (i.e., Nós necessitamos de uma nova máquina ou um novo sistema operacional?) OAC Desempenho 3 Definindo desempenho Analogia com aviões: qual avião tem o melhor desempenho? Avião Passageiros Autonomia (mi) velocidade (mph) fluxo (passxmph) Boeing 777 375 4630 610 228750 Boeing 747 470 4150 610 286700 BAC/Sud Concorde 132 4000 1350 178200 Douglas DC-8-50 146 8720 544 079424 Concorde comparado com 747 Velocidade: Concorde é o melhor. Capacidade: Boeing 747 é o melhor. Velocidade de fluxo de passageiros: Boeing 747é o melhor para um maior número de pessoas. Até 132 passageiros, o Concorde é o melhor. Autonomia: o DC-8-50 é o melhor. OAC Desempenho 4

Desempenho dos computadores: TIME, TIME... Tempo de Resposta (latência) Dois computadores rodando um programa: Qual deles roda o programa mais rápido? Demora para executar uma tarefa Espera de uma consulta a base de dados Fluxo (Throughput) Dois computadores rodando vários programas ao mesmo tempo: Quantos trabalhos a máquina pode rodar cada vez? Qual a taxa média de execução? Quantos trabalhos são concluídos? Se um novo processador é colocado na máquina o que nós melhoramos? Se uma nova máquina é colocada no laboratório o que melhoramos? OAC Desempenho 5 Tempo de relógio, tempo de resposta ou tempo decorrido Tempo total para uma tarefa incluindo acesso a disco, memória... Freqüentemente não é bom para comparações Tempo de CPU Não considera I/O ou tempo gasto por outros programas Pode ser dividido em: Tempo de CPU para usuário tempo gasto no programa Tempo de CPU do sistema operacional tempo gasto pelo sistema op. em apoio ao programa Difícil de separar estes tempos Nosso foco: tempo de CPU para usuário Desempenho de sistema: tempo decorrido Desempenho de CPU: tempo de CPU para usuário OAC Desempenho 6 Tempo de Execução

Definições de Desempenho Sempre usa um programa de teste Uma máquina X rodando determinado programa 1 Performanc ex = Tempo de Execução Se X é n vezes mais rápido que Y x Performance Performance X Y Tempo de Execução = Tempo de Execução Y X = n Problema: máquina A roda um programa em 10 ms e máquina B roda o mesmo programa em 20 ms Desempenho A =1/10ms=100, Desempenho B =1/20ms=50 OAC Desempenho 7 Ciclos de Clock Clock (relógio): usado em quase todos os computadores Período = duração do ciclo de clock (segundos), freqüência=ciclos por segundo = 1/período (Hertz) Podemos usar no lugar do tempo de execução do programa em segundos o número de ciclos no. de ciclos de clock Tempo de CPU = = Tempo de CPU duração do ciclo de clock f clock Para melhorar: Reduzir período do clock Reduzir número médio de ciclos por instrução Será visto que muitas vezes Redução do período de clock aumento no n o médio de ciclos. OAC Desempenho 8

Exemplo Num programa de referência Máquina A (clock de 400MHz) Tempo CPU =10 segundos Máquina B (clock de?) Tempo CPU = 6 segundos Qual será o novo clock necessário? Solução usar a equação no. de ciclos de clock da CPU = Tempo de CPU f clock Outra equação de medida Programa várias instruções Cada instrução n o de ciclos CPI média de ciclos por instrução Equação alternativa: N o de ciclos de clock da CPU = Instruções por programa x CPI OAC Desempenho 9 Exemplo: duas máquinas tem duas implementações de uma mesma instruction set architecture (ISA) (mesmo conjunto de instruções) Máquina A: CLOCK:1ns CPI: 2,0 Máquina B: OAC Desempenho 10 CLOCK: 1,2ns CPI:1,2 Qual é a máquina mais rápida para este programa? Quão mais rápida? Solução Determinar tempo de CPU Usar equação do desempenho

Quantos ciclos são requeridos em um programa? Poderíamos assumir que # de ciclos = # de instruções 1st instruction 2nd instruction 3rd instruction 4th 5th 6th... time Esta afirmação é incorreta, instruções gastam tempos diferentes em máquinas diferentes. Como? lembrem -se que são instruções de máquina e não linhas de código C OAC Desempenho 11 Diferentes números de ciclos para diferentes instruções time Multiplicação gasta mais tempo que adição Operações de ponto flutuante são mais longas que inteiros Acesso a memória gasta mais tempo que acesso a registro OAC Desempenho 12

Exemplo Nosso programa roda em 10 segundos em um computador A, que tem um clock de 400 Mhz. Nós estamos ajudando alguém projetar uma nova máquina B, que deverá rodar este programa em 6 segundos. O projetista poderá usar uma nova (ou mais cara) tecnologia para melhorar substancialmente a freqüência de clock, mas ele tem a informação de que este aumento afetará o projeto do resto da CPU e por essa razão a máquina B requer 1,2 vezes mais ciclos de clock que a máquina A para um mesmo programa. Qual deverá ser a freqüência do clock da nova máquina? OAC Desempenho 13 Depois de entender ciclos Um dado programa requer várias instruções (instruções de máquina ) vários ciclos vários segundos Nós temos um vocabulário que relaciona estas grandezas: tempo de ciclo ou período (segundos por ciclo) Freqüência do clock (ciclos por segundo) CPI (ciclos por instrução) uma aplicação intensiva em ponto flutuante poderia ter um alto CPI MIPS (milhões de instruções por segundo) poderia ser bom para um programa usando instruções simples OAC Desempenho 14

Desempenho Desempenho é determinado pelo tempo de execução Como podemos quantificar o desempenho? # de ciclos para executar um programa # de instruções no programa # de ciclos por segundo média # de ciclos por instrução Média # de instruções por segundo Tempo de CPU = no. de ciclos de clock = f no. de clock f clock instruções CPI Erro comum: indicar uma das variáveis como desempenho quando ela realmente não é. OAC Desempenho 15 Equação alternativa no. de ciclos de clock Onde: CPI i = CPI para instruções de cada classe i C i = número de instruções de cada classe i Exemplo: Um projetista de compilador decidindo entre duas seqüências de código para uma máquina particular. = n i= 1 CPI i C i Baseado no Hardware da máquina Classe da Instrução CPI A 1 B 2 C 3 Seqüência Número de instruções A B C 1 2 1 2 2 4 1 1 Qual a seqüência mais rápida? Quanto? Qual o CPI de cada seqüência? OAC Desempenho 16

MIPS - Exemplo Dois diferentes compiladores estão sendo testados para uma máquina de 100 MHz. A máquina tem três diferentes classes de instruções: Classe A, Classe B e Classe C, que requer um, dois e três ciclos respectivamente. Os compiladores são usados para produzir um grande bloco de software. O código do primeiro compilador usa 5 milhões de instruções da classe A, 1 milhão da classe B e 1 milhão da classe C. O código do segundo compilador usa 10 milhões de instruções da classe A, 1 milhão da classe B e 1 milhão da classe C. Qual a seqüência mais rápida de acordo com MIPS? Qual a seqüência mais rápida de acordo com tempo de execução? OAC Desempenho 17 Escolha de programas para avaliar performance Performance de vários computadores: Comparação de cada um com um computador de referência. Problema: Performance depende do programa. Qual é o melhor programa? Conjunto de programas típicos que o usuário tem contato: Engenheiros, Programadores, Público em geral. Pode depender do usuário. Programas de avaliação: benchmarks Problemas: algumas arquiteturas podem tentar melhorar desempenho nas benchmarks, sem melhorar o desempenho em geral. Exemplo: SPEC suite, 1989: Matrix300 - Referência: VAX-11/780 Melhor: programas reais. Entretanto: às vezes se usa programas pequenos, especialmente em começo de desenvolvimento, quando ainda não existem muitos programas. OAC Desempenho 18

800 SPEC 89 (System Performance Evaluation Cooperative) Índice para performance da máquina IBM Powerstation 550 700 600 SPEC performance ratio 500 400 300 200 100 0 gcc espresso spice doduc nasa7 li eqntott matrix3 00 fpppp tom c atv OAC Desempenho 19 Benchmark Com piler Enhanced compiler Documentação Incluir todos os detalhes (máquina, compilador, programas, S.O., etc.). Exemplo: OAC Desempenho 20

Comparação Definir um grupo de benchmarks. Decidir: tempo ou fluxo. Melhor: uma avaliação para cada. Mas: pessoas muitas vezes preferem uma soma, média aritmética ou ponderada do tempo de execução. Exemplo: Comparação individual Programa 1: B é 10 vezes mais rápido que A. Programa 2: A é 10 vezes mais rápido que B. Total Performance B TempoA 1001 = = = 9,1 Performance Tempo 110 OAC Desempenho 21 A B Benchmark mais popular SPEC 95 aplicada a processadores recentes Criadores: grupo de companhias Método Comparação: SPARCstation 10/40 Divide tempo da SPARCstation pelo tempo do computador que está sendo avaliado 8 programas inteiros, 10 de ponto flutuante Desempenho de cada um é reportado Média usada: geométrica OAC Desempenho 22

SPEC 95 grupo de programas Benchmark Description go Artificial intelligence; plays the game of Go m88ksim Motorola 88k chip simulator; runs test program gcc The Gnu C compiler generating SPARC code compress Compresses and decompresses file in memory li Lisp interpreter ijpeg Graphic compression and decompression perl Manipulates strings and prime numbers in the special-purpose programming language Perl vortex A database program tomcatv A mesh generation program swim Shallow water model with 513 x 513 grid su2cor quantum physics; Monte Carlo simulation hydro2d Astrophysics; Hydrodynamic Naiver Stokes equations mgrid Multigrid solver in 3-D potential field applu Parabolic/elliptic partial differential equations trub3d Simulates isotropic, homogeneous turbulence in a cube apsi Solves problems regarding temperature, wind velocity, and distribution of pollutant fpppp Quantum chemistry wave5 Plasma physics; electromagnetic particle simulation OAC Desempenho 23 SPEC 95 exemplo Pentium e Pentium Pro SPECint 10 9 8 7 6 5 4 3 2 Dobrando a taxa de clock dobra o desempenho? Uma máquina com uma freqüência de clock menor pode ter melhor desempenho? SPECfp 10 9 8 7 6 5 4 3 2 1 0 50 100 150 Clock rate (MHz) Pentium Pro: 1,4 a 1,5 x mais rápido OAC Desempenho 24 200 250 Pentium Pentium Pro 1 0 50 100 150 200 250 Clock rate (MHz) Pentium Pentium Pro Pentium Pro: 1,7 a 1,8 x mais rápido

Lei de Amdahl Perigo: Esperar que uma melhoria aumente o desempenho da máquina de forma proporcional ao tamanho da melhoria Tempo de execução após melhoria = Tempo de execução não afetado + (Tempo de execução afetado / melhoria ) Falha: Uso do parâmetro MIPS como métrica da performance Diferentes máquinas possuem diferentes quantidade de instruções para executar o mesmo programa Princípio: Faça o caso comum mais rápido são mais simples de otimizar OAC Desempenho 25 Exemplo Suponha que todas as instruções em ponto flutuante sejam melhoradas rodando 5 vezes mais rápido. Se o tempo de execução de alguns benchmark antes da melhora no ponto flutuante é de 10 segundos. Qual será o aumento da velocidade se metade dos 10 segundos são gastos executando instruções em ponto flutuante? OAC Desempenho 26

Exemplo Nós estamos procurando um benchmark para demonstrar a nova unidade de ponto flutuante descrita acima, e queremos que o benchmark tenha um aumento de velocidade de 3. Considerando um benchmark que tem um tempo de execução de 100 segundos com o hardware antigo de ponto flutuante. Quanto do tempo de execução deve ser gasto com instruções em ponto flutuante para que o benchmark tenha o aumento de velocidade desejado? OAC Desempenho 27 Relembrando Desempenho é específico para um programa particular Tempo total de execução é um resumo consistente do desempenho Para uma dada arquitetura o desempenho aumenta quando: Aumento da freqüência de clock (sem efeitos adversos no CPI) Melhorias na organização do processador que diminuam o CPI Melhorias no compilador que diminuam o CPI e/ou número de instruções Falha: Melhorias de desempenho em um aspecto da máquina afetará o desempenho total OAC Desempenho 28

aumento do clock: 21 vezes (66 a 1400Mhz) aumento da performance = 55 vezes Intel P4 1900 e AMD Athlon 1400 são aproximadamente iguais na adição com inteiros OAC Desempenho 29 AMD K6-2 350 x PII 333: O AMD tem um clock 5% mais alto porém ele é 36% mais lento. Althon: 10% mais cálculos do que o Intel Pentium III rodando na mesma freqüência. Pentium 4 1400 não atendeu as expectativas. Pentium 4 1900 mostrou um desempenho razoável. OAC Desempenho 30

Instruções MMX foram introduzidas pela Intel com a CPU Pentium166 O Pentium 4 teve um baixo desempenho para cálculos MMX (Surpresa!!!) MMX (MultiMedia extension) na realidade não aumenta a funcionalidade do processamento Multimedia como foi anunciado As instruções utilizam operações lógicas e matemáticas processa dados maiores (64 bits) em um tempo menor Processa vários blocos inteiros simultaneamente por uma única CPU Difícil de usar poucos aplicativos usam todos os benefícios das instruções MMX OAC Desempenho 31 WinChip C6 X Pentium A Intel aumentou o tamanho da memória cache L1 (cache interno) do Pentium de 16 KB para 32 KB no Pentium MMX. Só isto faz com que o Pentium MMX seja mais rápido que um Pentium não-mmx. Programas que não possuem instruções MMX: ganho de performance médio do Pentium-200 MMX sobreo Pentium-200 é de 11,30% Programas que possuem instruções MMX: ganho de performance médio do Pentium-200 MMX sobre o Pentium-200 é de 239% São poucos os programas que utilizam instruções MMX. Um programa conhecido que já possui versão MMX é o PhotoShop. OAC Desempenho 32

Pentium 4 (MMX, SSE, SSE2) x Athlon (MMX, 3DNow) MP3 encoding Windows 2000 FPU intensive OAC Desempenho 33 VAX arquitetura CISC, MIPS arquitetura RISC OAC Desempenho 34

OAC Desempenho 35 RISC x CISC RISC sobre CISC Instruções Load/Store um ciclo (mais rápida) Controle por conexões físicas (fiação); complexidade reduzida do chip Hardware mais simples, mais fácil de projetar e mais barato para produzir Mais registradores/menor acesso a MEMÓRIA INSTRUÇÕES com formato fixo, menor número de instruções Mais fácil de projetar compiladores otimizados Software mais complexo, programas maiores CISC: 75% do mercado (Intel, AMD, padrão x86) PowerPC 601 (RISC) mais instruções do que o Pentium (CISC) CISC atuais usam muitas técnicas do RISC As diferenças estão diminuindo Sobre o MIPS e VAX Fortes similaridades organizacionais Ex: Abstrações do Pipeline da CPU se encaixam VAX microinstruções possui muitas características do RISC MIPS possui Int-Cache e Data-Cache - VAX tem uma única Cache com Inst+Data MIPS tem páginas maiores (MEM) MIPS tem acesso mais rápido a MEM, operações em FP (ponto flutuante) OAC Desempenho 36

Spec Benchmarks usados para MIPS/VAX 3 benchmarks inteiros (em C) Espresso Eqntott Li 7 benchmarks ponto flutuante (em fortran ) Spice2g6 Matrix300 Nasa7 Fpppp Tomcatv doduc Compiladores usados: VAX Cv3.1, CCv2.0 Compiladores usados: VAX Fortran V5.0-1, MIPS f77 v2.0 OAC Desempenho 37 Instruções e CPI (Fator RISC) MIPS/VAX INST VAX/MIPS CPI MIPS/VAX DESEMP OAC Desempenho 38 MIPS VAX DESEMP (CPI INST) = (CPI INST) VAX MIPS = VAX MIPS CPI MIPS VAX INST

MIPS/VAX Performance e Instruções OAC Desempenho 39

Organização e Arquitetura de Computadores Aula 3 Linguagem de Máquina 2002 Juliana F. Camapum Wanderley http://www.cic.unb.br/docentes/juliana/cursos/oac OAC Linguagem de Máquina 1 Introdução Linguagem de Máquina Conjunto de Instruções Variáveis em Assembly: Registradores Adição e Subtração em Assembly Acesso à Memória em Assembly Objetivos Facilitar a construção do hardware e compiladores Maximizar a performance. Minimizar o custo. Instruções: MIPS (NEC, Nintendo, Silicon Graphics, Sony). OAC Linguagem de Máquina 2

Projeto de Assembly: Conceitos Chaves Linguagem Assembly é essencialmente suportada diretamente em hardware, portanto... Princípio 1: Simplicidade favorece Regularidade. Ela é mantida bem simples! Limite nos tipos de operandos Limite no conjunto de operações que podem ser feitas no mínimo absoluto Se uma operação pode ser decomposta em uma mais simples, não a inclua (a complexa) OAC Linguagem de Máquina 3 Todo computador: ops. Aritméticas MIPS: add a,b,c # a b + c nota: os nomes reais dos operadores não são a, b e c. Serão vistos em Breve. Instruções são mais rígidas que em lin. de alto nível MIPS: sempre 3 operandos. Exemplo: somar variáveis b, c, d, e, colocando a soma em a: add a,b,c add a,a,d add a,a,e OAC Linguagem de Máquina 4 # a b+c # a b+c+d # a b+c+d+e Símbolo # Comentário (até o fim da linha). Exemplo: C Assembly. a = b + c; d = a e; Em MIPS: add a,b,c # a=b+c sub d,a,e # d=a-e

Variáveis Assembly: Registradores (1/3) Diferente de LAN, assembly não pode usar variáveis. Por que não? Manter o Hardware simples Operandos Assembly são registradores Número limitado de localizações especiais construídas diretamente no hardware Operações podem somente ser realizadas nestes! Benefício: Como registradores estão diretamente no hardware, eles são muito rápidos. OAC Linguagem de Máquina 5 Variáveis Assembly: Registradores (2/3) Desvantagem: Como registradores estão em hardware, existe um número predeterminado deles. Solução: código MIPS deve ser muito cuidadosamente produzido para usar eficientemente os registradores. 32 registradores no MIPS Por que 32? Princípio 2: Menor é mais rápido (> no. reg > ciclo clock) Cada registrador MIPS tem 32 bits de largura Grupos de 32 bits chamados uma palavra (word) no MIPS OAC Linguagem de Máquina 6

Variáveis Assembly: Registradores (3/3) Registradores são numerados de 0 a 31 Cada registrador pode ser referenciado por número ou nome. Por convenção, cada registrador tem um nome para facilitar a codificação - nomes: iniciam em $ Por agora: $16 - $22 $s0 - $s7 (corresponde a variáveis C) $8 - $15 $t0 - $t7 (corresponde a registradores temporários) Em geral, utilize nomes de registradores para tornar o código mais fácil de ler. OAC Linguagem de Máquina 7 Comentários em Assembly Outro modo de tornar o seu código mais claro: comente! Hash (#) é utilizado para comentários MIPS Qualquer coisa da marca hash(#) ao final da linha é um comentário e será ignorado. Nota: Diferente do C. Comentários em C tem a forma /* comentário */, de modo que podem ocupar várias linhas. OAC Linguagem de Máquina 8

Instruções Assembly Em linguagem assembly, cada declaração (chamada uma Instruction), executa exatamente uma de uma lista pequena de comandos simples Diferente de C (e da maioria das outras linguagem de alto nível), onde cada linha pode representar múltiplas operações. OAC Linguagem de Máquina 9 Adição e Subtração (1/3) Sintaxe de Instruções: 1 2,3,4 onde: 1) operação por nome 2) operando recebendo o resultado ("destino") 3) 1 o operando da operação ("fonte 1") 4) 2 o operando da operação ("fonte 2") Sintaxe é rígida: 1 operador, 3 operandos Por quê? Manter o Hardware simples via regularidade OAC Linguagem de Máquina 10

Adição e Subtração (2/3) em C: f = (g + h) (i + j); Adição em Assembly (MIPS) add $t0,$s1,$s2 # t0=s1+s2=(g + h) add $t1,$s3,$s4 # t1=s3+s4=(i + j) OAC Linguagem de Máquina 11 Reg. Temporários: $t0,$t1 Variáveis $s1,$s2,$s3,$s4 estão associados com as variáveis g,h,i,j Subtração em Assembly sub $s0,$t0,$t1 # s0=t0-t1=(g + h)-(i + j) Reg. Temporários: $t0,$t1 Variável $s0 está associada com a variável f Adição e Subtração (3/3) Como fazer a seguinte declaração C? a = b + c + d - e; Quebre em múltiplas instruções add $s0, $s1, $s2 # a = b + c add $s0, $s0, $s3 # a = a + d sub $s0, $s0, $s4 # a = a - e Nota: Uma linha de C pode resultar em várias linhas de MIPS. Note: Qualquer coisa após a marca hash em cada linha é ignorado (comentários) OAC Linguagem de Máquina 12

Operandos Assembly: Memória Variáveis C mapeiam em registradores; e como ficam as grandes estruturas de dados, como arrays/vetores? A memória (1 dos 5 componentes de um computador) contém tais estruturas. Mas as instruções aritméticas MIPS somente operam sobre registradores, nunca diretamente sobre a memória. Instruções para transferência de dados transferem dados entre os registradores e a memória: Memória para registrador Registrador para memória OAC Linguagem de Máquina 13 Endereçamento: Byte vs. palavra (1/2) Cada palavra na memória tem um endereço, similar a um índice em um array. Primeiros computadores numeravam palavras como elementos de um array C: Memory[0], Memory[1], Memory[2], OAC Linguagem de Máquina 14 Chamado o "endereço" de uma palavra Computadores precisam acessar bytes (8-bits) bem como palavras (4 bytes/palavra) Máquinas de hoje endereçam memória como bytes, portanto endereços de palavra diferem por 4 Memory[0], Memory[4], Memory[8],

Endereçamento: Byte vs. palavra (2/2) Endereçamento Byte Endereçamento Palavra OAC Linguagem de Máquina 15 Transferência de Dados: Memória para Reg. (1/4) Para transferir uma palavra de dados, nós devemos especificar duas coisas: Registrador: especifique este pelo número (0-31) Endereço da memória: mais difícil Pense a memória como um array único uni-dimensional, de modo que nós podemos endereçá-la simplesmente fornecendo um ponteiro para um endereço da memória. Outras vezes, nós queremos ser capazes de deslocar a partir deste ponteiro. OAC Linguagem de Máquina 16

Transferência de Dados: Memória para Reg (2/4) Para especificar um endereço de memória para copiar dele, especifique duas coisas: Um registrador que contém um ponteiro para a memória. Um deslocamento numérico (em bytes) O endereço de memória desejado é a soma destes dois valores. Exemplo: 8($t0) Especifica o endereço de memória apontado pelo valor em $t0, mais 8 bytes OAC Linguagem de Máquina 17 Transferência de Dados: Memória para Reg (3/4) Sintaxe da instrução de carga (load): 1 2,3(4) onde 1) nome da operação (instrução) 2) registrador que receberá o valor 3) deslocamento numérico em bytes. 4) registrador contendo o ponteiro para a memória Nome da Instrução: lw (significa Load Word, logo 32 bits ou uma palavra é carregada por vez) OAC Linguagem de Máquina 18

Transferência de Dados: Memória para Reg.(4/4) Exemplo: lw $t0,12($s0) Esta instrução pegará o ponteiro em $s0, soma 12 bytes a ele, e então carrega o valor da memória apontado por esta soma calculada no registrador $t0 Notas: $s0 é chamado registrador base 12 é chamado deslocamento (offset) Deslocamento é geralmente utilizado no acesso de elementos de array ou estruturas: reg base aponta para o início do array ou estrutura. OAC Linguagem de Máquina 19 Compilação com Memória Qual o offset em lw para selecionar A[8] em C? 4x8=32 para selecionar A[8]: byte vs. palavra Compile manualmente usando registradores: g = h + A[8]; g: $s1, h: $s2, $s3: endereço base de A 1 o transfere da memória para registrador: lw $t0,32($s3) # $t0 = A[8] Some 32 a $s3 para selecionar A[8], põe em $t0 A seguir, some-o a h e coloque em g add $s1,$s2,$t0 # $s1 = h+a[8]=$s2+$t0 OAC Linguagem de Máquina 20

Transferência de Dados: Reg para Memória Também queremos armazenar um valor do registrador na memória. Sintaxe da instrução store é idêntica à da instrução load. Nome da Instrução: sw (significa Store Word, logo 32 bits ou uma palavra será carregada por vez) Exemplo: sw $t0,12($s0) Esta instrução tomará o ponteiro em $s0, somará 12 bytes a ele, e então armazenará o valor do registrador $t0 no endereço de memória apontado pela soma calculada. OAC Linguagem de Máquina 21 Exemplo: Compilar... Compile manualmente usando registradores: A[12] = h + A[8]; h: $s2, $s3: endereço base de A 1 o transfere da memória para registrador $t0: lw $t0,32($s3) # $t0 = A[8] 2 o some-o a h e coloque em $t0 add $t0,$s2,$t0 # $t0 = h+a[8] 3 o transfere do reg. $t0 para a memória : sw $t0,48($s3) # A[12] = $t0 OAC Linguagem de Máquina 22

Ponteiros vs. Valores Conceito Chave: Um registrador pode conter qualquer valor de 32 bits. Este valor pode ser um int (signed), um unsigned int, um ponteiro (endereço de memória), etc. Se você escreve lw $t2,0($t0) então é melhor que $t0 contenha um ponteiro. E se você escrever add $t2,$t1,$t0 então $t0 e $t1 devem conter o quê? OAC Linguagem de Máquina 23 Notas a cerca da Memória Falha: Esquecer que endereços seqüenciais de palavras em máquinas com endereçamento de byte não diferem por 1. Muitos erros são cometidos por programadores de linguagem assembly por assumirem que o endereço da próxima palavra pode ser achado incrementandose o endereço em um registrador por 1 ao invés do tamanho da palavra em bytes. Logo, lembre-se que tanto para lw e sw, a soma do endereço base e o offset deve ser um múltiplo de 4 (para ser alinhado em palavra) OAC Linguagem de Máquina 24

Mais Notas acerca da Memória: Alinhamento MIPS requer que todas as palavras comecem em endereços que são múltiplos de 4 bytes. Alinhado Não Alinhado Bytes na Palavra 0 1 2 3 Localização da Palavra Chamado Alinhamento: objetos devem cair em endereços que são múltiplos do seu tamanho. OAC Linguagem de Máquina 25 Papel dos Registradores vs. Memória E se temos mais variáveis do que registradores? Compilador tenta manter as variáveis mais freqüentemente utilizadas nos registradores. Escrevendo as menos comuns na memória: spilling Por que não manter todas as variáveis na memória? Menor é mais rápido: registradores são mais rápidos que a memória Registradores são mais versáteis: Instruções aritméticas MIPS pode ler 2, operar sobre eles e escrever 1 por instrução Transferência de dados MIPS somente lê ou grava 1 operando por instrução, sem nenhuma operação. OAC Linguagem de Máquina 26

Imediatos Imediatos são constantes numéricas. Eles aparecem freqüentemente em código, logo existem instruções especiais para eles. Somar Imediato: addi $s0,$s1,10 #$s0=$s1+10(em MIPS) f = g + 10 (em C) onde registradores $s0,$s1 estão associados com as variáveis f, g Sintaxe similar à instrução add exceto que o último argumento é um número ao invés de um registrador. OAC Linguagem de Máquina 27 Registrador Zero Um imediato particular, o número zero (0), aparece muito freqüentemente em código. Então nós definimos o registrador zero ($0 ou $zero) para sempre ter o valor 0. Isto é definido em hardware, de modo que uma instrução como: addi $0,$0,5 #$0=$0+5 $0=0(reg. $0=0 sempre) não vai fazer nada. Use este registrador, ele é muito prático! OAC Linguagem de Máquina 28

"Em conclusão..." (1/2) Em linguagem Assembly MIPS: Registradores substituem variáveis C Uma instrução (operação simples) por linha Mais Simples é Melhor Menor é Mais Rápido Memória é endereçada por byte, mas lw e sw acessam uma palavra de cada vez. Um ponteiro (usado por lw e sw) é simplesmente um endereço de memória, logo nós podemos somar a ele ou subtrair dele (usando offset). OAC Linguagem de Máquina 29 "E em conclusão..." (2/2) Novas Instruções: add, addi, sub lw, sw Novos registradores: Variáveis C: $s0 - $s7 Variáveis Temporárias: $t0 - $t9 Zero: $zero OAC Linguagem de Máquina 30

Linguagem de Máquina Instruções, como registradores e palavras, são de 32 bits Exemplo: add $t0, $s1, $s2 registradores tem números t0=reg.8,$s1=reg.17,$s2=reg.18 Formato de Instrução de soma com registradores (R-tipo): 0 17 18 8 0 32 000000 10001 10010 01000 00000 100000 op rs rt rd shamt funct 6 bits 5 bits 5 bits 5 bits 5 bits 6 bits Primeiro campo: tipo de operação (soma). Último campo: modo da operação (soma com 2 registradores). Segundo campo: primeira fonte (17=$s1). Terceiro campo: segunda fonte (18=$s2). Quarto campo: registrador de destino (8=$t0). OAC Linguagem de Máquina 31 Linguagem de Máquina Novo princípio: Bom projeto exige um bom compromisso Vários tipos de instruções (tipo-r, tipo-i) Múltiplos formatos: complicam o hardware. Manter os formatos similares (3 primeiros campos iguais). Considere as instruções load-word e store-word, I-tipo para instruções de transferência de dados (lw,sw) Exemplo: lw $t0, 32($s2) Registrador de base: rs $s2. Registrador de fonte ou origem: rt $t0. Endereço de 16 bits: offset entre ±2 15. OAC Linguagem de Máquina 32 35 18 8 32 op rs rt 16 bit - offset

Codificação das instruções vistas até agora Notar: add e sub: Mesmo opcode: 0. Diferente função: 32 e 34. OAC Linguagem de Máquina 33 Exemplo Tradução de C para assembly e linguagem de máquina. C: A[300] = h + A[300] Assembly: # $t1=end. base=a lw $t0,1200($t1) # $t0= A[300]=conteúdo(1200+$t1) add $t0,$s2, $t0 # $t0=$t0+$s2=a[300]+h sw $t0,1200($t1) # A[300]=$t0 Linguagem de máquina: simplicidade favorece regularidade 1 bit de diferença OAC Linguagem de Máquina 34

Computadores modernos Instruções são representadas como números. Programas podem ser armazenados na memória. Conceito de programa armazenado. Programa armazenado: Na memória... Programa de contabilidade. Editor. Compilador. Dados. Texto. Programa em C. OAC Linguagem de Máquina 35 Resumo da linguagem até agora OAC Linguagem de Máquina 36

Organização e Arquitetura de Computadores Aula 4 Linguagem de Máquina - Decisões 2002 Juliana F. Camapum Wanderley http://www.cic.unb.br/docentes/juliana/cursos/oac OAC Linguagem de Máquina - Decisões - 1 Revisão (1/2) Em Linguagem Assembly MIPS: Registradores substituem variáveis C Uma Instrução (operação simples) por linha Mais simples é Melhor Menor é Mais Rápido Memória é endereçada por byte, mas lw e sw acessam uma palavra por vez Um ponteiro (usado por lw e sw) é simplesmente um endereço de memória, de modo que podemos adicionar a ele ou subtrair dele (utilizando offset). OAC Linguagem de Máquina - Decisões - 2

Revisão (2/2) Novas Instruções: add, addi, sub, lw, sw Novos Registradores: Variáveis C: $s0 - $s7 Variáveis Temporárias: $t0 - $t9 Zero: $zero OAC Linguagem de Máquina - Decisões - 3 Panorama Decisões C/Assembly : if, if-else Laços (loops) C/Assembly: while, do while, for Desigualdades Declaração Switch C OAC Linguagem de Máquina - Decisões - 4

Até agora... Todas as instruções nos permitiram manipular dados. Assim, construimos uma calculadora. Para construirmos um computador, precisamos da habilidade de tomar decisões... Vamos lá: pegue papel e caneta porque vamos fazer alguns exercícios na classe hoje! OAC Linguagem de Máquina - Decisões - 5 Decisões em C: Declaração if 2 tipos de declaração if em C if (condição) cláusula if (condição) cláusula1 else cláusula2 Rearranje o 2 o if do seguinte modo: if (condição) goto L1; cláusula2; go to L2; L1: cláusula1; L2: Não é tão elegante como if-else, mas com o mesmo significado OAC Linguagem de Máquina - Decisões - 6

Instruções de Decisão MIPS Instrução de Decisão em MIPS beq register1, register2, L1 beq é "branch if (registers are) equal O mesmo que (usando C): if (register1==register2) goto L1 Instrução de decisão MIPS complementar bne register1, register2, L1 bne é "branch if (registers are) not equal O mesmo que (usando C): if (register1!=register2) goto L1 Chamados desvios condicionais OAC Linguagem de Máquina - Decisões - 7 Instrução Goto MIPS Além dos desvios condicionais, MIPS tem um desvio incondicional: J label Chamada instrução Pulo (Jump): pule (ou desvie) diretamente para a marca dada sem precisar satisfazer qualquer condição Mesmo significado (usando C): goto label Tecnicamente, é o mesmo que: beq $0,$0,label já que sempre vai satisfazer a condição. OAC Linguagem de Máquina - Decisões - 8

Compilando if C em MIPS (1/2) Compile manualmente if (i == j) f = g+h; else f = g-h; (true) i == j f=g+h i == j? f=g-h (false) i!= j Exit Use este mapeamento: f: $s0, g: $s1, h: $s2, i: $s3, j: $s4 OAC Linguagem de Máquina - Decisões - 9 Compilando if C em MIPS (2/2) Código final MIPS compilado (preencha o espaço em branco): (true) i == j i == j? (false) i!= j f=g+h f=g-h Exit OAC Linguagem de Máquina - Decisões - 10

Compilando if C em MIPS (2/2) Código MIPS final compilado: beq $s3,$s4,true # branch i==j sub $s0,$s1,$s2 # (false) f=g-h j Fim # go to Fim True: add $s0,$s1,$s2 # (true) f=g+h Fim: (true) i == j f=g+h I == j? f=g-h Exit (false) i!= j Nota: Compilador automaticamente cria labels para tratar decisões (desvios) apropriadamente. Geralmente não são encontrados no código da Linguagem de Alto Nível OAC Linguagem de Máquina - Decisões - 11 Laços (loops) em C/Assembly (1/3) Laço (loop) simples em C do { g = g + A[i]; i = i + j; } while (i!= h); Reescreva isto como: Loop: g = g + A[i]; i = i + j; if (i!= h) goto Loop; Use este mapeamento: g: $s1, h: $s2, i: $s3, j: $s4, base de A:$s5 OAC Linguagem de Máquina - Decisões - 12

Loops em C/Assembly (2/3) Código MIPS final compilado: (preencha o espaço em branco): OAC Linguagem de Máquina - Decisões - 13 Laços (loops) em C/Assembly (2/3) Código MIPS final compilado: Loop: add $t1,$s3,$s3 # $t1 = 2*i add $t1,$t1,$t1 # $t1 = 4*i add $t1,$t1,$s5 # $t1=end(a+4*i) lw $t1,0($t1) # $t1=a[i] add $s1,$s1,$t1 # g=g+a[i] add $s3,$s3,$s4 # i=i+j bne $s3,$s2,loop # goto Loop if i!=h OAC Linguagem de Máquina - Decisões - 14

Laços (loops) em C/Assembly (3/3) Existem três tipos de laços em C: while do while for Cada um pode ser rescrito como um dos outros dois, de modo que o método utilizado no exemplo anterior, pode ser aplicado a laços while e for igualmente. Conceito Chave: Apesar de haver muitas maneiras de se escrever um loop em MIPS, desvio condicional é a chave para se tomar decisões. OAC Linguagem de Máquina - Decisões - 15 Laço com while em C/Assembly (1/2) Laço (loop) simples em C while (save[i] == k) i = i + j; Reescreva isto como: Loop: if (save[i]!= k) goto Exit; i = i + j; goto Loop; Exit: Use este mapeamento: i: $s3, j: $s4, k: $s5, base de save :$s6 OAC Linguagem de Máquina - Decisões - 16

Loops em C/Assembly (2/2) Código MIPS final compilado: (preencha o espaço em branco): OAC Linguagem de Máquina - Decisões - 17 Laços (loops) em C/Assembly (2/2) Código MIPS final compilado: Loop: add $t1,$s3,$s3 # $t1 = 2*i add $t1,$t1,$t1 # $t1 = 4*i add $t1,$t1,$s6 # $t1=end(save+4*i) lw $t1,0($t1) # $t1=save[i] bne $t1,$s5,exit # goto Exit if save[i]!=k add $s3,$s3,$s4 # i=i+j j Loop # goto Loop Exit: OAC Linguagem de Máquina - Decisões - 18

Desigualdades em MIPS (1/5) Até agora, nós testamos apenas igualdades (== e!=). Programas gerais precisam testar > e < também. Criar uma Instrução de Desigualdade em MIPS: "Set on Less Than" Sintaxe: slt reg1,reg2,reg3 Significado: if (reg2 < reg3) reg1 = 1; else reg1 = 0; Em computadores, "set" significa "set to 1", "reset" significa "set to 0". OAC Linguagem de Máquina - Decisões - 19 Desigualdades em MIPS (2/5) Como nós utilizamos isto? Compile manualmente: if (g < h) goto Less; Use este mapeamento: g: $s0, h: $s1 OAC Linguagem de Máquina - Decisões - 20

Desigualdades em MIPS (3/5) Código MIPS final compilado: (preencha o espaço em branco): OAC Linguagem de Máquina - Decisões - 21 Desigualdades em MIPS (3/5) Código final MIPS compilado: Less: slt $t0,$s0,$s1 # $t0 = 1 if g<h bne $t0,$0,less # goto Less if $t0!=0 Desvie se $t0!= 0 (g < h) # (if (g<h)) Registrador $0 sempre contém o valor 0, assim bne e beq freqüentemente utilizam-no para comparação após uma instrução slt. OAC Linguagem de Máquina - Decisões - 22

Desigualdades em MIPS (4/5) Agora, nós podemos implementar <, mas como implementamos >, <= e >=? Poderíamos adicionar mais 3 instruções mas: Meta MIPS: Mais simples é Melhor Nós podemos implementar <= em um ou mais instruções utilizando apenas slt e os desvios? E >? E >=? 4 combinações de slt e beq/bne OAC Linguagem de Máquina - Decisões - 23 Desigualdades em MIPS (5/5) 4 combinações de slt e beq/bne: slt $t0,$s0,$s1 # $t0 = 1 if g<h bne $t0,$0,less # if(g<h) goto Less slt $t0,$s1,$s0 # $t0 = 1 if g>h bne $t0,$0,greater # if(g>h) goto Greater slt $t0,$s0,$s1 # $t0 = 1 if g<h beq $t0,$0,gteq # if(g>=h) goto Gteq slt $t0,$s1,$s0 # $t0 = 1 if g>h beq $t0,$0,lteq # if(g<=h) goto Lteq OAC Linguagem de Máquina - Decisões - 24

Imediatos em Desigualdades C Existe também uma versão com imediatos de slt para testar contra constantes: slti Útil em laços (loops) for if (g >= 1) goto Loop M I P S OAC Linguagem de Máquina - Decisões - 25 Comando Switch/Case Novo instrumento: jr (jump register): Salto incondicional. Pula para o endereço especificado pelo registrador. Geralmente é usada juntamente com uma tabela. Para casa: estudar a instrução Switch/Case. OAC Linguagem de Máquina - Decisões - 26

Organização e Arquitetura de Computadores Aula 5 Linguagem de Máquina - Funções 2002 Juliana F. Camapum Wanderley http://www.cic.unb.br/docentes/juliana/cursos/oac OAC Linguagem de Máquina - Funções - 1 Procedimentos Estruturação de programas. Mais fácil de entender. Reutilização. Dividir em partes menores. OAC Linguagem de Máquina - Funções - 2

Panorama Funções em C Instruções MIPS para Funções A pilha (Stack) Convenções de Registradores Exemplo OAC Linguagem de Máquina - Funções - 3 Funções em C main() { int i,j,k,m; i = mult(j,k);... ; m = mult(i,i);... } /* really dumb mult function */ int mult (int mcand, int mlier){ int product; product = 0; while (mlier > 0) { product = product + mcand; mlier = mlier -1; } return product; } De quais informações o compilador/programador deve manter registro? Quais instruções podem realizar isto? OAC Linguagem de Máquina - Funções - 4

Contabilidade de Chamada de Função Registradores tem papel fundamental para manter registro de informações nas chamadas de funções. Convenção de Registradores: Endereço de retorno $ra Argumentos $a0, $a1, $a2, $a3 Valor de Retorno $v0, $v1 Variáveis locais $s0, $s1,, $s7 A pilha também é utilizada. OAC Linguagem de Máquina - Funções - 5 Instruções de Suporte para Funções (1/4) C M I P S... sum(a,b);... /* a,b:$s0,$s1 */ } int sum(int x, int y) { return x+y; } endereço # programa principal 1000 add $a0,$s0,$zero # x = a 1004 add $a1,$s1,$zero # y = b 1008 addi $ra,$zero,1016 #$ra=1016 1012 j sum #jump to sum 1016... 2000 sum: add $v0,$a0,$a1 # função sum: x+y 2004 jr $ra # new instruction OAC Linguagem de Máquina - Funções - 6

Instruções de Suporte para Funções (2/4) Instrução única para pular e salvar o endereço de retorno: jump and link (jal) Antes: 1008 addi $ra,$zero,1016 #$ra=1016 1012 j sum #go to sum Depois: 1008 jal sum # $ra=1016,go to sum Por que ter uma jal? Torne o caso comum rápido: funções são muito comuns. OAC Linguagem de Máquina - Funções - 7 Instruções de Suporte para Funções (3/4) Sintaxe de jal (jump and link) é a mesma de j (jump): jal label jal deveria na verdade ser chamada laj de link and jump : Passo 1 (link): Salva o endereço da próxima instrução em $ra (Por que a próxima instrução? Por que não a corrente?) Passo 2 (jump): Pule para o label dado OAC Linguagem de Máquina - Funções - 8

Instruções de Suporte para Funções (4/4) Sintaxe de jr (jump register): jr register Ao invés de prover um label para pular para, a instrução jr provê um registrador que contém um endereço para onde pular. Útil somente se nós sabemos o endereço exato para onde pular: raramente aplicável. Muito útil para chamadas de funções: jal guarda o endereço de retorno no registrador ($ra) (chamada de uma função) jr pula de volta para aquele endereço (retorno da função) OAC Linguagem de Máquina - Funções - 9 Funções Aninhadas (1/2) int sumsquare(int x, int y) { return mult(x,x)+ y; } Alguma coisa chamada sumsquare, que chama mult. Há um valor em $ra que sumsquare quer pular de volta, mas será sobrescrito pela chamada a mult. Precisa salvar o endereço de retorno de sumsquare antes de chamar mult. OAC Linguagem de Máquina - Funções - 10

Funções Aninhadas (2/2) Em geral, pode ser necessário salvar algum outro registrador além de $ra. Quando um programa C está rodando, existem 3 importantes áreas de memória que são alocadas: Static (alocação estática): Variáveis declaradas uma vez por programa, deixam de existir somente quando a execução termina. Heap (alocação dinâmica): Variáveis declaradas dinamicamente. Stack (pilha): Espaço a ser utilizado pela função durante sua execução; é aqui que podemos salvar os valores dos registradores. OAC Linguagem de Máquina - Funções - 11 Alocação de Memória em C Endereço $sp stack pointer Stack Heap Static Espaço para informações salvas pela função Espaço explicitamente criado e.g., malloc(); ponteiros C Variáveis declaradas uma vez por programa 0 Code OAC Linguagem de Máquina - Funções - 12 Programa

Usando a Pilha (1/2) Nós temos um registrador $sp que sempre aponta para o último espaço utilizado na pilha. Para utilizar a pilha: 1 o decrementamos o ponteiro $sp de 4 bytes 2 o preenchemos os 4 bytes da pilha com a informação. Então, como compilamos isto? int sumsquare(int x, int y) { return mult(x,x)+ y;} OAC Linguagem de Máquina - Funções - 13 Usando a Pilha (2/2) Compile manualmente sumsquare: (salva end. retorno e argumento de SumSquare) addi $sp,$sp,-8 # reserva espaço na pilha sw $ra, 4($sp) # salva reg. end. retorno sw $a1, 0($sp) # salvar argumento y (Transfere arg. de mult e chama função mult) add $a1,$a0,$zero # transfere arg.x de mult(x,x) jal mult # chama mult (restaura arg. De SumSquare e executa operação) lw $a1, 0($sp) # restaura arg. y add $v0,$v0,$a1 # mult()+y (restaura end. retorno de SumSquare e a pilha) lw $ra, 4($sp) # restaura end. retorno addi $sp,$sp,8 # restaura pilha jr $ra # retorna para prog. principal OAC Linguagem de Máquina - Funções - 14 Função SumSquare int sumsquare(int x, int y) { return mult(x,x)+ y;}