|
Teoria de microprocessadores Autor: Laércio Vasconcelos |
|
Copyright (C) |
Este componente é o principal responsável pelo desempenho de um PC. Exemplos de processadores usados nos PCs são o Pentium 4, Athlon, Pentium III e Duron, além de outros, é claro. Todos os processadores usados nos PCs são descendentes do 8086, o primeiro processador de 16 bits lançado pela Intel, no final dos anos 70. Na discussão que faremos a seguir, encontraremos diversos termos técnicos relacionados com os processadores, por exemplo:
Barramento de dados
Barramento de endereços
Acesso à memória
Acesso a entrada e saída
Para facilitar a compreensão desses termos, apresentaremos aqui uma descrição simplificada de um processador. Esta descrição não irá reproduzir diretamente as características dos processadores usados nos PCs, mas dará ao leitor, o embasamento necessário para entendê-los.
Um processador é um chip que contém o que chamamos de Unidade Central de Processamento (em inglês, Central Processing Unit, ou CPU). É responsável por buscar e executar instruções existentes na memória. Essas instruções são o que chamamos de “linguagem de máquina”. São comandos muito simples, como operações aritméticas e lógicas, leituras, gravações, comparações e movimentações de dados. Essas instruções simples, quando agrupadas, formam o que chamamos de programas.
Um processador precisa realizar operações de leitura da memória. Nessas leituras o processador recebe as instruções a serem executadas e os dados a serem processados. Também é preciso realizar gravações de dados na memória, para guardar os resultados intermediários e finais do processamento.
Não basta ser capaz de realizar leituras e gravações na memória. Um processador também precisa ser capaz de comunicar-se com o mundo exterior. Neste mundo exterior está o usuário que opera o computador. É preciso ler dados provenientes do teclado, mouse e outros dispositivos de entrada, bem como transferir dados para o vídeo, impressora e outros dispositivos de saída. Essas operações são chamadas de “entrada e saída”, ou E/S (em inglês, Input/Output, ou I/O). Portanto, além de processar dados, um processador deve ser capaz de realizar operações de entrada e saída, bem como realizar leituras e gravações na memória.
|
|
Figura
4.1 |
A figura 1 mostra, de forma bem simplificada, alguns dos sinais digitais existentes em um processador. Temos o chamado “barramento de dados”, através do qual trafegam os dados que são transmitidos ou recebidos pelo processador. Os dados transmitidos podem ser enviados para a memória ou para um dispositivo de saída, como o vídeo. Os dados recebidos podem ser provenientes da memória, ou de um dispositivo de entrada, como o teclado. Cada uma das “perninhas” do processador pode operar com um bit. No processador da figura 1, temos um barramento de dados com 16 bits. Observe que as linhas desenhadas sobre o barramento de dados possuem duas setas, indicando que os bits podem trafegar em duas direções, saindo e entrando no processador. Dizemos então que o barramento de dados é bidirecional.
O barramento de endereços serve para que o processador especifique qual é a posição de memória a ser acessada, ou qual é o dispositivo de entrada e saída a ser ativado. Na figura 1, temos um barramento de endereços com 24 bits, já que são usadas 24 “perninhas” do processador para a formação deste barramento. Observe ainda que o barramento de endereços é unidirecional, ou seja, os bits “saem” do processador.
Além desses dois barramentos, a figura mostra ainda dois sinais de controle que servem para definir se a operação a ser realizada é uma leitura ou uma gravação, e se deve atuar sobre a memória ou sobre um dispositivo de E/S. São eles:
MIO:
Este sinal indica se a operação diz respeito à memória ou a E/S
RW: Este
sinal indica se a operação é uma leitura ou uma gravação
Através desses dois sinais, podem ser definidas 4 operações básicas:
Leitura da memória
Escrita na memória
Leitura de E/S (Ex: do teclado)
Escrita em E/S (Ex: no vídeo)
|
|
Figura
4.2 |
Note que o processador representado na figura 1 tem 20 linhas que indicam os endereços e 16 que indicam os dados. São ao todo 36 linhas. Processadores mais modernos operam com um número ainda maior de bits. Por exemplo, 32 bits de enereços e 64 bits de dados. O número de linhas é tão grande que sua representação torna-se confusa. Por isso é comum utilizar a representação da figura 2. Usamos setas maiores para representar um conjunto de bits que têm a mesma função, como o barramento de dados e o barramento de endereços.
Os processadores possuem, além do barramento de dados e de endereços, o chamado barramento de controle, no qual existe uma miscelânea de sinais digitais com diversas finalidades. Os sinais RW e MIO exemplificados na figura 1 são parte do barramento de controle. Outros exemplos de sinais deste barramento são os que descrevemos a seguir.
Este sinal é uma entrada que serve para que dispositivos externos possam interromper o processador para que seja realizada uma tarefa que não pode esperar. Por exemplo, a interface de teclado interrompe o processador para indicar que uma tecla foi pressionada. Esta tecla precisa ser lida, e seu código deve ser armazenado na memória para processamento posterior. As interfaces de drives e do disco rígido interrompem o processador para avisar o término de uma operação de leitura ou escrita. Vários outros dispositivos também precisam gerar interrupções. Como existe apenas uma entrada INT, o processador opera em conjunto com um chip chamado controlador de interrupções. Este chip é encarregado de receber requisições de interrupção de vários dispositivos e enviá-las ao processador, de forma ordenada, através do sinal INT.
Este é um sinal de interrupção especial para ser usado em emergências. Significa Non Maskable Interrupt, ou Interrupção não mascarável. Em outras palavras, esta interrupção deve ser atendida imediatamente. Ao contrário do sinal INT, que pode ser ignorado pelo processador durante pequenos intervalos de tempo (isto se chama mascarar a interrupção), o sinal NMI é uma interrupção não mascarável. Nos PCs, o NMI é usado para informar erros de paridade na memória e outras condições catastróficas.
Significa Interrupt Acknowledge, ou seja, reconhecimento de interrupção. Serve para o processador indicar que aceitou uma interrupção, e que está aguardando que o dispositivo que gerou a interrupção identifique-se, para que seja realizado o atendimento adequado.
Esta é a entrada de corrente elétrica que alimenta os circuitos internos do processador. Processadores antigos operavam a partir de uma tensão de 5 volts. A partir de meados dos anos 90, passaram a utilizar tensões mais baixas, como 3,5 volts. Todos os processadores modernos operam com duas tensões (VCC1 e VCC2). A tensão externa é sempre de 3,3 volts (já existem modelos mais recentes que operam externamente com 2,5 volts), e é usada para alimentar os circuitos que se comunicam com o exterior do processador. A tensão interna é usada para alimentar o interior (núcleo) do processador, e é sempre mais baixa. Nos processadores recentes, a tensão interna é inferior a 2 volts. Note que cada tensão de entrada não ocupa um único pino do processador, e sim, vários pinos. Como a corrente total é relativamente alta, os processadores usam vários pinos para a entrada da tensão do núcleo (Core) e para a tensão externa (I/O).
Significa Ground, ou Terra. Deve ser ligado ao polo negativo da fonte de alimentação. Assim como ocorre com as entradas de VCC, os processadores possuem diversos pinos de terra, para que o fornecimento de corrente seja melhor distribuído.
Este é um sinal que está ligado ao botão Reset do painel frontal do gabinete. Ao ser ativado, o processador para tudo, e atua como se tivesse acabado de ser ligado. Este sinal é também conectado a um circuito chamado Power on Reset. Sua função é gerar, no instante em que o computador é ligado, um pulso eletrônico similar ao criado pelo pressionamento deste botão. Aproveitando os conhecimentos de eletrônica apresentados no capítulo 3, mostramos no final deste capítulo, o funcionamento de um circuito de Reset.
Esta entrada deve receber um sinal digital que será usado internamente para sincronizar todo o funcionamento do processador. Explicando de forma simplificada, se um processador recebe um clock de 100 milhões de ciclos por segundo, ele executará 100 milhões de operações por segundo.
|
|
Figura
4.3 |
A figura 3 mostra o diagrama de tempo de um sinal de clock. Seus bits se alternam de forma periódica, entre 0 e 1. Um trecho com valor 1, seguindo por um trecho com valor 0, é o que chamamos de período do clock. O período é calculado em função do valor do clock, pela seguinte fórmula:
T = 1/f
Na fórmula, T é o período, dado em segundos, e f é a freqüência do clock, medida em Hz (hertz). Por exemplo, se tivermos um clock de 100 MHz (100.000.000 Hz), o período será de:
T = 1/100.000.000 = 0,000 000 01s
Para evitar o uso de casas decimais, toma-se o hábito de usar a unidade ns (nano-segundo, ou bilionésimo de segundo). Para fazer a conversão basta andar com a vírgula, 9 casas decimais para a direita. Portanto temos:
0,000 000 01s = 10 ns
A maioria dos circuitos digitais opera a partir de uma base de tempo, um clock. São chamados de circuitos síncronos. Os processadores são circuitos síncronos, já que são comandados por sinais de clock. As transições se positivas e negativas (0 para 1 e 1 para 0) do sinal de clock indicam aos circuitos digitais que o utilizam, o momento certo de realizar suas operações.
Processadores antigos (até o 486DX-50) utilizavam um único sinal de clock para suas operações internas e externas. A partir daí, e até os dias atuais, os processadores passaram a operar com dois clocks, sendo um interno e um externo. O clock interno é sempre mais alto, e é usado para sincronizar as operações de processamento. Quando falamos, por exemplo, sobre um “Pentium III/800”, estamos dizendo que o seu clock interno é de 800 MHz. O clock externo tem um valor menor, e é usado para sincronizar as operações de comunicação entre o processador, a memória, o chipset e outros circuitos externos.
Não só o processador opera a partir de um clock. Vários outros circuitos e barramentos do computador têm suas operações sincronizadas por um clock. Por exemplo:
Memórias PC133 operam a partir de um clock de 133 MHz
Memórias PC100 operam a partir de um clock de 100 MHz
O barramento PCI opera a partir de um clock de 33 MHz
O barramento AGP utiliza um clock de 66 MHz
O barramento ISA utiliza um clock de 8 MHz
Placas de som fazem digitalizações em até 44 kHz
A princípio, quanto maior é o clock de um processador, maior é o seu desempenho. Por exemplo, um processador de 800 MHz é seguramente mais veloz que um de 200 MHz. Os fabricantes de processadores se esforçam para criar modelos capazes de operar com clocks cada vez mais elevados. Não devemos entretanto levar ao pé da letra, a relação entre desempenho e clock. Por exemplo, em certas condições, um processador de 700 MHz pode ser mais veloz que um de 900 MHz. O motivo desta discrepância é que além do clock, existem outros fatores que influenciam no desempenho, como por exemplo:
Velocidade das memórias
Desempenho da cache L2
Arquitetura
avançada
Quando as memórias não são suficientemente velozes, podem demorar muito na entrega de dados e instruções para o processador, que acaba ficando parte do tempo ocioso, tendo seu desmpenho prejudicado pela lentidão da memória. Também a cache L2 tem papel fundamental. A cache L2 do processador Pentium III Coppermine, por exemplo, é mais eficiente que a do processador Pentium III Katmai. Portanto existem diferenças de desempenho, se comparamos essas duas versões do Pentium III, mesmo quando ambas operam com o mesmo clock. O tamanho da cache L2 também tem influência no desempenho. Processadores Athlon e Duron são idênticos, exceto pelo tamanho da cache L2 (256 kB para o Athlon e 64 kB para o Duron). Por isso ao compararmos os desempenhos desses dois processadores, mesmo operando com o mesmo clock, o Athlon leva vantagem. A arquitetura mais avançada também tem influência direta no desempenho. Um processador de 1200 MHz de 7a geração, por exemplo, tende a ser mais rápido que um de 1200 MHz, mas de 6a geração. Processadores de gerações mais avançadas são capazes de executar mais instruções ao mesmo tempo e operam com mais eficiência, tirando assim maior proveito do seu clock. É como comparar um carro com motor 2.0 produzido no ano 2000 com outro de motor 2.0 produzido em 1980. Os motores de geração mais nova têm maior rendimento, e tendem a obter maior desempenho em relação à potência do motor.
O clock de um processador está diretamente relacionado com o número de instruções que podem ser executadas a cada segundo. O 8086 e o 8088, nas suas primeiras versões, operavam a 5 MHz. Isto não significa exatamente 5 milhões de instruções por segundo, e sim, 5 milhões de CICLOS por segundo. Algumas instruções mais simples podiam ser executadas em apenas dois ciclos. Desta forma, em um segundo seria possível executar 2.500.000 dessas instruções. Outras instruções mais complexas, como a multiplicação e a divisão, eram muito mais demoradas. Suponha por exemplo uma instrução que precise de 10 ciclos para ser executada. Operando a 5 MHz, esses processadores poderiam executar 500.000 dessas instruções por segundo.
Com o passar do tempo e a evolução da tecnologia foi possível desenvolver processadores capazes de operar com clocks mais elevados, e o que é mais importante: executar instruções em um reduzido número de ciclos. Os processadores mais modernos são capazes de executar a maioria das instruções em apenas um ciclo. A partir do Pentium, passaram a executar instruções de forma simultânea, tornando possível, por exemplo, executar duas instruções em um único ciclo. Isto faria com que, teoricamente, operar a 200 MHz resulte em 400 milhões de instruções por segundo.
Ao compararmos processadores novos e antigos, simples e sofisticados, vemos que eles possuem muitas características comuns, e as diferenças estão no nível dessas características. Um exemplo simples é o clock, já abordado neste capítulo. No ano 2000 já existiam processadores com clocks superiores a 1000 MHz. Em 1980, os modelos típicos operavam na faixa dos 5 MHz. Mesmo com esta diferença tão grande, o significado do clock é exatamente o mesmo nos dois casos. Passemos então a apresentar as principais características de um processador genérico, e vejamos como se aplicam aos modelos atuais.
Daqui vêm as terminologias “micro de 8 bits”, “micro de 16 bits” e “micro de 32 bits”, etc. Dentro de um processador, existem vários circuitos que armazenam, transportam e processam dados. Na maioria dos processadores atuais, tais circuitos operam com 32 bits de cada vez. Nos antigos processadores dos anos 80, todos esses circuitos operavam com 16 bits, enquanto os modelos dos anos 70 operavam com 4 ou 8 bits.
Quanto maior é o número de bits de um processador, mais veloz poderá realizar cálculos e processamento de instruções em geral. Veja por exemplo, os limites de números inteiros positivos que podem ser manipulados com 8, 16 e 32 bits:
|
8
bits |
0
a 255 |
|
16
bits |
0
a 65.535 |
|
32
bits |
0
a 4.294.967.295 |
Suponha por exemplo que um processador de 16 bits precise realizar a operação 245.818.768 + 978.798.423. Ambas as parcelas desta adição não podem ser representadas em um grupo de 16 bits. Portanto, deve ser realizada por etapas. Um processador de 32 bits é capaz de representar e operar tais números de forma direta, o que faz com que o cálculo seja feito, no mínimo duas vezes mais rápido. Este é apenas um exemplo no qual um processador de 32 bits leva vantagem sobre um de 16 bits. Praticamente em todas as instruções, esta vantagem existe.
Os processadores 8086, 8088 e 80286, usados nos PCs do início dos anos 80 e ainda encontrados no mercado até o início dos anos 90, operavam com 16 bits. A partir do 80386, os processadores usados nos PCs passaram a operar com 32 bits. Por incrível que pareça, os processadores mais modernos, como Pentium III, Pentium 4, Athlon e diversos outros atuais, também operam com 32 bits.
Para que um processador seja rápido, é preciso que ele seja capaz de manipular instruções em alta velocidade. Essas instruções são armazenadas na memória, e portanto, é preciso que a memória seja acessada em alta velocidade. Ao mesmo tempo em que executa instruções, o processador também lê e armazena dados na memória, o que é mais uma razão para que a memória seja rápida. A velocidade de transferência de dados entre o processador e a memória depende de diversos fatores, e um dos principais é o número de bits do seu barramento de dados (data bus). O barramento de dados é um conjunto de sinais digitais que ligam o processador à memória e aos dispositivos de entrada e saída de dados.
Os processadores de 8 bits utilizavam um barramento de dados também com 8 bits. O processador 8086, operava com 16 bits, tanto internamente como externamente, ou seja, utilizava um barramento de dados também com 16 bits. Até então, o número de bits internos era igual ao número de bits externos do processador, mas isto nem sempre ocorre. Por exemplo, o processador 8088, usado nos primeiros PCs, operava internamente com 16 bits, e externamente com apenas 8. Já com os processadores modernos (a partir do Pentium), ocorre o inverso: operam internamente com 32 bits e externamente com 64. A tabela abaixo apresenta o número interno e o número externo de bits dos processadores usados nos PCs.
|
Processador |
Número
interno de bits |
Número
externo de bits |
|
8086 |
16 |
16 |
|
8088 |
16 |
8 |
|
286 |
16 |
16 |
|
386SX |
32 |
16 |
|
386DX |
32 |
32 |
|
486 |
32 |
32 |
|
486DLC
/ SLC |
32 |
32 |
|
Pentium,
Pentium MMX |
32 |
64 |
|
Pentium
Pro |
32 |
64 |
|
Cyrix
5x86 e AMD 5x86 |
32 |
32 |
|
Cyrix
6x86 |
32 |
64 |
|
AMD
K5, K6, K6-2, K6-III |
32 |
64 |
|
Pentium
II, Pentium III |
32 |
64 |
|
Celeron |
32 |
64 |
|
Pentium
4 |
32 |
64 |
|
AMD
Athlon, Duron |
32 |
64 |
Como vemos, os processadores mais recentes operam com 32 bits internos e 64 bits externos, ou seja, barramento de dados com 64 bits. Uma nova configuração foi introduzida com o processador Intel Itanium, inaugurando a era dos processadores de 64 bits. São 64 bits internos e 64 bits externos.
Aqui está um fator que não está exatamente relacionado com a velocidade, e sim, com a capacidade de manipular grandes quantidades de dados. A capacidade de endereçamento nada mais é que o máximo tamanho que pode ter a memória, ou, seja, o número máximo de células de memória que um processador consegue acessar. Para acessar uma célula (ou posição) de memória, o processador precisa informar qual é o endereço desta célula. Cada célula armazena um byte. Processadores com barramento de dados de 16 bits podem acessar duas células de uma só vez. Aqueles com barramentos de dados com 32 e 64 bits podem acessar até 4 e 8 células, respectivamente.
O
8086 e o 8088 possuíam barramentos de dados com 20 bits, e por isto podiam
acessar 1 MB de memória. Para saber a quantidade máxima de memória que um
processador pode acessar, basta saber o número de bits do seu barramento de
endereços e calcular 2 elevado a esta número. Portanto:
220
bytes = 1.048.576 bytes = 1 MB
224 bytes = 16.777.216 bytes = 16 MB
232
bytes = 4.294.967.296 bytes = 4 GB
Para a época do 8086 e do 8088 (em torno de 1980), a capacidade de endereçar 1 MB era considerada bem elevada. Os primeiros PCs nem mesmo chegavam a usar toda esta capacidade. Eram comuns modelos com 64 kB, 128 kB e 256 kB de memória RAM. Apenas em meados dos anos 80 começaram a ser comuns os PCs com 512 kB e 640 kB de RAM.
O processador 286, com sua capacidade de endereçar até 16 MB de memória (usava um barramento de endereços com 24 bits) foi um grande avanço em relação ao 8086 e ao 8088. Mesmo no início dos anos 90, a maioria dos PCs usava entre 1 MB e 2 MB de memória, apenas uma fração da capacidade de endereçamento do 286.
O 386, com seu barramento de endereços com 32 bits, possibilitava endereçar até 4 GB de memória, uma quantidade espantosamente alta até para os dias atuais. Um PC com 256 MB de RAM, por exemplo, não chega a usar 10% da sua capacidade máxima de memória. Por isto, mesmo os processadores mais modernos, em sua maioria, ainda utilizam barramentos de endereços com 32 bits. A tabela abaixo apresenta o número de bits do barramento de endereços, bem como a capacidade máxima de endereçamento de memória para os processadores usados nos PCs:
|
Processador |
Número
bits de Endereço |
Capacidade
de endereçamento |
|
8086 |
20 |
1
MB |
|
8088 |
20 |
1
MB |
|
286 |
24 |
16
MB |
|
386SX |
24 |
16
MB |
|
386DX |
32 |
4
GB |
|
486 |
32 |
4
GB |
|
486DLC |
32 |
4
GB |
|
486SLC |
24 |
16
MB |
|
Pentium
e similares |
32 |
4
GB |
|
Pentium
Pro e superiores |
36 |
64
GB |
Os processadores experimentaram ao longo dos anos, grandes avanços na velocidade de processamento. Um já ultrapassado Pentium II de 300 MHz, por exemplo, é mais de 1000 vezes mais veloz que o velho 8088 usado no IBM PC XT. As memórias também experimentaram avanços significativos, porém mais modestos. No início dos anos 80, eram comuns as memórias DRAM com 250 ns de tempo de acesso. Em meados dos anos 80, este tempo de acesso chegou à casa dos 60 ns, e no final dos anos 90, aos 10 ns. Portanto essas memórias são apenas cerca de 25 vezes mais rápidas que há 20 anos atrás, enquanto os processadores são no mínimo 1000 vezes mais rápidos. O resultado disso é um grande desequilíbrio entre a velocidade do processador e a velocidade da memória.
Este problema é antigo, pois já ocorria com os computadores de grande porte durante os anos 60. Com os processadores, só passou a existir tal problema a partir de 1990, aproximadamente. Antes disso os processadores, sendo mais lentos, ficavam perfeitamente sintonizados com a velocidade das memórias. As memórias, mesmo sendo relativamente lentas, ainda eram capazes de entregar dados na velocidade exigida pelos processadores. Somente quando o seu clock chegou a 25 MHz (por volta de 1990), os processadores passaram a ter seu desempenho penalizado pela baixa velocidade das memórias.
A memória RAM usada em larga escala nos PCs é chamada de DRAM (Dynamic RAM, ou RAM Dinâmica). Suas principais características são:
Preço relativamente baixo
Grande capacidade em pequeno espaço
Velocidade relativamente baixa
O preço baixo e o alto grau de miniaturização fizeram com que a DRAM fosse o tipo de memória mais indicado para os microcomputadores. A sua baixa velocidade não chegava a ser um problema, pelo menos até 1990.
Existe um outro tipo de memória RAM que apresenta uma velocidade de operação muito mais alta. É chamada de SRAM (Static RAM, ou RAM Estática). Suas principais características são:
Preço elevado
Grande capacidade requer um grande espaço
Alta velocidade
Tecnicamente seria possível equipar um PC com memória SRAM, mas teríamos duas grandes desvantagens. Uma delas é o preço. A SRAM é cerca de 10 vezes mais cara que a DRAM de mesma capacidade. A outra desvantagem é o seu baixo grau de compactação. Seriam necessárias placas de circuito enormes para dotar um PC com uma razoável quantidade de memória.
A solução utilizada pela indústria de PCs foi a mesma usada nos computadores de grande porte nos anos 60. Esta solução é a memória cache. É formada por uma pequena quantidade de SRAM, usada para acelerar uma grande quantidade de DRAM. Quando o processador precisa ler dados da DRAM, estes são antes transferidos para a cache (isto não é feito pelo processador, e sim, por um circuito especial chamado controlador de cache, que faz parte do chipset). O processador obtém os dados diretamente da cache, e enquanto esses dados estão sendo lidos, o controlador de cache se antecipa e acessa mais dados da DRAM, transferindo-os para a memória cache. O resultado é que na maior parte do tempo, o processador encontra dentro da cache os dados que procura. Este processo funciona bem porque, mesmo com grandes quantidades de memória, um processador passa bastante tempo utilizando trechos pequenos de memória. Por exemplo, ao executar um programa com o tamanho de 200 kB, todo ele cabe dentro de uma cache com apenas 256 kB. Ao executá-lo, os dados estariam, praticamente o tempo todo, sendo obtidos da rápida memória cache.
O primeiro processador a utilizar memória cache foi o 486. Em seu interior existem 8 kB de memória estática super veloz, operando como cache. Este tipo de cache, localizada dentro do processador, é chamada de:
Cache interna
Cache primária
Cache de nível 1 (L1)
Apesar de ter apenas 8 kB, a cache interna do 486 podia acelerar consideravelmente o desempenho do acesso à memória.
Os processadores 386 não tinham cache interna, e nem precisavam dela, enquanto operavam com até 20 MHz. Com o lançamento de versões de 25, 33 e 40 MHz, o baixo desempenho da memória DRAM obrigou os fabricantes a acrescentarem memória cache. Esta cache não era localizada dentro do processador, como ocorria com o 486. Era formada por chips de memória SRAM, e era chamada de:
Cache externa
Cache secundária
Cache de nível 2 (L2)
OBS:
Note que só é correto usar o termo cache secundária ou cache L2
quando existe cache primária (ou L1), como no caso do 486.
Foram lançadas placas de CPU baseadas no 386, equipadas com 8 kB, depois com 16, 32, 64 e finalmente 128 kB de memória cache externa (isto ocorreu entre 1990 e 1993). Um computador baseado no 386DX-40, com 128 kB de cache externa, era mais veloz que um 486 de 25 MHz sem cache externa.
Hoje em dia, tanto a cache primária como a secundária são importantes para o desempenho. A tabela que se segue apresenta a quantidade de memória cache interna existente nos processadores usados nos PCs.
|
Processador |
Cache
L1 |
|
386
e anteriores |
Sem
cache L1 |
|
486DX
/ DX2 / SX / SX2 |
8
kB |
|
486
DX4 * |
16
kB |
|
486DLC,
486SLC |
1
kB |
|
Pentium |
16
kB |
|
Pentium
Pro |
16
kB |
|
Pentium
MMX |
32
kB |
|
Cyrix
5x86 e AMD 5x86 |
16
kB |
|
Cyrix
6x86 |
16
kB |
|
AMD-K5 |
24
kB |
|
AMD
K6, K6-2, K6-III |
64
kB |
|
Cyrix
6x86MX, MII |
64
kB |
|
Cyrix
III |
128
kB |
|
Pentium
II, Celeron |
32
kB |
|
Pentium
III |
32
kB |
|
Athlon,
Duron |
128
kB |
|
Pentium
4 |
8
kB + 12.000 micro-ops |
Os primeiros processadores a utilizarem cache (486) tinham uma única área para dados e instruções. Novas versões do 486 e todos os processadores seguintes passaram a utilizar uma cache L1 dividida em duas áreas iguais, sendo uma para dados e uma para instruções (data cache e instruction cache). Isto tornou a cache L1 mais eficiente. Notáveis são as caches L1 dos processadores Cyrix e AMD, normalmente maiores que as de processadores Intel de mesmo poder de processamento. Por exemplo, o AMD Athlon tem 128 kB de cache L1, enquanto o Pentium III tem apenas 32 kB. Também notável é o caso da cache L1 do processador Pentium 4. Esta cache não armazena dados e instruções vindos da memória, e sim, micro-instruções já decodificadas. Isso significa que as instruções existentes na cache L1 podem ser executadas mais rapidamente.
Os primeiros processadores usados nos PCs não necessitavam de memória cache. A memória DRAM disponível na época era suficientemente veloz para aqueles processadores. O IBM PC XT, por exemplo, usava memórias com 250 ns de tempo de acesso, mas o seu processador operava com ciclos de 800 ns para realizar os acessos, portanto 250 ns era um tempo de acesso mais que satisfatório. Apenas computadores de grande porte, aqueles que custavam alguns milhões de dólares, utilizavam memória cache.
Em 1989 surgiu o processador Intel 80486, o primeiro a utilizar cache. Com clock de 25 MHz e ciclos de 80 ns, necessitava de memórias com menor tempo de acesso, porém na época as mais rápidas eram de 100 ns, tempo muito grande para aquele processador. Os 8 kB de cache, localizadas dentro do próprio processador (cache interna) permitiam o funcionamento do processador com bom desempenho, mesmo com a memória DRAM mais lenta que o necessário.
|
|
Figura
4.4 |
Processadores 386 produzidos pela AMD na época (1991-1993) eram concorrentes do 486, até então produzidos apenas pela Intel. Assim como ocorria no 486, os processadores 386 daquela época também necessitavam de cache para melhorar o seu desempenho. Como o 386 não tinha cache interna, foram produzidas placas de CPU 386 com cache externa, ou seja, formada por chips SRAM (RAM estática) localizados na placa de CPU. Um processador 386 de 40 MHz e 128 kB de cache externa era praticamente tão veloz quanto um 486 de 25 MHz e 8 kB de cache interna, mas a opção do 386 era muito mais barata.
|
|
Figura
4.5 |
A cache externa realmente acelerava bastante o desempenho, e assim foram criadas placas de CPU para processadores 486, também com cache externa. Eram comuns placas para 486 com 256 kB de cache externa, além dos 8 kB de cache interna existentes no processador.
|
|
Figura
4.6 |
Este esquema de dupla cache (interna e externa) utilizada em processadores 486 foi mantido em processadores mais modernos, como o 586, o Pentium e todos os demais processadores para Soquete 7, com exceção do AMD K6-III, que operava com 3 caches.
Os termos “cache interna” e “cache externa” caíram em desuso. Atualmente ambas as caches ficam localizadas dentro do próprio processador, portanto não faz mais sentido classificá-las como interna e externa. A cache interna é agora chamada de cache primária ou cache L1 (level 1 ou nível 1). A cache externa é agora chamada de cache secundária ou cache L2 (level 2 ou nível 2).
Na época em que o Pentium e o Pentium MMX eram utilizados em computadores de uso pessoal, a Intel produzia o Pentium Pro, utilizado em aplicações de nível profissional e em servidores (1995-1997). Este foi o primeiro processador a embutir a cache L2. Em outras palavras, dentro do processador Pentium Pro encontrávamos a cache L1 e 256 kB de cache L2.
|
|
Figura
4.7 |
O Pentium Pro era construído em uma pastilha de silício (die) com dupla cavidade, ou seja, como se fossem dois chips montados em um mesmo substrato. Um deles é o núcleo do processador, o outro é a cache L2. Este método permitiu a construção de uma cache L2 bastante veloz, entretanto tinha um elevado custo de produção. O núcleo do Pentium Pro utiliza a arquitetura Intel P6, usada nos processadores seguintes (Pentium II, Celeron e Pentium III). A cache L2 entretanto nunca mais foi produzida com o sistema de dupla cavidade.
O Pentium II foi lançado em 1997, utilizando um núcleo similar ao do Pentium Pro, ou seja, ele também usa a microarquitetura P6. A principal diferença está na sua cache L2. Ao invés de utilizar uma única pastilha de silício contendo o processador e a cache L2, o Pentium II é montado em uma placa de circuito, juntamente com chips de memória que formam a cache L2. O conjunto inteiro é montado em um cartucho metálico. Do ponto de vista do núcleo do processador, esta cache L2 é externa, mas considerando o cartucho como um todo, a cache L2 é interna. Para evitar confusão, os termos interna e externa não são mais usados, e em seu lugar usamos hoje, L1 e L2.
|
|
Figura
4.8 |
Este sistema de cache L2 foi também utilizado nas primeiras versões do Pentium III e do AMD Athlon.
Integrar a cache L2 no núcleo significa produzir um processador contendo na mesma base de silício, com uma única cavidade, o núcleo e a cache L2. Integrar a cache no núcleo foi possível com a adoção de tecnologia de 0,18 mícron, no lugar da antiga tecnologia de 0,25 mícron, possibilitando a construção de transistores menores, e em conseqüência, chips menores e com menor aquecimento. Além do menor custo, a cache L2 integrada ao núcleo do processador resulta em maior desempenho, já que os acessos à cache podem ser feitos com maior velocidade.
O primeiro processador a integrar a cache L2 no seu núcleo foi o Celeron. Posteriormente a mesma técnica passou a ser usada pelo Pentium III. A Intel utiliza vários nomes para diferenciar seus modelos de processador. O Pentium III versão Katmai era o original, que tinha a cache L2 formada por chips SRAM adicionais. A versão chamada Coppermine é a que integra a cache L2 no núcleo. Apesar de ter apenas 256 kB, contra os 512 kB do Pentium III Katmai, a nova versão do Pentium III oferece maior desempenho, pois sua cache L2 opera com um clock duas vezes maior.
Também os processadores Athlon passaram a utilizar cache L2 integrada no núcleo. Assim como ocorre com os processadores Intel, são usados nomes adicionais para designar as versões do Athlon. A versão com cache L2 embutida no núcleo é chamada de Thunderbird, ou simplesmente T-Bird. Ao mesmo tempo em que foi lançado o Athlon T-Bird, com 256 kB de cache L2 integrada no núcleo, foi também lançado o Duron, utilizando a mesma tecnologia. A diferença é a cache L2, que no Duron tem apenas 64 kB. Entretanto, sua cache L1 de 128 kB (encontrada tanto no Athlon quanto no Duron) oferece um bom desempenho, mesmo com uma cache L2 de apenas 64 kB.
Um dos principais melhoramentos introduzidos nos processadores modernos foi o aumento de velocidade da cache L2. Quando um processador se torna mais rápido, a memória DRAM não necessariamente precisa acompanhar este aumento de velocidade (e na prática não acompanha), mas a cache L2 precisa acompanhar. Se o processador se tornar mais veloz mas a cache L2 mantiver velocidade constante, o desempenho será prejudicado.
|
|
Figura
4.9 |
A figura 9 mostra a relação entre o processador, as caches e a memória DRAM. Para que o sistema tenha um bom desempenho, deve ocorrer o seguinte:
a) O processador encontra na maior parte das vezes, os dados e instruções que precisa na própria cache L1.
b) Os dados a serem transferidos para a cache L1 estão na maior parte das vezes, localizados na cache L2
Desta forma, a cache L2 acelera o desempenho da DRAM. Ao mesmo tempo, a cache L1 acelera o desempenho da cache L2. Note que na figura estão indicadas as freqüências F1, F2 e F3.
F1:
Velocidade na qual os dados trafegam entre a cache L1 e o núcleo
F2: Velocidade na qual os dados são transferidos entre as caches L1 e L2
F3: Velocidade de transferência entre a DRAM e a cache L2
Veja como ficam essas velocidades em alguns processadores produzidos em um passado recente:
|
Processador |
F1 |
F2 |
F3 |
|
Pentium-200 |
200
MHz |
66
MHz |
66
MHz |
|
AMD
K6-2/300 |
300
MHz |
100
MHz |
100
MHz |
|
AMD
K6-2/500 |
500
MHz |
100
MHz |
100
MHz |
|
Pentium
II/400 |
400
MHz |
200
MHz |
100
MHz |
Em todos os casos, o clock usado na transferência de dados entre a cache L1 e o núcleo do processador é o próprio clock do núcleo. Por exemplo, em um núcleo de 500 MHz, esta transferência é feita a 500 MHz.
Observe o que ocorre com os valores de F2, que representa a velocidade da cache L2. Nos processadores Pentium, K6-2 e similares, a cache L2 opera com freqüência fixa, igual à freqüência do barramento externo. Um K6-2/500 tem condições de processar dados mais rapidamente que um K6-2/300, entretanto ambos possuem caches L2 com velocidades semelhantes. Aumentar mais ainda o clock do processador e manter fixa a velocidade da cache L2 é a mesma coisa que usar em um carro de Fórmula 1, pneus de Fusca.
Finalmente observe o valor de F2 para o Pentium II. Este processador possui uma cache L2 capaz de transferir dados em uma velocidade maior que a do seu barramento externo. É usado um barramento dual, um de 100 MHz para acessar a DRAM e um de 200 MHz para acessar a cache L2. No caso geral, a cache L2 do Pentium II e das primeiras versões do Pentium III (Katmai) opera com a metade da freqüência do núcleo do processador. Um Pentium III/600, por exemplo, tem cache L2 operando a 300 MHz.
O aumento do valor de F2 foi uma das prioridades nos processadores lançados recentemente. Veja o que ocorre com os modelos mais novos:
|
Processador |
F1 |
F2 |
F3 |
|
Pentium
IIIE |
F |
F |
100
MHz |
|
Pentium
IIIB |
F |
F/2 |
133
MHz |
|
Pentium
IIIEB |
F |
F |
133
MHz |
|
Athlon
original |
F |
F/2,
F/2.5, F/3 |
200
MHz |
|
Athlon
T-bird |
F |
F |
200/266
MHz |
|
Duron |
F |
F |
200
MHz |
|
Pentium
4 |
F |
F |
400
MHz |
Na tabela usamos F para indicar a freqüência do núcleo do processador. Por exemplo, em um Pentium III/1000, F vale 1000 MHz. Observe que nos processadores mais modernos, F2 (freqüência da cache L2) é igual à freqüência do núcleo do processador. Núcleo a 1000 MHz significa cache L2 a 1000 MHz. Isto resulta em um grande aumento de desempenho, em comparação com versões mais antigas. Nas primeiras versões do Pentium III, bem como no Pentium IIIB (clock externo de 133 MHz), a cache L2 operava com a metade da freqüência do núcleo. Isto também ocorria com as primeiras versões do Athlon, onde a cache L2 operava com a metade, e até com 1/3 da freqüência do núcleo. Nas versões mais novas do Pentium III (Coppermine) e nas versões T-Bird do Athlon e Duron, a cache L2 também opera com a freqüência do núcleo. Esta é uma característica que será mantida em todos os processadores modernos: cache L2 em full speed., integrada no núcleo do processador (on-die).
Finalmente observe na tabela que melhoramentos têm sido feitos na freqüência da DRAM. Novas tecnologias como DDR e RDRAM estão aos poucos sendo implantadas para tornar mais elevada a taxa de transferência dos dados que chegam da DRAM.
Durante aproximadamente um ano (meados de 1999 a meados de 2000), a AMD produziu o processador K6-III. Foi lançado apenas nas versões de 400 e 450 MHz, mas foi logo retirado de linha, devido ao seu custo de produção relativamente alto, o que dificultava a concorrência com os processadores Intel. O K6-III tinha uma cache L2 de 256 kB full speed integrada no seu núcleo. Processador a 450 MHz, cache L2 a 450 MHz. Seu desempenho era muito bom, bem mais veloz que o K6-2 e igualando-se ao Pentium III de mesmo clock. A AMD achou melhor descontinuá-lo e dedicar sua linha de produção ao Athlon.
O processador K6-III tinha no seu núcleo, caches L1 e L2. Podia ser instalado em placas de CPU para K6-2, que já tinham cache externa. Sendo assim, a cache existente na placa de CPU era de nível 3 (L3). A figura 10 mostra a relação entre as três caches do K6-III.
|
|
Figura
4.10
|
Na figura 10 foi tomado como exemplo um K6-III de 400 MHz. Estando o núcleo operando a 400 MHz, as transferências feitas entre o processador, a cache L1 e a cache L2 (internas) são feitas na mesma freqüência. Para o modelo de 450 MHz, essas transferências são feitas a 450 MHz. Em ambos os modelos, as transferências entre a cache L2 e a L3 (externa), e entre a cache L3 e a DRAM são feitas a 100 MHz.
Todos os esforços no sentido de melhorar a tecnologia dos processadores giram em torno de um ponto chave: o desempenho, ou seja, a velocidade de processamento. Entre as técnicas implantadas visando obter maiores velocidades, podemos citar:
Aumento do clock
Aumento do número interno de bits
Aumento de número externo de bits
Redução do número de ciclos para executar cada instrução
Uso de cache L1 e L2 mais eficientes
Execução de instruções em paralelo
Avanços em todas essas áreas têm possibilitado obter velocidades cada vez maiores. Para avaliar essas velocidades, é fundamental que existam métodos precisos para medir o desempenho de um processador. No tempo do PC XT, quando apenas o processador 8088 era usado, bastava indicar o seu clock, e automaticamente poderíamos ter uma idéia da sua velocidade de processamento. Por exemplo, um XT de 10 MHz era duas vezes mais veloz que um XT de 5 MHz.
OBS:
O primeiro PC XT não operava com 5 MHz, e sim, com 4,77 MHz. Portanto, um XT de
10 MHz era cerca de 2,09 vezes mais veloz que o XT original.
Durante muitos anos, o desempenho dos processadores usados nos PCs foi estimado através de comparações com o IBM PC XT. Por exemplo, o 80286 de 6 MHz usado no IBM PC AT era cerca de 5,7 vezes mais rápido que o IBM PC XT. Esta comparação é realizada através de programas chamados de benchmarks. A idéia é relativamente simples. Colocava-se um XT para executar uma grande quantidade de instruções, todas elas envolvendo apenas o processador e a memória, isto, é não eram levados em conta acessos a disco, ao vídeo e demais dispositivos. Marcava-se o tempo que o XT levava para executar esta miscelânea de instruções. Digamos que o XT tenha demorado, por exemplo, 10 segundos. Este tempo era registrado dentro do programa de benchmark. Ao usarmos este programa em um computador de teste, são executadas as mesmas instruções processadas pelo XT, e o tempo total de processamento sendo registrado. Suponha por exemplo que o tempo de execução foi de 2 segundos. Portanto, dividindo o tempo de execução do XT (10 segundos) pelo tempo de execução do computador em teste (2 segundos), encontramos como resultado o índice de velocidade. Neste exemplo, o computador em teste mostrou ser 5 vezes mais veloz que o XT.
Vários programas de benchmark foram criados ao longo dos últimos anos. Todos eles são baseados na execução de uma miscelânea de instruções, a contagem do tempo para esta execução, e a comparação com o tempo requerido por um computador tomado como referência, normalmente o IBM PC XT. Sem dúvida, um dos programas mais usados na medição do desempenho de processadores é no Norton Sysinfo. Outro menos cotado, mas também muito conhecido é Checkit. Ambos fazem medidas e apresentam resultados comparativos com o IBM PC XT. A tabela que se segue apresenta os índices de velocidades de vários processadores, medidos com o Norton SI 8.0 e com o Checkit 3.0. Hoje os testes de desempenho feitos com esses dois programas são obsoletos, por isso não faz mais sentido usá-los para processadores novos. Apresentamos portanto os índices de velociodade para processadores até o Pentium-200.
|
Processador
e clock |
Norton
Si 8.0 |
Checkit
3.0 |
|
Pentium-200 |
640 |
460 |
|
Pentium-166 |
525 |
380 |
|
Pentium-150 |
475 |
340 |
|
Pentium-133 |
420 |
300 |
|
Pentium-120 |
380 |
273 |
|
Pentium-100 |
317 |
228 |
|
Pentium-90 |
285 |
205 |
|
Pentium-75 |
235 |
170 |
|
Pentium-66 |
209 |
150 |
|
Pentium-60 |
190 |
136 |
|
486DX4-120 |
261 |
166 |
|
486DX4-100 |
218 |
139 |
|
486DX2-80 |
174 |
114 |
|
486DX4-75 |
163 |
105 |
|
486DX2-66 |
144 |
91.8 |
|
486DX2-50 |
108 |
69.5 |
|
486DX-40 |
87.0 |
57.0 |
|
486DX-33 |
72.0 |
45.9 |
|
486DX-25 |
54.0 |
34.7 |
|
386DX-40 |
43.2 |
31.6 |
|
386DX-33 |
35.6 |
26.1 |
|
386DX-25 |
27.0 |
19.8 |
|
386DX-20 |
21.6 |
15.8 |
|
386SX-40 |
40.6 |
25.1 |
|
386SX-33 |
33.5 |
20.7 |
|
386SX-25 |
25.4 |
15.7 |
|
386SX-20 |
20.3 |
12.6 |
|
386SX-16 |
16.2 |
10.0 |
|
286-25 |
18.4 |
13.9 |
|
286-20 |
14.7 |
11.1 |
|
286-16 |
11.8 |
8.9 |
|
286-12 |
8.8 |
6.7 |
|
286-10 |
7.4 |
5.6 |
|
286-8 |
5.9 |
4.4 |
|
8088
10 Mhz |
2.1 |
2.1 |
|
8088
8 Mhz |
1.7 |
1.7 |
Observando esta tabela, notamos um fato muito interessante que ocorre com os programas medidores de desempenho. Observe que os índices são iguais quando dizem respeito ao 8088. Em todos os outros processadores, o Norton SI e o Checkit encontram índices diferentes. Porque esses índices são diferentes? Qual dos dois está correto?
Os índices são diferentes porque esses dois programas usam “miscelâneas de instruções” diferentes. Nos processadores mais modernos, as multiplicações e divisões são incrivelmente mais rápidas que nos antigos. Entretanto, operações que realizam acessos à memória são penalizadas pelo fato das memórias não serem tão velozes quanto os processadores exigem. Um programa de benchmark que utiliza operações de multiplicação e divisão tende a apresentar índices muito mais altos que outro que realiza muitos acessos à memória. O resultado é que um processador pode ser muito veloz ao processar programas que fazem muitos cálculos, mas pode não ser tão veloz quanto executa programas que manipulam grandes quantidades de dados na memória.
Hoje em dia faz pouco sentido medir o desempenho usando programas que fazem comparação com o IBM PC XT. O fato de um Pentium-166 apresentar o índice 525 medido com o Norton SI não significa que ele realmente será 525 vezes mais veloz que o XT para qualquer tipo de processamento. Por exemplo, quando desabilitamos a memória cache L2 em um PC equipado com um Pentium-166, ele continua apresentando um índice de 525 medido pelo Norton SI, graças à eficiência da sua cache interna. Esta eficiência não é tão grande assim quando é preciso acessar grandes quantidades de memória. A cache L1 não consegue dar conta do serviço, e o desempenho cai consideravelmente.
Sem a cache L2, um Pentium-166 apresenta um desempenho similar ao de um Pentium-90, apesar do seu índice de velocidade medido com o Norton SI (ou com o Checkit) permanecer inalterado. Para medir de forma mais realista o desempenho do Pentium e processadores mais avançados, é preciso usar programas que são baseados na execução de uma miscelânea de instruções mais comuns nos programas mais sofisticados para o ambiente Windows. Exemplos de programas adequados são o Norton Sysinfo para Windows 9x, o Winbench e o Winstone.
A tabela que se segue mostra ídices de velocidade para alguns processadores na faixa de 200 a 500 MHz. Nesses testes usamos os programas Norton Sysinfo para Windows 9x e o Winbench 99, que apresenta por sua vez dois índices: CPUMark32, para processamento não numérico, e o FPUWinMark, para processamento numérico. Observe como processadores de gerações mais novas apresentam desempenho muito superior ao de processadores mais antigos porém com o mesmo clock. Por exemplo, o Pentium II/233 tem índice CPUMark32 igual a 560, enquanto o Pentium MMX/233 tem índice de apenas 440.
Processador e clock |
Norton |
CPUMark32 |
FPUWinMark |
|
Pentium
II, 450 MHz |
210 |
1100 |
2290 |
|
Pentium
II, 400 MHz |
190 |
1000 |
2060 |
|
Pentium
II, 350 MHz |
170 |
900 |
1800 |
|
Pentium
II, 300 MHz |
150 |
800 |
1500 |
|
Pentium
II, 333 MHz |
150 |
780 |
1600 |
|
Pentium
II, 300 MHz |
140 |
730 |
1500 |
|
Pentium
II, 266 MHz |
130 |
650 |
1300 |
|
Pentium
II, 233 MHz |
110
|
560 |
1150 |
|
Pentium
MMX, 233 MHz |
61 |
440 |
830 |
|
Pentium
MMX, 200 MHz |
55 |
400 |
750 |
|
AMD
K6-2, 400 MHz |
140 |
860 |
1250 |
|
AMD
K6-2, 350 MHz |
130 |
800 |
1100 |
|
AMD
K6-2, 300 MHz |
120 |
760 |
950 |
|
AMD
K6, 300 MHz |
110 |
620 |
930 |
|
AMD
K6, 266 MHz |
100 |
580 |
850 |
|
AMD
K6, 233 MHz |
90 |
550 |
750 |
|
AMD
K6, 200 MHz |
80 |
520 |
640 |
|
Celeron
300 MHz |
100 |
610 |
1500 |
|
Cyrix
MII PR300 |
85 |
560 |
520 |
|
6x86MX
PR266 |
75 |
540 |
460 |
|
6x86MX
PR233 |
64 |
470 |
420 |
|
6x86MX
PR200 |
60 |
430 |
390 |
|
6x86
PR200 |
52 |
420 |
380 |
Processadores mais com clocks mais elevados apresentam índices de desempenho ainda maiores. A tabela que se segue mostra os índices CPUMark32, medidos com o programa Winbench 99 versão 1.2, para alguns processadores acima de 500 MHz. Note que os índices do Winbench 99 versão 1.2 não têm relação com os índices do Winbench 99 versão 1.0, usados na tabela anterior.
|
Processador
e clock |
CPUMark32
(ver 1.2) |
|
Athlon
1 GHz |
90 |
|
Athlon
800 MHz |
72 |
|
Athlon
600 MHz |
55 |
|
Pentium
III 1 GHz |
85 |
|
Pentium
III 800 MHz |
70 |
|
Pentium
III 600 MHz |
45 |
|
Duron
800 MHz |
65 |
Os velhos processadores 8086 e 8088 podiam operar em conjunto com um chip auxiliar chamado 8087. Este chip era chamado de processador (ou coprocessador) matemático. Era uma espécia de processador secundário, especializado em realizar cálculos com números reais em alta velocidade. Enquanto o 8086 e o 8088 faziam apenas adição, subtração, multiplicação e divisão de números inteiros de 32 bits, o 8087 podia realizar essas mesmas operações, e ainda uma grande quantidade de funções algébricas (raiz quadrada, logaritmo, exponencial, etc), trigonométricas (seno, tangente, arco tangente, etc) e hiperbólicas (seno hiperbólico, cosseno hiperbólico, etc), com números reais de 80 bits de mantissa (lembrando que um número real pode ser representado por uma base, ou mantissa, e um expoente). Programas que utilizam grandes quantidades de cálculos deste tipo ficavam incrivelmente mais velozes quando usavam o 8087. Normalmente, os softwares eram fornecidos simultaneamente em duas versões, uma para operar através do 8086/8088, e outra para usar o 8087. Quando o PC não tinha o 8087 instalado, mesmo assim podia realizar esses cálculos, mas estes eram feitos por etapas, o que era muito mais demorado. Os programas que se beneficiam de um coprocessador matemático são os seguintes:
CAD
(Computer Aided Design)
Programas para engenharia
Programas científicos
Programas que geram figuras tridimensionais
Ao lançar os seus novos processadores, a Intel sempre lançava também um coprocessador matemático compatível:
|
Processador |
Coprocessador
matemático |
|
8086
/ 8088 |
8087 |
|
80286 |
80287 |
|
80386SX |
80387SX |
|
80386DX |
80387DX |
Ao lançar o 486, a Intel finalmente colocou o coprocessador matemático dentro de próprio processador. O chamado 486DX possui um coprocessador matemático interno, enquanto o 486SX não o possui. Outros processadores mais avançados como o Pentium e o Pentium Pro também possuem o coprocessador matemático interno. O mesmo ocorre com todos os processadores produzidos depois do 486, ou seja, todos possuem um coprocessador matemático embutido. Esta parte do processador é chamada atualmente de unidade de ponto flutuante (FPU, ou Float Point Unit).
Antigamente apenas engenheiros, arquitetos e cientistas precisavam de um coprocessador matemático. No tempo em que reinava o processador 486, a sua unidade de ponto flutuante ficava praticamente ociosa, pois os softwares da época quase não a utilizavam. Hoje em dia, além das aplicações sérias já citadas, existe uma categoria de programas que faz uso intensivo da unidade de ponto flutuante: os jogos tridimensionais. A geração de imagens tridimensionais demanda uma grande quantidade de cálculos, portanto a unidade de ponto flutuante passou a ser um ítem essencial, mesmo para os usuários domésticos.