Escolar Documentos
Profissional Documentos
Cultura Documentos
Processadores
Grupo Major Geeks
Trabalho sobre processadores desenvolvido para aula de Organização de
computadores.
Diogo Antonino da Silva
Igor Schmidt
Rafael Souza Fona
Robson Gomes dos Santos
Rogério das Neves
Universidade Estácio Uniradial ‐ Jabaquara
Análise e Desenvolvimento de Sistema – 1° Semestre
27/09/2010
O que é um processador?
Processador é um circuito integrado que realiza cálculos e tomar decisões. Os circuitos integrados são circuitos
eletrônicos funcionais, constituídos por um conjunto de transistores, díodos, resistências e condensadores,
fabricados num mesmo processo, sobre uma substância comum semicondutora de silício que se designa
vulgarmente por chip. A baixo temos um projeto de circuito integrado.
Circuito integrado desenvolvido no DEL
Os processadores buscam e executam instruções existentes na memória. Um processador (também conhecido
como CPU ou unidade central de processamento) é uma máquina completa de computação embutida em um
único chip, apesar disso está longe de ser um computador completo. Para que possa interagir com o usuário
precisa de: memória, dispositivos de entrada/saída, um clock, controladores e conversores de sinais, entre outros.
Cada um desses circuitos de apoio interage de modo peculiar com os programas e, dessa forma, ajuda a moldar o
funcionamento do computador. Afinal nosso cérebro não vive sem um corpo.
Lógica básica de um processador
Um processador executa uma série de instruções de máquina que dizem a ele o que fazer. As três funções básicas
de um processador são:
• utilizando sua ALU (Unidade Lógico‐Aritmética), o processador pode executar operações matemáticas
como adição, subtração, multiplicação e divisão. Os processadores modernos contêm processadores de
ponto flutuante que podem executar operações extremamente sofisticadas com número grandes em
pontos flutuantes;
• um processador pode mover dados de um endereço de memória para outro;
• um processador pode tomar decisões e desviar para um outro conjunto de instruções baseado nestas
decisões.
O processador pode fazer coisas muito complicadas, mas as três atividades citadas acima são as suas principais
ações. O diagrama a seguir mostra um processador extremamente simples que é capaz de fazer estas três coisas:
2
Este processador simples possui:
• um barramento de endereços (pode ser de 8, 16, 32 ou 64 bits) que envia um endereço para a memória;
• um barramento de dados (pode ser de 8, 16, 32 ou 64 bits) que envia e recebe dados da memória;
• uma linha RD (Read ou Leitura) e WR (Write ou Escrita) que diz à memória se ela deve gravar ou ler o
conteúdo da posição de memória endereçada;
• um sinal de clock que fornece uma seqüência de pulsos de relógio para o processador;
• um sinal de reset que reinicia o contador do programa para zero (ou outro valor) e recomeça a execução
do programa.
FSB ‐ Front‐side bus
Barramento frontal (Front Side Bus ou FSB em inglês) é o barramento de transferência de dados que transporta
informação entre a processador e o northbridge da placa‐mãe. O northbridge também conhecido como memory
controller hub (MCH) é tradicionalmente um dos dois chips que constituem o chipset numa placa‐mãe de PC,
sendo o outro o southbridge. O southbridge também conhecido como I/O Controller Hub, é um chip que
implementa as capacidades mais "lentas" da placa‐mãe numa arquitetura de chipset northbridge/southbridge. O
southbridge pode ser geralmente diferenciado do northbridge por não estar diretamente conectado ao
processador.
Alguns computadores também possuem um barramento traseiro (ou backside bus) o qual conecta o processador à
memória cache interna. Este barramento e a memória cache associada a ela podem ser acessados muito mais
rapidamente do que a RAM do sistema através do barramento frontal.
A largura de banda ou throughput o valor máximo do barramento frontal é determinado pelo produto da largura
da via de dados, frequência de clock (ciclos por segundo) e a quantidade de transferências de dados realizadas por
ciclo do clock. Por exemplo, um FSB com largura de 32 bits (4 bytes) operando a uma frequência de 100 MHz e que
realize 4 transferências por ciclo, possui uma largura de banda de 1600 megabytes por segundo (MB/s).
A quantidade de transferências por ciclo de clock é dependente da tecnologia usada. Por exemplo, a GTL+ realiza
uma transferência/ciclo, a EV6 2 transferências/ciclo e a AGTL+ 4 transferências/ciclo. A Intel denomina a técnica
de 4 transferências por ciclo de Quad Pumping.
Deve ser observado que muitos fabricantes hoje em dia anunciam a capacidade do FSB em megatransfers por
segundo (MT/s), não na frequência do clock do FSB em megahertz (MHz). Isto se deve ao fato de que a frequência
real é determinada pela quantidade de transferências que podem ser realizadas a cada ciclo de clock, bem como
pela frequência do clock. Por exemplo, o processador possui um FSB de 200 MHz e realiza 4 transferências por
ciclo de clock, o FSB é dito como de 800 MT/s.
ORGANIZAÇÃO DO PROCESSADOR
Para entender a organização da CPU, devemos considerar as ações que ela deve executar:
Busca de instrução: a CPU lê uma instrução da memória.
Interpretação de instrução: a instrução é decodificada para determinar a ação requerida.
Busca de dados: a execução de uma instrução pode requerer efetuar uma operação aritmética ou lógica sobre os
dados.
Escrita de dados: os resultados da execução podem requerer escrever dados na memória ou em um módulo de
E/S.
Para executar essas ações, a CPU precisa armazenar alguns dados temporariamente. Ela deve manter a posição de
memória da última instrução, para saber onde obter a próxima instrução, e precisa também armazenar instruções
e dados temporariamente, enquanto uma instrução está sendo executada. Em outras palavras, a CPU necessita de
uma pequena memória interna.
A Figura 1 é uma visão simplificada de uma CPU, que indica também sua conexão com o resto do sistema, por
meio do barramento de sistema. Uma interface semelhante é necessária para qualquer das estruturas de
interconexão descritas na aula de Barramentos. Os componentes mais importantes da CPU são a unidade lógica e
aritmética ou ULA e a unidade de controle ou UC. A ULA efetua o processamento de dados. A UC controla não só a
3
transferência de dados e instruções para dentro e para fora da CPU, como também a operação da ULA. A figura
mostra, além desses componentes, uma memória interna mínima, constituída de um conjunto de posições de
armazenamento denominadas registradores.
A Figura 2 é uma visão um pouco mais detalhada da CPU. São indicados os caminhos de transferência de dados e
de sinais de controle, o que inclui um elemento denominado barramento interno da CPU. Esse elemento é
necessário pra transferir dados entre os vários registradores e a ULA, uma vez que esta última apenas opera sobre
dados localizados na memória interna da CPU. A figura mostra ainda os elementos básicos típicos de uma ULA.
Note a semelhança entre a estrutura interna do computador como um todo e a estrutura interna da CPU. Em
ambos os casos, existe uma pequena coleção de elementos importantes, conectados por caminhos de dados.
ORGANIZAÇÃO DE REGISTRADORES
Um sistema de computação emprega uma hierarquia de memória. Nos níveis mais altos da hierarquia, a memória
é mais rápida, menor e mais cara (custo por bit). Dentro da CPU, existe um conjunto de registradores que funciona
como um nível da hierarquia de memória acima da memória principal e da memória cache. Os registradores da
CPU têm duas funções:
4
• Registradores visíveis para o usuário: possibilitam ao programador de linguagem de montagem
ou de máquina minimizar referências à memória, pela otimização do uso de registradores.
• Registradores de controle e de estado: são usados pela unidade de controle para controlar a
operação da CPU e por programas privilegiados do sistema operacional para controlar a execução de
programas.
Não existe uma separação clara entre os registradores dessas duas categorias. Por exemplo, em algumas
máquinas, o contador de programa é visível para o usuário (no VAX), mas em muitas outras não é.
Registradores Visíveis para o Usuário
Um registrador visível para o usuário é aquele que pode ser referenciado pela linguagem de máquina que a CPU
executa. Esses registradores podem ser classificados nas seguintes categorias:
• Registradores de propósito geral
• Registradores de dados
• Registradores de endereço
• Registradores de códigos de operação
Registradores de propósito geral
Podem ser usados pelo programador para uma variedade de funções. Algumas vezes, seu uso no conjunto de
instruções é ortogonal ao código de operação, ou seja, qualquer registrador de propósito geral pode conter um
operando para qualquer código de operação. Esse é o real significado de propósito geral. Entretanto, existem
freqüentemente algumas restrições. Por exemplo, podem existir registradores dedicados para operações sobre
números de ponto flutuante e para operações sobre a pilha.
Em alguns casos, os registradores de propósito geral podem ser usados para endereçamento. Em outros, existe
uma separação clara ou parcial entre registradores de dados e registradores de endereços. Registradores de
dados podem ser usados apenas para conter dados e não podem ser empregados no cálculo de endereços de
operados. Registradores de endereço podem também ser empregados até certo ponto como registradores de
propósito geral ou podem ser dedicados para um determinado modo de endereçamento. Alguns exemplos são:
• Registradores de segmento: em uma máquina com endereçamento segmentado, um
registrador de segmento é usado para conter o endereço da base de um segmento. Podem existir
múltiplos registradores de segmento: por exemplo, um para o sistema operacional e um para o processo
corrente.
• Registradores de índices: são usados para endereçamento indexado, possivelmente com
auto‐indexação.
• Apontador de topo de pilha: se houver endereçamento de operandos na pilha visível para o
usuário, então tipicamente a pilha será alocada na memória e existirá um registrador dedicado que
aponta para o topo da pilha. Isso possibilita um endereçamento implícito, ou seja, as instruções de
empilhar e desempilhar não requerem um operando explícito.
O projeto do conjunto de registradores envolve diversas questões. Uma questão importante é decidir se os
registradores serão de propósito geral ou se terão uso específico. Com o uso de registradores especializados, o
tipo de registrador referenciado como operando de uma instrução geralmente é implícito, sendo determinado
pelo código de operação. O campo de operando apenas identifica um registrador de um conjunto de registradores
especializados, economizando, portanto, alguns bits de instrução. Por outro lado, essa especialização limita a
flexibilidade de programação. Embora não exista melhor solução, para essa questão de projeto, a tendência atual
é usar registradores especializados.
Outra questão de projeto é o número de registradores a serem disponibilizados, seja de propósito geral seja para
registradores de dados e de endereços. Isso também afeta o projeto do conjunto de instruções, uma vez que um
número maior de registradores requer maior número de bits para especificar um operando. O número adequado
parece ser entre 8 e 32 registradores. Um pequeno número de registradores resulta em mais referências à
memória, mas o uso de um número muito grande de registradores, não reduz substancialmente o número de
referências à memória. Uma abordagem diferente é adotada na arquitetura RISC que obtém vantagem com a
utilização de centenas de registradores.
5
Finalmente, existe a questão do tamanho do registrador. Registradores de endereço devem ter tamanho suficiente
para conter o maior endereço usado no sistema. Registradores de dados devem ser capazes de conter valores da
maioria dos tipos de dados. Algumas máquinas permitem o uso de dois registradores contíguos para conter valores
de tamanho duplo.
Uma última categoria de registradores que são visíveis para o usuário, pelo menos parcialmente, contém códigos
de condição (também conhecidos como flags). Códigos de condição são bits atualizados pelo hardware da CPU
como resultados de operações. Por exemplo, em uma operação aritmética, esses bits podem indicar se o resultado
produzido é positivo, negativo, zero ou overflow. Além de o próprio resultado da operação ser armazenado em um
registrador ou na memória, são também atualizados os registradores que contêm códigos de condição. Esses
códigos podem ser testados em seguida, por uma operação de desvio condicional.
Normalmente, os bits de código de condição fazem parte de um registrador de controle, embora algumas vezes
possam ser organizados em mais de um registrador. As instruções de máquina geralmente possibilitam ler esses
bits, por meio de uma referencia implícita, mas não permitem que eles sejam alterados pelo programador.
Registradores de Controle e de Estado
Vários registradores da CPU são empregados para controlar a operação da CPU. Na maioria das máquinas, eles não
são visíveis para o usuário. Alguns deles podem ser visíveis para instruções de máquinas executadas em um modo
de controle ou de sistema operacional.
É claro que máquinas diferentes têm organizações de registradores diferentes e usam uma terminologia distinta.
Quatro registradores são essenciais para a execução de instruções:
• Contador de programa (PC): contém o endereço da instrução a ser buscada.
• Registrador de instrução (IR): contém a última instrução buscada.
• Registrador de endereçamento à memória (MAR): contém o endereço de uma posição de
memória.
• Registrador de armazenamento temporário de dados (MBR): contém uma palavra de
dados a ser escrita na memória ou a palavra lida mais recentemente.
Tipicamente, o contador de programa é atualizado pela CPU depois de cada busca de instrução, de modo que ele
sempre indique a próxima instrução a ser executada. Uma instrução de desvio ou de salto também modifica o
conteúdo do contador de programa. A instrução buscada é carregada no IR, onde o código de operação e as
referências a operando são analisadas. A troca de dados com a memória é feita usando o MAR e o MBR. Em um
sistema com barramento, o MAR é conectado diretamente ao barramento de endereço e o MBR, ao barramento
de dados. Registradores visíveis ao usuário, por sua vez, trocam dados com o MBR.
Os quatro registradores relacionados são usados para transferência de dados entre a CPU e a memória. Dentro da
CPU, os dados devem ser apresentados à ULA para processamento. A ULA pode ter acesso direto ao MBR e aos
registradores visíveis para o usuário. Alternativamente, podem existir registradores adicionais para
armazenamento temporário de dados, que servem como registradores de entrada e de saída da ULA e trocam
dados com o MBR e os registradores visíveis para o usuário.
Todo o projeto da CPU inclui um registrador, ou conjunto de registradores, freqüentemente conhecido como
palavra de estado de programa (PSW), que contém informação de estado. Tipicamente, o registrador PSW contém
códigos de condição e outras informações de estado, incluindo os seguintes campos:
• Sinal: contém o bit de sinal do resultado da última operação aritmética.
• Zero: atualizado com o valor 1 se o resultado da última operação for 0.
• ‘Vai‐um’: atualizado com o valor 1 se uma operação resultar em um ‘vai‐um’ para fora do
bit de ordem superior (adição) ou em um ‘vem‐um’ para o bit de ordem superior (subtração). É usado por
operações aritméticas de múltiplas palavras.
• Igual: atualizado com valor 1 se uma comparação lógica resultar em igualdade.
• Overflow: usado para indicar overflow aritmético.
• Habilitar/desabilitar interrupção: usada para habilitar ou desabilitar interrupções.
• Supervisor: indica se a CPU está executando em modo supervisor ou em modo de usuário.
Certas instruções privilegiadas apenas podem ser executadas no modo supervisor, assim como certas
áreas de memória apenas podem ser acessadas no modo supervisor.
O projeto de uma CPU pode também incluir outros registradores relacionados ao estado e ao controle. Além do
registrador PSW, deve existir um registrador que aponta para um bloco de memória que contém informação de
6
estado adicional (por exemplo, blocos de controle de processo). Em máquinas que usam vetor de interrupções,
pode existir um registrador de vetor de interrupções. Se for usada uma pilha para implementar certas funções (por
exemplo, chamada de sub‐rotina), será necessário um registrador indicador de topo de pilha. EM um sistema com
memória virtual, um registrador é usado para apontador para a tabela de páginas. Finalmente, podem também ser
usados registradores para o controle de operações de E/S.
Diversos fatores devem ser considerados no projeto da organização de registradores de controle e de estado. Uma
questão‐chave é o suporte para o sistema operacional. Certos tipos de informação de controle são úteis
especificamente para o sistema operacional. Se o projetista da CPU tem entendimento funcional sobre o sistema
operacional a ser usado, a organização dos registradores pode ser feita razoavelmente de acordo com o sistema
operacional.
Outra decisão de projeto importante é a alocação de informação de controle entre registradores e memória. É
comum reservar as primeiras (de endereço mais baixo) centenas ou milhares de palavras da memória para
armazenar informações de controle. O projetista deve decidir que parte das informações de controle deve ser
mantida em registradores e que parte deve ficar na memória, levando‐se em conta o custo e a velocidade de
acesso.
CICLO DE INSTRUÇÃO
Conforme podemos ver na figura 4, o ciclo de instrução inclui os seguintes subciclos:
• Busca: lê a próxima instrução da memória para a CPU.
• Execução: interpreta o código de operação e efetua a operação indicada.
• Interrupção: se as interrupções estão habilitadas e ocorreu uma interrupção, salva o estado
do processo atual e processa a interrupção.
Fluxo de Dados
A seqüência exata de eventos durante um ciclo de instrução depende do projeto da CPU. É possível, entretanto,
indicar o que pode acontecer em termos gerais. Suponha que a CPU empregue um registrador de endereço de
memória (MAR), um registrador de armazenamento temporário de dados (MBR), um contador de programa (PC) e
um registrador de instrução (IR).
Durante o ciclo de busca, uma instrução é lida a partir da memória. A figura 7 mostra o fluxo de dados durante
esse ciclo. O contador de programa contém o endereço da próxima instrução a ser buscada. Esse endereço é
movido para o MAR e colocado no barramento de endereço. A unidade de controle requisita uma leitura na
memória, e o resultado é colocado no barramento de dados e copiado no MBR e então movido para o IR.
Enquanto isso, o contador de programa é incrementado de 1, para preparar a próxima busca de instrução.
7
Figura 7: Fluxo de dados no ciclo de busca
Uma vez que o ciclo de busca termina, a unidade de controle examina o conteúdo do IR para determinar se a
instrução especifica algum operando com endereçamento indireto. Se isso ocorrer, um ciclo indireto é efetuado.
Como mostra a figura 8, esse ciclo é bastante simples. Os N bits mais à direita do MBR, que contém a referência ao
endereço, são transferidos para o MAR. Então, a unidade de controle requisita uma leitura de memória, para
transferir o endereço do operando desejado para o MBR.
O ciclo de busca e o ciclo indireto são simples e previsíveis. O ciclo de execução pode ter muitas formas,
dependendo de qual das várias instruções de máquina está contida no IR. Ele pode envolver transferência de
dados entre registradores, leitura e escrita na memória ou em dispositivos de E/S e invocação da ULA.
Assim como o ciclo de busca e o ciclo indireto, o ciclo de interrupção é simples e previsível (Figura 9). O conteúdo
corrente do PC deve ser salvo, para que a CPU possa retomar sua atividade normal depois de processar a
interrupção. Assim, o conteúdo do PC é transferido para o MBR, para depois ser escrito na memória. A posição
especial da memória reservada para esse propósito é carregada no MAR pela unidade de controle. Ela pode ser,
por exemplo, a posição apontada pelo registrador de topo de pilha. O PC é carregado com o endereço da rotina de
interrupção. Como resultado, o próximo ciclo de instrução começará buscando a instrução apropriada.
8
PIPELINE DE INSTRUÇÕES
À medida que os sistemas de computação evoluem, é possível obter maior desempenho com o uso de tecnologias
mais avançadas, tais como um conjunto de circuitos mais rápidos. Além disso, uma melhor organização da CPU
pode também melhorar o desempenho. Alguns exemplos disso foram vistos anteriormente, tais como o uso de
múltiplos registradores no lugar de um único acumulador e o uso de memória cache. Outra abordagem comum na
organização da CPU é o uso de um pipeline de instruções.
Uma pipeline de instruções é semelhante a uma linha de montagem de uma industria. Uma linha de montagem
tira proveito do fato de que um produto passa por vários estágios de produção: produtos em vários estágios do
processo de produção podem ser trabalhados simultaneamente. Em uma pipeline de instruções, novas entradas
são aceitas em uma extremidade, antes que entradas aceitas previamente apareçam como saídas na outra
extremidade.
Clock
Quando vamos comprar um processador a primeira coisa que perguntamos é: qual sua freqüência de operação?
(medida em Megahertz ‐ MHz ‐ ou milhões de ciclos por segundo, também chamada de clock). Acontece que nem
sempre um processador com uma velocidade de operação mais alta é mais rápido do que outro que opera com
uma freqüência um pouco mais baixa. A freqüência de operação de um processador indica apenas quantos ciclos
de processamentos são realizados por segundo, o que cada processador é capaz de fazer em cada ciclo é outra
história.
Imagine um processador 80486 de 100 MHz ao lado de um Pentium também de 100 MHz. Apesar da freqüência de
operação ser a mesma, o 80486 perderia em desempenho. O Pentium seria pelo menos 2 vezes mais rápido devido
às diferenças da arquitetura interna que existe entre estes dois processadores.
Cache
Enquanto os processadores tornavam‐se mais rápidos a memória principal, sua principal ferramenta de trabalho,
pouco evoluía em performance.
Durante o desenvolvimento do processador 80386, percebeu‐se que a velocidade de trabalho da memória
principal não seria capaz de acompanhar a velocidade do processador. Isto faria com que ele tivesse que ficar
“esperando” os dados serem liberados pela memória principal para poder concluir suas tarefas, ocasionando uma
enorme perda de desempenho.
Para solucionar este problema começou a ser usada a memória cache, um tipo ultra‐rápido de memória que serve
para armazenar os dados usados com mais freqüência pelo processador evitando que ele tenha que recorrer
diretamente à memória principal
São usados dois tipos de memória cache: o cache primário, ou cache L1, e o cache secundário, ou cache L2. O
cache primário (cache L1) é embutido no próprio processador e é rápido o bastante para acompanhá‐lo em
velocidade. Como este tipo de memória é extremamente caro é utilizada apenas uma pequena quantidade.
O cache secundário, por ser mais barato, é usado em uma quantidade maior. Dependendo do processador, o
cache L2 pode ser embutido no próprio processador ou ser externo ao processador. Atualmente a maioria dos
processadores trazem o cache L2 integrado, não permitindo qualquer modificação.
9
Coprocessadores
Nos processadores mais antigos como o 486 e o 386 era comum a utilização de um processador auxiliar, as
operações realizadas pelo coprocessador podem ser de ponto flutuante aritmético, computação gráfica,
processamento de sinais, processamento de cadeias de caracteres ou criptografia. Ao assumir tarefas que
consomem tempo de processamento, os coprocessadores podem acelerar o desempenho geral de um sistema.
Abaixo uma foto de um processador i386 trabalhando em conjunto com um coprocessador i387.
A partir do 486DX os coprocessadores foram integrados aos processadores.
Processamento de Interrupção
O processamento de interrupções dentro de um processador visa oferecer suporte para o sistema operacional. O
uso de interrupções permite que um programa de aplicação seja suspenso, para que uma variedade de condições
de interrupção possa ser atendida, sendo a execução do programa retomada mais tarde.
Tecnologias usadas nos processadores
MMX
O conjunto de instruções MMX melhorou o desempenho do processador em aplicações multimídia e em
processamento de imagens. Nestas aplicações algumas rotinas podem ser executadas até 400% mais rápido com o
uso das instruções MMX. O ganho de performance porém não é automático, sendo necessário que o programa
seja otimizado para utilizar as novas instruções, caso contrário não haverá nenhum ganho de performance.
Curiosidade: É possível instalar o MMX na maioria das placas‐mãe soquete 7, para Pentium, desde que ela suporte
a voltagem de 2.9 volts usada pelo MMX. O Pentium trabalha com uma voltagem de 3,3 volts.
As novas instruções SSE
Basicamente as instruções SSE diferem das instruções 3D‐Now!, dos processadores AMD, devido à forma como são
executadas. A vantagem é que o Pentium III é capaz de processar, simultaneamente, as instruções normais e as
instruções SSE. Com as instruções 3D‐Now!, o programa tem que escolher, a todo momento, entre utilizar uma das
instruções padrão ou uma das instruções 3D‐Now!.
O Pentium III é capaz de usar os dois tipos de instruções, simultaneamente, mantendo o coprocessador aritmético
ocupado durante mais tempo, o que resulta em ganho de performance.
Hyper Pipelined Technology
Esta é a característica mais marcante do Pentium 4. Pipeline é um recurso que divide o processador em vários
estágios, que trabalham simultaneamente, dividido o trabalho de processar as instruções. A partir do 486 todos os
processadores utilizam pipeline. O Pentium III possui pipeline de 10 estágios, o Athlon possui pipeline de 11
estágios e o Pentium 4 possui pipeline de 20 estágios daí o nome Hyper Pipelined.
O uso de pipeline permite que o processador possa processar várias instruções ao mesmo tempo, sendo que cada
estágio cuida de uma fração do processamento. Quanto mais estágios, menor será o processamento executado em
10
cada um. No caso do Pentium 4 cada estágio do pipeline processa apenas metade do processado por um estágio
do Pentium III, fazendo com que, teoricamente, o resultado final seja o mesmo já que existe o dobro de estágios.
O uso de mais estágios permite que o processador opere com freqüências bem mais altas, já que cada estágio
executa menos processamento. O problema é que os processadores atuais executam várias instruções
simultaneamente, enquanto os programas aplicativos são uma seqüência de instruções. Se as instruções seguintes
não dependem do resultado da primeira, o processador não terá nenhum problema para resolvê‐las rapidamente.
Porém, caso ocorra uma tomada de decisão, onde o processador precisa primeiro resolver uma instrução para
saber qual caminho deve tomar, entra em cena o recurso de Execução Especulativa onde, enquanto é resolvida a
primeira instrução, o processador escolhe um dos caminhos possíveis para ir “adiantando o serviço” enquanto não
sabe qual caminho deverá seguir. Se, ao saber do resultado da primeira instrução, tiver tomado o caminho certo
simplesmente continuará. Por outro lado, se o processador tiver “adivinhado errado” então terá que jogar fora
todo o trabalho já feito e tomar o outro caminho perdendo muito tempo.
O Pentium 4 perde nesse quesito pois demora o dobro do tempo para processar a primeira instrução, que é
processada em 20 estágios contra 10 estágios do Pentium III. Isto significa que, em cada tomada de decisão errada
são perdidos 20 ciclos de processamento. Assim, a princípio, o Pentium 4 é mais lento que um Pentium III do
mesmo clock. Em compensação ele pode operar com freqüências mais altas.
Todas as outras alterações feitas pela Intel servem como paliativos para diminuir esta perda de desempenho
trazida pelo maior número de estágios de pipeline. Devido a isto, a Intel lançou os modelos de 1,4 GHz e 1,5 GHz
de clock, pulando as versões de 1,1 GHz e 1,2 GHz de clock. Caso fosse lançado um Pentium 4 de 1,1 GHz de clock
ele perderia para um Pentium III de 1 GHz em quase todas as aplicações.
Além da perda de desempenho, outro efeito do uso de mais estágios de pipeline é o de tornar o processador
maior, mais complexo e mais caro de ser produzir. O Pentium 4 tem quase o dobro de área de um processador
Athlon.
Execution Trace Cache
O uso do cache L1 no Pentium 4 é, no mínimo, inovador. O Pentium III tem 32 KB de cache L1 dividido em 2 blocos
de 16 KB cada, um para instruções e outro para dados. O Athlon tem 128 KB de cache L1, também dividido em dois
blocos. O Pentium 4 tem apenas 8 KB de cache L1 para dados e só. Porém, ele traz duas inovações que
compensam esta aparente deficiência. A primeira é que, graças ao tamanho reduzido o cache de dados tem um
tempo de latência (tempo que demora para reagir) menor, ou seja, é mais rápido que o cache L1 encontrado no
Pentium III e no Athlon.
A segunda inovação é que o cache de instruções foi substituído pelo Execution Trace Cache que, ao invés de
armazenar instruções, armazena diretamente uOPs, que são as instruções já decodificadas e prontas para serem
processadas. Isto garante que o cache tenha apenas um ciclo de latência, ou seja, o processador não perde tempo
algum ao utilizar um dado armazenado no Execution Trace Cache, ao contrário do que acontece no Pentium III
onde perde‐se dois ciclos em cada leitura.
Uma explicação resumida sobre o que é um uOP: os processadores para PC usam o conjunto de instruções x86
composto por 184 instruções mas, internamente, eles só são capazes de processar instruções simples. Existe um
circuito decodificador que converte as instruções complexas, usadas pelos programas, nas instruções simples,
entendidas pelo processador. Uma instrução complexa pode ser quebrada em várias instruções simples. No
Pentium 4 cada instrução simples é chamada de uOP. No Athlon cada conjunto de duas instruções simples ganha o
nome de macro‐ops.
Rapid Execution Engine
Todo processador atual é dividido em dois componentes básicos: as unidades de execução de inteiros e as
unidades de ponto flutuante. A parte que processa as instruções envolvendo números inteiros é responsável pela
maior parte das instruções e pelo desempenho do processador nos aplicativos do dia a dia. As unidades de ponto
flutuante, que compõe o que chamamos de coprocessador aritmético, são responsáveis pelo processamento das
instruções envolvendo valores complexos usados por jogos e aplicativos gráficos.
A Rapid Execution Engine do Pentium 4 consiste num reforço nas unidades de inteiros do processador. O Pentium
4 possui um total de 5 unidades de processamento de inteiros, duas que processam as instruções mais simples,
duas encarregadas de ler e gravar dados e uma encarregada de decodificar e processar as instruções complexas
que, embora em menor quantidade, são as instruções que tomam mais tempo do processador.
No Pentium 4 as encarregadas das instruções simples e as encarregadas das leituras e gravações são muito
potentes. Porém, a de instruções complexas não teve a mesma evolução e, por usar 20 estágios de pipeline,
tornou‐se mais lenta que a do Pentium III. Temos então que as instruções simples são rapidamente processadas
mas as instruções complexas ficam represadas causando perda de desempenho.
No coprocessador aritmético o cenário é ainda mais complicado. Apesar das unidades de execução terem perdido
desempenho devido ao pipeline de 20 estágios, não houve nenhum avanço para equilibrar a balança como feito
11
nas unidades de inteiros. Ao contrário, o coprocessador aritmético encolheu tendo sido retiradas duas das
unidades de execução, uma que processava instruções MMX e uma que processava instruções SSE.
Ao invés de evoluir o coprocessador aritmético do Pentium 4 tornou‐se mais frágil que o do Pentium III trazendo
um cenário, no mínimo, curioso. Enquanto na época do Pentium II, e do AMD K6, a AMD competia com um
processador que, apesar de possuir um bom desempenho em aplicativos de escritório, era muito fraco nos jogos e
aplicativos gráficos agora temos um cenário semelhante porém com os lados invertidos: a Intel tem com um
processador que é potente em inteiros mas fraco em ponto flutuante.
SSE 2
A solução da Intel para tentar diminuir a deficiência do coprocessador aritmético foi a mesma que a AMD usou na
época do K6‐2. A AMD usou as instruções 3D‐Now! para melhorar seu desempenho nos jogos que fossem
otimizados. A Intel incorporpou novas instruções ao Pentium 4, chamadas de SSE 2, para melhorar seu
desempenho nos jogos e em aplicativos gráficos que venham a ser otimizados.
Tipos de processadores
Processador 16‐Bit x 32‐Bit x 64‐Bit
Quando nos referimos a processadores de 16 bits, 32 bits ou 64 bits estamos falando dos bits internos do chip ‐ em
poucas palavras, isso representa a quantidade de dados e instruções que o processador consegue trabalhar por
vez. Por exemplo, com 16 bits um processador pode manipular um número de valor até 65.535. Se certo número
tem valor 100.000, ele terá que fazer a operação em duas partes. No entanto, se um chip trabalha a 32 bits, ele
pode manipular números de valor até 4.294.967.296 em uma única operação.
Para calcular esse limite, basta fazer 2 elevado à quantidade de bits internos do processador. Então, qual o limite
de um processador de 64 bits? Vamos à conta:
2^64 = 1.84467441 × 10^19
Agora, suponha que você esteja utilizando um editor de textos. É improvável que esse programa chegue a utilizar
valores grandes em suas operações. Neste caso, qual a diferença entre utilizar um processador de 32 bits ou 64
bits, sendo que o primeiro será suficiente? Como o editor utiliza valores suportáveis tanto pelos chips de 32 bits
quanto pelos de 64 bits, as instruções relacionadas serão processadas ao mesmo tempo (considerando que ambos
os chips tenham o mesmo clock).
Por outro lado, aplicações em 3D ou programas como AutoCad requerem boa capacidade para cálculo e aí um
processador de 64 bits pode fazer diferença. Suponha que determinadas operações utilizem valores superiores a
4.294.967.296. Um processador de 32 bits terá que realizar cada etapa em duas vezes ou mais, dependendo do
valor usado no cálculo. Todavia, um processador de 64 bits fará esse trabalho uma única vez em cada operação.
No entanto, há outros fatores a serem considerados. Um deles é o sistema operacional (SO). O funcionamento do
computador está diretamente ligado à relação entre o sistema operacional e o hardware como um todo. O SO é
desenvolvido de forma a aproveitar o máximo de recursos da plataforma para o qual é destinado. Assim, o
Windows XP ou uma distribuição Linux com um kernel desenvolvido antes do surgimento de processadores de 64
bits são preparados para trabalhar a 32 bits, mas não a 64 bits.
Processadores RISC X Processadores CISC
Sempre houve uma grande polêmica em torno de qual dessas plataformas é melhor. Na verdade, você já deve ter ouvido muito
boatos como “Os Macs são mais rápidos por que tem chips RISC” ou algo do gênero. O objetivo deste artigo é falar um pouco
sobre as duas plataformas e como elas coexistem atualmente.
CISC (Complex Instruction Set Computer, ou "computador com um conjunto complexo de instruções"), é capaz de
executar várias centenas de instruções complexas diferentes, sendo extremamente versátil. Exemplos de
processadores CISC são o 386 e o 486.
RISC (Reduced Instruction Set Computer, ou "computador com um conjunto reduzido de instruções"). Ao contrário
dos complexos CISC, os processadores RISC são capazes de executar apenas algumas poucas instruções simples.
Justamente por isso, os chips baseados nesta arquitetura são mais simples e muito mais baratos. Outra vantagem
dos processadores RISC, é que, por terem um menor número de circuitos internos, podem trabalhar a freqüências
mais altas. Um exemplo são os processadores Alpha, que em 97 já operavam a 600 MHz.
12
Pode parecer estranho que um chip que é capaz de executar algumas poucas instruções, possa ser considerado
por muitos, mais rápido do que outro que executa centenas delas, seria como comparar um professor de
matemática com alguém que sabe apenas as quatro operações. Mas o que acontece, é que um processador RISC é
capaz de executar tais instruções muito mais rapidamente. A idéia principal, é que apesar de um processador CISC
ser capaz de executar centenas de instruções diferentes, apenas algumas são usadas freqüentemente. Poderíamos
então criar um processador otimizado para executar apenas estas instruções simples que são usadas mais
freqüentemente. Em conjunto com um software adequado, este processador seria capaz de desempenhar quase
todas as funções de um processador CISC, acabando por compensar suas limitações com uma maior velocidade de
processamento.
É indiscutível, porém, que em instruções complexas os processadores CISC saem‐se melhor.
Apesar de por questões de Marketing, muitos fabricantes ainda venderem seus chips, como sendo "Processadores
RISC", não existe praticamente nenhum processador atualmente que siga estritamente uma das duas filosofias.
Tanto processadores da família x86, como o Pentium II, Pentium III e AMD Athlon, quanto processadores
supostamente RISC, como o MIPS R10000 e o HP PA‐8000, ou mesmo o G4, utilizado nos Macintoshs misturam
características das duas arquiteturas, por simples questão de desempenho.
Examinando de um ponto de vista um pouco mais prático, a vantagem de uma arquitetura CISC é que já temos
muitas das instruções guardadas no próprio processador, o que facilita o trabalho dos programadores, que já
dispõe de praticamente todas as instruções que serão usadas em seus programas. Isso é muito importante para
nós de ADS!
O conjunto básico de instruções usadas em micros PC é chamado de conjunto x86. Este conjunto é composto por
um total de 187 instruções, que são as utilizadas por todos os programas. Além deste conjunto principal, alguns
processadores trazem também instruções alternativas, que permitem aos programas executar algumas tarefas
mais rapidamente do que seria possível usando as instruções x86 padrão. Alguns exemplos de conjuntos
alternativos de instruções são o MMX (usado a partir do Pentium MMX), o 3D‐NOW! (usado pelos processadores
da AMD, a partir do K6‐2), e o SSE (suportado pelo Pentium III).
Processadores ARM
Um processador mais simples seria mais indicado. Descomplicados para programar, de tamanho reduzido e
consumindo pouca energia, os processadores ARM foram criados em 1983 e, de lá para cá, alcançaram uma fatia
expressiva de mercado: 90% de todos os dispositivos embarcados e mais de 98% de todos os celulares vendidos no
mundo usam algum modelo ARM. Nessa conta entra um sem‐número de dispositivos inteligentes, que vão de
relógios, televisores e roteadores domésticos a smartphones sofisticados como o iPhone e o Palm Pre e alguns
modelos de netbooks.
Não há apenas um processador ARM. A linha é composta por dezenas de modelos de processadores, cada um com
uma aplicação e recursos específicos, divididos em 14 famílias. O projeto mais recente, batizado de Cortex A9, é
destinado a netbooks e promete ser mais poderoso do que o Atom, da Intel.
A tecnologia ARM de processadores é projetada e desenvolvida pela ARM Holdings – que, todavia, não possui
nenhuma fábrica. Em vez disso, licencia o projeto a outras indústrias que queiram fabricar versões dos chips.
Dentre os licenciados da ARM Holdings estão, além da Broadcom, empresas como Samsung, Freescale, LG,
Phillips/NXP, Sharp, Yamaha e Texas Instruments. Mesmo a Intel, através de sua subsidiária DEC, fabrica suas
próprias versões licenciadas.
Um fato curioso sobre os processadores ARM é que não há versão do Windows para eles, a não ser o Windows
Mobile, cujo único ponto em comum com seu “irmão” para PCs é o nome. Todavia, há inúmeras versões de Unix e
Linux para ele, entre elas o popular Ubuntu, o Android, o WebOS, sistema operacional do Palm Pre, e o iPhone OS.
GPU
A unidade de processamento gráfico ou GPU (por vezes chamado unidade de processamento visual ou VPU) é um
microprocessador especializado que alivia e acelera renderizações 3D ou 2D de gráficos do microprocessador. Ela é
usada em sistemas embarcados, celulares, computadores pessoais, workstations, e consoles de jogos. GPUs
modernas são muito eficientes na manipulação de computação gráfica, e sua estrutura paralela altamente torna
13
mais eficaz do que o propósito geral CPUs para uma série de complexos algoritmos. Em um computador pessoal,
uma GPU pode estar presente em uma placa de vídeo, ou pode ser na placa‐mãe. Mais de 90% dos novos desktop
e notebook usam GPUs integradas, que geralmente são inferiores as placas de vídeo dedicadas.
Consoles
Playstation 3 – Terá o mais poderoso processador. Com o nome de Cell, o chip foi desenvolvido a partir de uma
parceria entre IBM, Sony e Toshiba e trata‐se de um processador multicore (núcleos múltiplos) com chip Power de
64 bits, integrados a oito núcleos de 128 bits especializados, em uma tecnologia chamada SPE (Máquinas de
Processamento Cooperativo, em português). Com isso, mesmo funcionando tecnicamente a 3,2 GHz, o Cell pode
realizar diversas operações simultâneas, o que garante maior performance gráfica e sonora na hora de rodar os
jogos. O processador gráfico é o NVIDIA G70, com clock de 550 MHz.
Wii – O “cérebro” do console também foi desenvolvido pela IBM e se chama PowerPC Broadway. Em relação aos
rivais, apresenta o menor poder de processamento, funcionando a uma velocidade de 729MHz, em integração
com uma memória Flash de 512 MB e seis unidades de execução. A menor potência do chip é compensada com
uma outra estratégia da Nintendo: a configuração do Broadway permite um console mais compacto, barato e
econômico, permitindo que ele fique conectado à Internet 24 horas por dia, em modo de “hibernação”. O porém
disso tudo é que nos jogos que ganharem versões para os três videogames e que exijam maior performance do
harware, certamente o Wii sairá perdendo. O processador gráfico é o Hollywood da ATI com clock de 249 MHz.
14
Xbox 360 – A IBM também marca presença no console da Microsoft, com um chip IBM Power PC, que conta com
três poderosos processadores simétricos de 3,2 GHz cada, com duas execuções simultâneas por núcleo. No ranking
de rapidez de processamento, o Xbox 360 fica em segundo lugar e oferece um suporte competente para executar
games mais pesados. O processador gráfico é o ATI com clock de 500 MHz
NVIDIA
(grafada antes como nVidia) é uma empresa multinacional com sede em Santa Clara (Califórnia) que fabrica peças
de computador, e é mais popularmente conhecida por sua série de placas de vídeo GeForce
Radeon
É a marca de aceleradores gráficos 3D criada pela ATI Technologies em 2000 e sucessora da sua família Rage.
Podem ser separados em quatro diferentes grupos, que podem ser diferenciados pela versão Direct3D que
implementam. Distinções mais específicas podem ser feitas quanto aos recursos, quantidade de memória, e
freqüência de processamento e memória.
Sites consultados:
http://www.hsw.uol.com.br/
http://www.guiadohardware.net
http://pt.wikipedia.org
http://www.geek.com.br
http://www.infowester.com
http://www.arm.com/products/processors/index.php
15