Posts Tagged "bits"

Confusões entre padrões de 32 bits e 64 bits do Windows

index_32-bit_vs_64-bitEstou na Universidade Federal Rural de Pernambuco na unidade de Serra Talhada esses dias. Na lanchonete, sentei ao lado de um grupo de alunos e uma “aluninha” fez uma pergunta simples ao seu colega de mesa, porém a resposta quase derreteu meus ouvidos, aqui vai uma breve transcrição da conversa:

Aluna: “Troquei meu notebook , no entando não estou conseguindo utilizar o software que a professora passou. Aparece a mensagem dizendo que o sistema é para máquinas de 64 bits. Qual a diferença entre processadores de 32 e 64 bits?”

Aluno: “É muito simples Aninha! você vai saber o que é 32 bits, ou 64 bits abrindo a máquina e vendo um PROCESSADOR. O processador é uma peça pequena quadrada que tem: 32 pinos ou 64 pinos de ouro. Isso mesmo OURO. Na placa mãe, vem uma peça quadrada branca que tem 32 buraquinhos, ou 64 buraquinho. Onde você vai acoplar o processador, nos buraquinhos.”

Aluna: “Que bom ter colegas inteligentes. Chegar em casa faço isso!”

Aluno: “Depois da aula passo em sua casa e faço isso para você…”

Notei um ar de sarcasmo na resposta final do aluno, pois sei que ele quer abrir muito mais do que o computador da colega. E quase engasguei com a resposta do sujeito. Intervi na conversa, falando que era professor novato do curso e estava conhecendo a Universidade. Elogiei o aluno, para ele não ficar triste se o consertasse, e perguntei onde ele tinha aprendido isso. O mesmo me disse: “No programa Olhar Digital!” Não revelei minha identidade secreta… ainda… pois os mesmos me convidaram para uma cervejada a noite na praça da cidade….

Vamos a algumas observações. Objetos no padrão de 32 bits (executáveis, bibliotecas e DLL´s do Windows) tem diferentes números mágicos (magic numbers) e cabeçalhos (headers) e não são iguais aos de 64 bits. Essa confusão sempre é feita principalmente pelos alunos de Computação nos primeiros anos de curso. A criar um programa o desenvolvedor tem de está atento a essas obscuridades. Executáveis de 32 bits requerem temporizadores e bibliotecas de 32 bits e de 64 bits também requerem temporizadores e bibliotecas de 64 bits. Isto implica diretamente no modo de execução das aplicações. Apenas processos de 32 bits são suportados em Windows de 32 bits, no entanto ambos, 32 e 64 bit, podem ser executados em Windows de 64 bits.

A diferença vai além de você ficar contando pinos dos processadores. A DLL de tempo de execução nativa do Windows sempre busca no PATH do sistema pelos executáveis. O sistema entende que todos executáveis no PATH estão no mesmo padrão da máquina e que “teoricamente” não teriam problemas em sua execução. O tamanho do tipo HANDLE no sistema da Microsoft é de 32 bits em um Windows de 32 bits e de 64 bits em Windows de 64 bits, mas apenas em processos de ordem baixa de 32 bits podem ser utilizados em sistemas de 64 bits. Além disso outros manipuladores com a mesma ordem baixa podem ser trocados entre processos de 32 e 64 bits.

Um único bit pode assumir duas possibilidades: 1 ou 0, o que é lógico, pois POW(2,1) (2 elevado a 1) é igual a 2 (possibilidades de com binação). Pelo mesmo raciocínio, POW(2,32) = 4294967296 possibilidades e, de igual modo, POW(2,64) = 18446744073709551616 .

Qual a diferença ou a vantagem? Simplesmente a precisão. Suponha que você trocou a placa de vídeo do seu computador, uma de 8 bits para uma com 16 bits. Nas especificações da placa mãe a amplitude máxima da voltagem do circuito é de 10V. Se o nosso processador da placa de vídeo fosse de apenas 8 bits, teríamos POW(2,8) = 256 combinações. Como o nível máximo é de 10V, temos = 10V/256 = 0,0390625V ≈ 39062,5 microvolts (1 microvolt é 1Volt / 1000000 = 0,000001V).

Isso significa que um pixel na tela somente seria identificado se ele subisse ou abaixasse 39062,5 microvolts. Por outro lado, com 64K (POW(2,16)) teríamos 10V/65536 ≈ 153 microvolts. Logo, para sentirmos uma variação na intensidade/tonalidade de determinada cor numa tela de vídeo, seriam precisos apenas 153 microvolts, o que determinaria uma resolução ou qualidade de imagem quase que reais. Ou seja, quanto menor o número na voltagem mais rápido e quanto mais bits mais rápido ou melhor resolução uma dada informação é processada.

O problema do WOW!

Windows on Windows, ou simplesmente WOW é uma terminologia que a Microsoft utiliza para ter suporte de 32 bits em máquinas nativas 64 bits. É uma emulação contínua que todo sistema Windows de 64 bits tem. Mais informações podem ser obtidas aqui. É fácil de entender o que é isso simplesmente pensando que grandes sistemas legados ainda utilizam o Windows como principal base de controle. Se retirar isso bilhões podem ser perdidos simplesmente pelo fato da migração. Isso é uma verdadeira bagunça!.

A lógica de armazenamento nos Windows de 32/64 bits é:

  • Executáveis do sistema e DLLs estão em: “C:\Windows\System32″;
  • Entradas de registros estão em: “HKLM\…”.

No entanto, certas chaves de registro tem visões de 32 e 64 bits. Em alguns casos as visões são separadas e mantidas consistentes entre elas no Windows. Em outros casos elas são completamente separadas:

O local de instalação de software no Windows:

  • Em Windows de 32 bits aplicações são instaladas em: “C:\Program Files”.
  • Em Windows de 64 bits aplicações são instaladas em “C:\Program Files (x86)” e aplicações de 64 bits são instaladas em: “C:\Program Files”.
  • Se considerarmos os arquivos de duplicação de nomes para linguagens fora do Inglês tem: “C:\Arquivos de Programas”.

Isso significa que o instalador deve mudar o diretório de instalação entre um e outro. Porém aí vem a complicação da Microsoft. Quem tiver o Visual Studio 11 – Visual C (mas pode ser outra versão) :

  • Compilador e binários do SDK 32 bits além das bibliotecas estão instalados nesses diretórios:
    C:\Program Files (x86)\Microsoft Visual Studio 11\VC\bin
    C:\Program Files (x86)\Microsoft Visual Studio 11\VC\lib
    C:\Program Files\Microsoft SDKs\Windows\vx86\bin
    C:\Program Files\Microsoft SDKs\Windows\amd\lib
  • Compilador e binários do SDK e bibliotecas de 64 bits:
    C:\Program Files (x86)\Microsoft Visual Studio 11\VC\bin\(amd64|x64)
    C:\Program Files (x86)\Microsoft Visual Studio 11\VC\lib\(amd64|x64)
    C:\Program Files\Microsoft SDKs\Windows\vx86\bin\x64
    C:\Program Files\Microsoft SDKs\Windows\amd\lib\x64

Notem que a Microsoft quebrou a própria regra dela! O Visual C por convenção deveria está instalado na pasta de 64 bits mas está nas duas!!! 'C:\Program Files (x86)’.

A bagaça mesmo acontece quando um processo de 32 bits tenta acessar arquivos e registros de 64 bits:

  • Em 64 bit o diretório 'C:\Windows\System32′ é 'C:\Windows\SysNative’.
  • Registros e chaves de de 64 bits devem ser acessados via flag KEY_WOW64_64KEY no Reg*() API. Não há nenhum nome ou mecanismo de registro e para isto requer recodificação no nível de aplicação.
  • O Visual C de 64 bits é envolto nisso, deve sempre ser recodificado para executar em um ambiente de 64 bits!

Mais engraçado ainda é quando um processo de 64 bits tenta acessar arquivos ou registros de 32 bits:

  • O diretório de 32 bit 'C:\Windows\System32′ é 'C:\Windows\SysWOW64′.
  • 'C:\Windows\System32′ é para executáveis e DLL´s de  for 64 bits, mas 'C:\Windows\SysNative’ é um caminho inválido para processos de 64 bits;
  • As chaves de registros de 32 bits devem ser acessados via flag KEY_WOW64_32KEY em Reg*() API. Não existe um mecanismo de registro de nomes: todas as chaves de 32 bits são alocadas em uma subchave de Wow6432Node, mas toas as documentações da Microsoft alesta sobre o uso disso!

Existem uma série de API que podem ajudar o Windows a se livrar de emulação da WOW tais como: GetSystemWow64Directory, Wow64DisableWow64FsRedirection, Wow64EnableWow64FsRedirection e Wow64RevertWow64FsRedirection. Isso não é coisa para crianças então não aconselho usar tais ferramentas.

As chaves de 32 e 64 bits são incompatíveis, a solução poderia utilizar recursos semelhantes ao Linux que não permite  uso de chaves de um em outro. Além das modificações diretas entre o que é de um sistema e outro no SO. Então cuidado quando for falar de SO de 32/64 bits… a não ser que queira impressionar as coleguinhas….

Mais informações em: blog.tune-up.com/windows-insights/32-bit-vs-64-bit-more-bit-more-performance/

Polling e Interrupções

Para tentar sanar um pouco as dúvidas dos alunos em cima de polling e interrupções aqui vai uma breve explicação sobre o assunto. Vale a pena lembrar que os exemplos a seguir estão disponíveis nos códigos-fonte do kernel do Linux.

Cada vez que um dispositivo do computador recebe um comando, como por exemplo, “buscar informações no setor 43 da fita DAT” o driver de dispositivo deve ter como descobrir que esse comando de busca foi concluído. Os drivers de dispositivo podem consultar o dispositivo (através de polling) ou eles podem usar interrupções.

Executar polling em um dispositivo normalmente significa ler seu registrador de estado tantas vezes for necessário, até que este indique não está mais em uso, para assim poder receber uma requisição. Como um driver de dispositivo é parte do kernel seria desastroso se um determinado driver, ao ser requisitado bloqueasse qualquer outra rotina no kernel até que este driver terminasse de ser utilizado.

Ao invés de usar a técnica de polling em dispositivos, o uso de timers (temporizadores) do sistema é mais prático, já que o kernel chama uma determinada rotina dentro do driver de dispositivo depois de algum tempo, impedindo que o mesmo fique bloqueado indefinidamente, e mantendo um pouco de previsibilidade. Esta rotina do timer iria verificar o estado do comando e isso é exatamente como funciona o driver de disco no Linux.

Polling por meio de timers é um método muito eficaz porém é muito mais eficiente a utilização de interrupções para tratar as requisições do computador. A interrupção é um recurso de hardware que os  dispositivos utilizam para indicar sempre que precisar ser utilizado.

Por exemplo, um dispositivo de rede, interromperia sempre que recebesse um pacote da rede. O kernel do Linux deve ser capaz de entregar a interrupção do dispositivo de hardware para o dispositivo correto, evitando que o dispositivo de rede fique bloqueado. Consegue-se isso através do registro do uso do driver do dispositivo com o kernel. Este registra o endereço de uma rotina de manipulação da interrupção e o número da interrupção que deseja possuir. O usuário pode ver qual interrupção está sendo usada pelo driver de dispositivo, bem como quantos tipos de interrupções existem acessando o arquivo /proc/interrupts:

cat /proc/interrupts

A saída é:

0:      727432   timer
1:       20534   keyboard
2:           0   cascade
3:       79691 + serial
4:       28258 + serial
5:           1   sound blaster
11:      20868 + aic7xxx
13:          1   math error
14:        247 + ide0
15:        170 + ide1

Essa requisição do recurso de interrupção é feita no momento de inicialização do driver. Observe o código a seguir que mostra que o kernel habilita uma flag chamada ok, caso esta esteja disponível para executar, muda seu valor e aguarda a interrupção de acordo com o número que lhe foi atribuído.

static int try_one_irq(int irq, struct irq_desc *desc)
 {
          struct irqaction *action;
          int ok = 0, work = 0;

          raw_spin_lock(&desc->lock);
          if (desc->status & IRQ_INPROGRESS) {
                  if (desc->action && (desc->action->flags & IRQF_SHARED))
                          desc->status |= IRQ_PENDING;
                  raw_spin_unlock(&desc->lock);
                  return ok;
          }
          /* Honour the normal IRQ locking */
          desc->status |= IRQ_INPROGRESS;
          action = desc->action;
          raw_spin_unlock(&desc->lock);

          while (action) {
                  /* Only shared IRQ handlers are safe to call */
                  if (action->flags & IRQF_SHARED) {
                          if (action->handler(irq, action->dev_id) == IRQ_HANDLED)
                                  ok = 1;
                  }
                  action = action->next;
          }

Algumas interrupções tem números fixos, isso é um legado da arquitetura do IBM PC :D. Então por exemplo, uma controladora de disquetes sempre usa a interrupção de número 6. Outras interrupções, por exemplo, como as dos dispositivos PCI, são alocadas dinamicamente no momento do boot do sistema operacional. Nesse caso o driver de dispositivo, deve primeiro descobrir o número da interrupção (IRQ) do dispositivo que está controlando, antes que este requisite prioritariamente uma interrupção.

Interrupções não são as únicas formas de interromper um programa em execução. Pode utilizar as exceções ou traps. Mais informações clique aqui.

Memória de Vídeo

Um aluno da disciplina Arquitetura de Computadores, Gerson Rodrigues, me mandou uma mensagem muito interessante a respeito de memória de vídeo. Fiquei muito satisfeito com a mensagem pois mostra o quadro comparativo de placas de vídeo. Então pensando nisso, procurei auxílio no livro de Raul Weber, de Arquitetura de Computadores sobre o assunto. Fiz uma compilação do assunto com as tabelas que Gerson me mandou.

Memória de Vídeo, armazena a forma digital da imagem que está sendo mostrada no monitor. Os dados contidos nessa memória é lido de 40 a 75 vezes por segundo (esse valor depende da frequencia de varredura vertical utilizada). O computador para gerar uma nova imagem deve escrever nessa memória ao mesmo tempo. Com memória normal que conhecemos, como SDRAM, essas operações não ocorreriam simultaneamente, devendo esta esperar pela outra operação, prejudicando o desempenho do vídeo com a CPU. Quando falamos em memória de vídeo compartilhada com a placa-mãe, acesso a esse tipo de informações fica comprometida, mesmo com a CPU de vídeo independente.

Memória de vídeo específica para esse tipo de placa são as VRAM (Vídeo RAM), que possuem duas portas de comunicações, facilitando dessa forma o acesso simultâneo de informações, de forma distinta. Funciona da seguinte maneira: Enquanto uma das portas permite escritas e leituras aleatórias, a outra porta, permite apenas a leitura sequencial. O custo desse tipo de memória é mais elevado por conta do maior controle e de aproximadamente 20% a mais de área de silício. A memória RAMBUS, que foi durante algum período comercializada em alguns produtos da Intel nos anos de 2000 a 2005, foi projetada para operar com transferência de dois bytes a cada pulso de clock.

Vídeo sobre a RAMBUS e o PS3

Tabela Comparativa dos Chips da NVIDIA

Chip Gráfico Clock Clock da Memória Memória Taxa de Transf. Memória Pixels por Clock DirectX
GeForce4 MX 420 250 MHz 166 MHz 128 bits 2,6 GB/s 1 7
GeForce4 MX 440 SE 250 MHz 333 MHz 64 bits 2,6 GB/s 1 7
GeForce4 MX 440 270 MHz 400 MHz 128 bits 6,4 GB/s 1 7
GeForce 4 MX 440 AGP 8x 275 MHz 512 MHz 128 bits 8,1 GB/s 1 7
GeForce4 MX 460 300 MHz 550 MHz 128 bits 8,8 GB/s 1 7
GeForce MX 4000 250 MHz * 32 bits, 64 bits ou 128 bits * 1 7
GeForce4 Ti 4200 250 MHz 514 MHz (64 MB) ou 444 MHz (128 MB) 128 bits 8,2 GB/s (64 MB) ou 7,1 GB/s (128 MB) 4 8.1
GeForce4 Ti 4200 AGP 8x 250 MHz 500 MHz 128 bits 8 GB/s 4 8.1
GeForce4 Ti 4400 275 MHz 550 MHz 128 bits 8,8 GB/s 4 8.1
GeForce4 Ti 4600 300 MHz 650 MHz 128 bits 10,4 GB/s 4 8.1
GeForce4 Ti 4800 SE 275 MHz 550 MHz 128 bits 8,8 GB/s 4 8.1
GeForce4 Ti 4800 300 MHz 650 MHz 128 bits 10,4 GB/s 4 8.1
GeForce FX 5200 250 MHz 400 MHz 64 bits ou 128 bits 3,2 GB/s ou 6,4 GB/s 4 9.0
GeForce FX 5200 Ultra 350 MHz 650 MHz 128 bits 10,4 GB/s 4 9.0
GeForce FX 5600 325 MHz 550 MHz 128 bits 8,8 GB/s 4 9.0
GeForce FX 5500 270 MHz 400 MHz 64 bits ou 128 bits 3,2 GB/s ou 6,4 GB/s 4 9.0
GeForce FX 5600 Ultra 500 MHz 800 MHz 128 bits 12,8 GB/s 4 9.0
GeForce FX 5700 LE 250 MHz 400 MHz 128 bits 6,4 GB/s 4 9.0
GeForce FX 5700 425 MHz 600 MHz 128 bits 9,6 GB/s 4 9.0
GeForce FX 5700 Ultra 475 MHz 900 MHz 128 bits 14,4 GB/s 4 9.0
GeForce FX 5800 400 MHz 800 MHz 128 bits 12,8 GB/s 8 9.0
GeForce FX 5800 Ultra 500 MHz 1 GHz 128 bits 16 GB/s 8 9.0
GeForce FX 5900 XT 390 MHz 680 MHz 256 bits 21,7 GB/s 8 9.0
GeForce FX 5900 400 MHz 850 MHz 256 bits 27,2 GB/s 8 9.0
GeForce FX 5900 Ultra 450 MHz 850 MHz 256 bits 27,2 GB/s 8 9.0
GeForce FX 5950 Ultra 475 MHz 950 MHz 256 bits 30,4 GB/s 8 9.0
GeForce PCX 5300 325 MHz 650 MHz 128 bits 10,4 GB/s 4 9.0
GeForce PCX 5750 475 MHz 900 MHz 128 bits 14,4 GB/s 4 9.0
GeForce PCX 5900 350 MHz 500 MHz 256 bits 17,6 GB/s 8 9.0
GeForce PCX 5950 475 MHz 900 MHz 256 bits 30,4 GB/s 8 9.0
GeForce 6200 300 MHz 550 MHz 128 bits 8,8 GB/s 4 9.0c
GeForce 6200 LE 350 MHz 550 MHz 64 bits 4,4 GB/s 2 9.0c
GeForce 6200 (TC) 350 MHz 666 MHz * 32 bits ou 64 bits 2,66 GB/s ou 5,32 GB/s *

4 9.0c
GeForce 6500 (TC) 400 MHz 666 MHz 32 bits ou 64 bits 2,66 GB/s ou 5,32 GB/s 4 9.0c
GeForce 6600 300 MHz 550 MHz * 64 bits ou 128 bits 4,4 GB/s ou 8,8 GB/s * 8 9.0c
GeForce 6600 DDR2 350 MHz 800 MHz * 128 bits 12,8 GB/s 8 9.0c
GeForce 6600 LE 300 MHz * 64 bits ou 128 bits 4 GB/s ou 8 GB/s 4 9.0c
GeForce 6600 GT 500 MHz 1 GHz 128 bits 16 GB/s 8 9.0c
GeForce 6600 GT AGP 500 MHz 900 MHz 128 bits 14,4 GB/s 8 9.0c
GeForce 6800 LE 300 MHz 700 MHz 256 bits 22,4 GB/s 8 9.0c
GeForce 6800 XT 325 MHz 600 MHz 256 bits 19,2 GB/s 8 9.0c
GeForce 6800 XT AGP 325 MHz 700 MHz 256 bits 22,4 GB/s 8 9.0c
GeForce 6800 325 MHz 600 MHz 256 bits 19,2 GB/s 12 9.0c
GeForce 6800 AGP 325 MHz 700 MHz 256 bits 22,4 GB/s 12 9.0c
GeForce 6800 GS 425 MHz 1 GHz 256-bit 32 GB/s 12 9.0c
GeForce 6800 GS AGP 350 MHz 1 GHz 256-bit 32 GB/s 12 9.0c
GeForce 6800 GT 350 MHz 1 GHz 256 bits 32 GB/s 16 9.0c
GeForce 6800 Ultra 400 MHz 1,1 GHz 256 bits 35,2 GB/s 16 9.0c
GeForce 6800 Ultra Extreme 450 MHz 1,1 GHz 256 bits 35,2 GB/s 16 9.0c
GeForce 7100 GS (TC) 350 MHz 666 MHz * 64 bits 5,32 GB/s * 4 9.0c
GeForce 7200 GS (TC) 450 MHz 800 MHz * 64 bits 6,4 GB/s * 4 9.0c
GeForce 7300 SE (TC) 225 MHz * 64 bits * 4 9.0c
GeForce 7300 LE (TC) 450 MHz 648 MHz * 64 bits 5,2 GB/s * 4 9.0c
GeForce 7300 GS (TC) 550 MHz 810 MHz * 64 bits 6,5 GB/s * 4 9.0c
GeForce 7300 GT (TC) 350 MHz 667 MHz 128 bits 10,6 GB/s 8 9.0c
GeForce 7600 GS 400 MHz 800 MHz 128 bits 12,8 GB/s 12 9.0c
GeForce 7600 GT 560 MHz 1,4 GHz 128 bits 22,4 GB/s 12 9.0c
GeForce 7800 GS 375 MHz 1.2 GHz 256 bits 38,4 GB/s 16 9.0c
GeForce 7800 GT 400 MHz 1 GHz 256 bits 32 GB/s 20 9.0c
GeForce 7800 GTX 430 MHz 1,2 GHz 256 bits 38,4 GB/s 24 9.0c
GeForce 7800 GTX 512 550 MHz 1,7 GHz 256 bits 54,4 GB/s 24 9.0c
GeForce 7900 GS 450 MHz 1,32 GHz 256 bits 42,2 GB/s 20 9.0c
GeForce 7900 GT 450 MHz 1,32 GHz 256 bits 42,2 GB/s 24 9.0c
GeForce 7900 GTX 650 MHz 1,6 GHz 256 bits 51,2 GB/s 24 9.0c
GeForce 7950 GT 550 MHz 1,4 GHz 256 bits 44,8 GB/s 24 9.0c
GeForce 7950 GX2 ** 500 MHz 1,2 GHz x2 256 bits x2 38,4 GB/s x2 24 x2 9.0c
GeForce 8400 GS *** 450 MHz / 900 MHz 800 MHz 64 bits 6,4 GB/s 16 10
GeForce 8500 GT *** 450 MHz / 900 MHz 666 MHz ou 800 MHz 128 bits 10,6 GB/s ou 12,8 GB/s 16 10
GeForce 8600 GT (DDR2) *** 540 MHz / 1,18 GHz 666 MHz ou 800 MHz 128 bits 10,6 GB/s ou 12,8 GB/s 32 10
GeForce 8600 GT (GDDR3) *** 540 MHz / 1,18 GHz 1,4 GHz 128 bits 22,4 GB/s 32 10
GeForce 8600 GTS *** 675 MHz / 1,45 GHz 2 GHz 128 bits 32 GB/s 32 10
GeForce 8800 GS *** ^ 550 MHz / 1.375 MHz 1.6 GHz 192 bits 38,4 GB/s 96 10
GeForce 8800 GT *** ^ 600 MHz / 1,5 GHz 1,8 GHz 256 bits 57,6 GB/s 112 10
GeForce 8800 GTS *** 500 MHz / 1,2 GHz 1,6 GHz 320 bits 64 GB/s 96 10
GeForce 8800 GTS 512 *** ^ 650 MHz / 1.625 MHz 1,94 GHz 256 bits 62,08 GB/s 128 10
GeForce 8800 GTX *** 575 MHz / 1,35 GHz 1,8 GHz 384 bits 86,4 GB/s 128 10
GeForce 8800 Ultra *** 612 MHz / 1,5 GHz 2,16 GHz 384 bits 103,6 GB/s 128 10
GeForce 9400 GT *** ^ 550 MHz / 1,4 GHz 800 MHz 128 bits 12,8 GB/s 16 10
GeForce 9500 GT *** ^ 550 MHz / 1,4 GHz 1 GHz (DDR2) ou 1,6 GHz (GDDR3) 128 bits 16 GB/s (DDR2) ou 25,6 GB/s (GDDR3) 32 10
GeForce 9600 GSO *** ^ 550 MHz / 1,35 GHz 1,6 GHz 192 bits 38,4 GB/s 96 10
GeForce 9600 GSO 512 *** ^ 650 MHz / 1.625 MHz 1,8 GHz 256 bits 57,6 GB/s 48 10
GeForce 9600 GT *** ^ 600 MHz / 1,5 GHz ou 650 MHz / 1.625 MHz 1,8 GHz 256 bits 57,6 GB/s 64 10
GeForce 9800 GT *** ^ 600 MHz / 1,5 GHz 1,8 GHz 256 bits 57,6 GB/s 112 10
GeForce 9800 GTX *** ^ 675 MHz / 1.688 MHz 2,2 GHz 256 bits 70,4 GB/s 128 10
GeForce 9800 GTX+ *** ^ 738 MHz / 1.836 MHz 2,2 GHz 256 bits 70,4 GB/s 128 10
GeForce 9800 GX2 ** *** ^ 600 MHz / 1,5 GHz 2 GHz 256 bits 64 GB/s 128 10
GeForce G 100 *** ^ 567 MHz / 1,4 GHz 1 GHz 64 bits 8 GB/s 8 10
GeForce GT 120 *** ^ 500 MHz / 1,4 GHz 1 GHz 128 bits 16 GB/s 32 10
GeForce GT 130 *** ^ 500 MHz / 1,25 GHz 1 GHz 192 bits 24 GB/s 48 10
GeForce GTS 150 *** ^ 738 MHz / 1.836 MHz 2 GHz 256 bits 64 GB/s 128 10
GeForce 205 *** ^ 589 MHz / 1.402 MHz 1 GHz 64 bits 8 GB/s 8 10.1
GeForce 210 *** ^ 589 MHz / 1.402 MHz 1 GHz 64 bits 8 GB/s 16 10.1
GeForce GT 220 *** ^ 625 MHz / 1.360 MHz 1,58 GHz 128 bits 25,28 GB/s 48 10.1
GeForce GT 240 *** ^ 550 MHz / 1.340 MHz 1,8 GHz (DDR3) ou 2 GHz (GDDR3) ou 3,4 GHz (GDDR5) 128 bits 28,8 GB/s (DDR3) ou 32 GB/s (GDDR3) ou 54,4 GB/s (GDDR5) 96 10.1
GeForce GTS 250 *** ^ 738 MHz / 1.836 MHz 2,2 GHz 256 bits 70,4 GB/s 128 10
GeForce GTX 260 *** ^ 576 MHz / 1.242 MHz 2 GHz 448 bits 112 GB/s 192 10
GeForce GTX 260/216 *** ^ 576 MHz / 1.242 MHz 2 GHz 448 bits 112 GB/s 216 10
GeForce GTX 275 *** ^ 633 MHz / 1.404 MHz 2,268 GHz 448 bits 127 GB/s 240 10
GeForce GTX 280 *** ^ 602 MHz / 1.296 MHz 2,21 GHz 512 bits 141,7 GB/s 240 10
GeForce GTX 285 *** ^ 648 MHz / 1.476 MHz 2,48 GHz 512 bits 159 GB/s 240 10
GeForce GTX 295 ** *** ^ 576 MHz / 1.242 MHz 2 GHz 448 bits 112 GB/s 240 10
GeForce 310 *** ^ 589 MHz / 1.402 MHz 1 GHz 64 bits 8 GB/s 16 10.1
GeForce GTX 470 *** ^ 607 MHz / 1.215 MHz 3.348 MHz 320 bits 133,9 GB/s 448 11
GeForce GTX 480 *** ^ 700 MHz / 1.401 MHz 3.696 MHz 384 bits 177,4 GB/s 480 11

* O fabricante da placa pode definir um outro clock de memória e uma outra interface de memória, portanto você deve prestar atenção porque nem todas as placas baseadas neste chip seguem estas especificações. A taxa de transferência da memória depende do clock da memória e da interface de memória. Veja abaixo como calculá-la.

** A GeForce 7950 GX2, a GeForce 9800 GX2 e a GeForce GTX 295 usam dois chips gráficos trabalhando em paralelo (SLI). Os dados publicados são para apenas um dos chips.

*** As séries GeForce 8, 9, 100, 200, 300 e 400 usam dois clocks, um mais alto para os motores de sombreamento e outro mais baixo para o restante do chip. As unidades de sombreamento são unificadas, significando que não há unidades separadas de sombreamento de pixels e de sombreamento de vértices. Leia nosso artigo Arquitetura da Série GeForce 8 para mais informações.

^ Usa o barramento PCI Express 2.0, que dobra a largura de banda disponível para a comunicação com o PC de 2,5 GB/s para 5 GB/s caso uma placa-mãe com slot PCI Express 2.0 seja usada.

(TC) significa TurboCache, uma tecnologia que permite à placa de vídeo simular ter mais memória de vídeo usando parte da memória RAM do micro como memória de vídeo.

Tabela Comparativa dos Chips da ATI

Chip Gráfico Clock Clock da Memória Memória Taxa de Transf. Memória Pixels por clock DirectX
Radeon 9200 250 MHz 400 MHz 128 bits 6,4 GB/s 4 8.1
Radeon 9200 Pro 275 MHz 550 MHz 128 bits 8,8 GB/s 4 8.1
Radeon 9200 SE 200 MHz 333 MHz 64 bits 2,6 GB/s 4 8.1
Radeon 9250 240 MHz 400 MHz 128 bits 6,4 GB/s 4 8.1
Radeon 9250 SE 240 MHz 400 MHz 64 bits 3,2 GB/s 4 8.1
Radeon 9500 275 MHz 540 MHz 128 bits 8,6 GB/s 4 9.0
Radeon 9550 250 MHz 400 MHz 128 bits 6,4 GB/s 4 9.0
Radeon 9550 SE 250 MHz 400 MHz 64 bits 3,2 GB/s 4 9.0
Radeon 9500 Pro 275 MHz 540 MHz 128 bits 8,6 GB/s 8 9.0
Radeon 9600 325 MHz 400 MHz 128 bits 6,4 GB/s 4 9.0
Radeon 9600 Pro 400 MHz 600 MHz 128 bits 9,6 GB/s 4 9.0
Radeon 9600 SE 325 MHz 400 MHz 64 bits 3,2 GB/s 4 9.0
Radeon 9600 XT 500 MHz 600 MHz 128 bits 9,6 GB/s 4 9.0
Radeon 9700 275 MHz 540 MHz 256 bits 17,2 GB/s 8 9.0
Radeon 9700 Pro 325 MHz 620 MHz 256 bits 19,8 GB/s 8 9.0
Radeon 9800 325 MHz 580 MHz 256 bits 18,56 GB/s 8 9.0
Radeon 9800 Pro 380 MHz 680 MHz 256 bits 21,7 GB/s 8 9.0
Radeon 9800 SE 325 MHz 500 MHz 128 bits ou 256 bits 8 GB/s ou 16 GB/s 4 9.0
Radeon 9800 XT 412 MHz 730 MHz 256 bits 23,3 GB/s 8 9.0
Radeon X300 SE 325 MHz 400 MHz 64 bits 3,2 GB/s 4 9.0
Radeon X300 325 MHz 400 MHz 128 bits 6,4 GB/s 4 9.0
Radeon X550 400 MHz 500 MHz 128 bits ou 64 bits 8 GB/s ou 4 GB/s 4 9.0
Radeon X600 Pro 400 MHz 600 MHz 128 bits 9,6 GB/s 4 9.0
Radeon X600 XT 500 MHz 730 MHz 128 bits 11,68 GB/s 4 9.0
Radeon X700 400 MHz 600 MHz 128 bits 9,6 GB/s 8 9.0
Radeon X700 Pro 420 MHz 864 MHz 128 bits 13,8 GB/s 8 9.0
Radeon X700 XT 475 MHz 1,05 GHz 128 bits 16,8 GB/s 8 9.0
Radeon X800 SE * * * * 8 9.0
Radeon X800 400 MHz 700 MHz 256 bits 22,4 GB/s 12 9.0
Radeon X800 XL 400 MHz 1 GHz 256 bits 32 GB/s 16 9.0
Radeon X800 GT 475 MHz ** 128 bits ou 256 bits ** 8 9.0
Radeon X800 GTO 400 MHz 1 GHz *** 256 bits 32 GB/s 12 9.0
Radeon X800 Pro 475 MHz 950 MHz 256 bits 30,4 GB/s 12 9.0
Radeon X800 XT 500 MHz 1 GHz 256 bits 32 GB/s 16 9.0
Radeon X800 XT PE 520 MHz 1,12 GHz 256 bits 35,8 GB/s 16 9.0
Radeon X850 Pro 520 MHz 1,08 GHz 256 bits 34,56 GB/s 12 9.0
Radeon X850 XT 520 MHz 1,08 GHz 256 bits 34,56 GB/s 16 9.0
Radeon X850 PE 540 MHz 1,18 GHz 256 bits 37,76 GB/s 16 9.0
Radeon X1050 **** **** **** **** 4 9.0c
Radeon X1300 HM 450 MHz 1 GHz 128 bits ou 64 bits ou 32 bits 16 GB/s ou 8 GB/s ou 4 GB/s 4 9.0c
Radeon X1300 450 MHz 500 MHz 128 bits ou 64 bits ou 32 bits 8 GB/s ou 4 GB/s ou 2 GB/s 4 9.0c
Radeon X1300 Pro 600 MHz 800 MHz 128 bits ou 64 bits ou 32 bits 12,8 GB/s ou 6,4 GB/s ou 3,2 GB/s 4 9.0c
Radeon X1300 XT 500 MHz 800 MHz (DDR2) ou 1 GHz (GDDR3) 128 bits 12,8 GB/s ou 16 GB/s 12 9.0c
Radeon X1550 450 MHz ou 550 MHz ou 600 MHz 800 MHz 64 bits ou 128 bits 6,4 GB/s ou 12,8 GB/s 4 9.0c
Radeon X1600 Pro 500 MHz ou 575 MHz 780 MHz 128 bits 12,48 GB/s 12 9.0c
Radeon X1600 XT 590 MHz 1,38 GHz 128 bits 22,08 GB/s 12 9.0c
Radeon X1650 Pro 600 MHz 1,4 GHz 128 bits 22,4 GB/s 12 9.0c
Radeon X1650 XT 575 MHz 1,35 GHz 128 bits 21,60 GB/s 24 9.0c
Radeon X1800 GTO 500 MHz 1 GHz 256 bits 32 GB/s 12 9.0c
Radeon X1800 XL 500 MHz 1 GHz 256 bits 32 GB/s 16 9.0c
Radeon X1800 XT 625 MHz 1,5 GHz 256 bits 48 GB/s 16 9.0c
Radeon X1900 GT 575 MHz 1,2 GHz 256 bits 38,4 GB/s 36 9.0c
Radeon X1900 XT 625 MHz 1,45 GHz 256 bits 46,4 GB/s 48 9.0c
Radeon X1900 XTX 650 MHz 1,55 GHz 256 bits 49,6 GB/s 48 9.0c
Radeon X1950 GT 500 MHz 1,2 GHz 256 bits 38,4 GB/s 36 9.0c
Radeon X1950 Pro 575 MHz 1,38 GHz 256 bits 44,16 GB/s 36 9.0c
Radeon X1950 XT 625 MHz 1,8 GHz 256 bits 57,6 GB/s 48 9.0c
Radeon X1950 XTX 650 MHz 2 GHz 256 bits 64 GB/s 48 9.0c
Radeon HD 2400 Pro 525 MHz 800 MHz 64 bits 6,4 GB/s 40 ***** 10
Radeon HD 2400 XT 700 MHz 1,6 GHz 64 bits 12,8 GB/s 40 ***** 10
Radeon HD 2600 Pro 600 MHz 800 MHz 128 bits 12,8 GB/s 120 ***** 10
Radeon HD 2600 XT 800 MHz 1,6 GHz (GDDR3) ou 2,2 GHz (GDDR4) 128 bits 25,6 GB/s (GDDR3) ou 35,2 GB/s (GDDR4) 120 ***** 10
Radeon HD 2900 GT 600 MHz 1,6 GHz 256 bits 51,2 GB/s 240 ***** 10
Radeon HD 2900 Pro 600 MHz 1,85 GHz 512 bits 118,4 GB/s 320 ***** 10
Radeon HD 2900 XT 740 MHz 1,65 GHz (GDDR3) ou 2 GHz (GDDR4) 512 bits 105,6 GB/s (GDDR3) ou 128 GB/s (GDDR4) 320 ***** 10
Radeon HD 3450 ^ 600 MHz 1 GHz 64 bits 8 GB/s 40 ***** 10.1
Radeon HD 3470 ^ 800 MHz 1.9 GHz 64 bits 15,2 GB/s 40 ***** 10.1
Radeon HD 3650 ^ 725 MHz 1 GHz (DDR2) ou 1,6 GHz (GDDR3) 128 bits 16 GB/s (DDR2) ou 25,6 GB/s (GDDR3) 120 ***** 10.1
Radeon HD 3850 ^ 670 MHz 1,66 GHz 256 bits 53,12 GB/s 320 ***** 10.1
Radeon HD 3690 ^ 668 MHz 1.656 MHz 128 bits 26,5 GB/s 120 ***** 10.1
Radeon HD 3870 ^ 775 MHz 2,25 GHz 256 bits 72 GB/s 320 ***** 10.1
Radeon HD 3870 X2 ^ + 825 MHz 1,8 GHz 256 bits 57,6 GB/s 320 ***** 10.1
Radeon HD 4350 ^ 600 MHz 1 GHz 64 bits 8 GB/s 80 ***** 10.1
Radeon HD 4550 ^ 800 MHz 1.6 GHz 64 bits 12,8 GB/s 80 ***** 10.1
Radeon HD 4650 ^ 600 MHz 1 GHz ou 1,4 GHz 128 bits 16 GB/s ou 22,4 GB/s 320 ***** 10.1
Radeon HD 4670 ^ 750 MHz 2 GHz (512 MB) ou 1.746 MHz (1 GB) 128 bits 32 GB/s ou 27,94 GB/s 320 ***** 10.1
Radeon HD 4730 ^ 750 MHz 1,8 GHz 128 bits 28,8 GB/s 640 ***** 10.1
Radeon HD 4770 ^ 750 MHz 3,2 GHz 128 bits 51,2 GB/s 640 ***** 10.1
Radeon HD 4830 ^ 575 MHz 1,8 GHz 256 bits 57,6 GB/s 640 ***** 10.1
Radeon HD 4850 ^ 625 MHz 2 GHz 256 bits 64 GB/s 800 ***** 10.1
Radeon HD 4850 X2 ^ + 625 MHz 2 GHz 256 bits 64 GB/s 800 ***** 10.1
Radeon HD 4870 ^ 750 MHz 3,6 GHz 256 bits 115,2 GB/s 800 ***** 10.1
Radeon HD 4870 X2 ^ + 750 MHz 3,6 GHz 256 bits 115,2 GB/s 800 ***** 10.1
Radeon HD 4890 ^ 850 MHz 3,9 GHz 256 bits 124,8 GB/s 800 ***** 10.1
Radeon HD 5450 ^ 650 MHz 800 MHz (DDR2) ou 1.6 GHz (DDR3) 64 bits 6.4 GB/s (DDR2) ou 12.8 GB/s (DDR3) 80 ***** 11
Radeon HD 5570 ^ 650 MHz 1.8 GHz 128 bits 28,8 GB/s 400 ***** 11
Radeon HD 5670 ^ 775 MHz 4 GHz 128 bits 64 GB/s 400 ***** 11
Raden HD 5750 ^ 705 MHz 4.6 GHz 128 bits 73,6 GB/s 720 ***** 11
Radeon HD 5770 ^ 850 MHz 4,8 GHz 128 bits 76,8 GB/s 800 ***** 11
Radeon HD 5830 ^ 800 MHz 4 GHz 256 bits 128 GB/s 1.120 ***** 11
Radeon HD 5850 ^ 725 MHz 4 GHz 256 bits 128 GB/s 1.440 ***** 11
Radeon HD 5870 ^ 850 MHz 4,8 GHz 256 bits 153,6 GB/s 1.600 ***** 11
Radeon HD 5970 ^ + 725 MHz 4 GHz 256 bits 128 GB/s 1.600 ***** 11

* ATI não determina um clock padrão para o Radeon X800 SE. As especificações dependem do fabricante da placa de vídeo. Por isso, tome cuidado na hora de comparar placas de vídeo usando esse chip.

** Depende do modelo. Tem placas baseadas no Radeon X800 GT usando memórias DDR, DDR2 e GDDR3 rodando a diferentes velocidades. Temos visto modelos baseados na memória GDDR3 rodando a 980 MHz e modelos baseados na DDR rodando a 700 MHz. Você pode calcular a taxa de transferência da memória através da fórmula clock de memória x número de bits / 8. Um modelo com memória GDDR3 rodando a 980 MHz e interface de 256 bits tem uma taxa de transferência de 31,36 GB/s.

*** Há modelos usando memórias DDR e clocks inferiores.

**** Há três versões de placas de vídeo usando este chip gráfico, com características bem diferentes, dependendo da memória que é usada. Se a memória for de 128 MB DDR o chip gráfico roda a 400 MHz, a memória roda a 500 MHz, é usada uma interface de memória de 128 bits e a memória tem uma taxa máxima teórica de 8 GB/s. Se a placa tem 128 MB DDR2 então o chip roda a 325 MHz, a memória roda a 666 MHz, é usada uma interface de memória de 64 bits e a memória tem uma taxa máxima teórica de 5.3 GB/s. E finalmente se a placa tem 256 MB DDR2 então o chip roda a 400 MHz, a memória roda a 666 MHz, a interface de memória é de 128 bits e a memória tem uma taxa máxima teórica de 10.6 GB/s.

***** A unidade de sombreamento é unificada, significando que este chip não possui unidades separadas para sombreamento de pixels e de vértices. Leia o nosso artigo Arquitetura da Série AMD ATI Radeon HD 2000 para mais informações. Fabricantes podem usar outros clocks de memória nos modelos da série HD 2400 e HD 2600, normalmente mais baixos e, portanto, atingindo desempenho inferior ao modelo padrão. Os clocks listados são os clocks padrão definidos pela ATI.

^ Usa o barramento PCI Express 2.0, que dobra a largura de banda disponível para a comunicação com o PC de 2,5 GB/s para 5 GB/s caso uma placa-mãe com slot PCI Express 2.0 seja usada.

+ O Radeon HD 3870 X2, o HD 4850 X2, o HD 4870 X2 e o HD 5970 usam dois chips Radeon trabalhando em paralelo (CrossFire). As especificações publicadas são apenas para um dos chips.

Sistemas de RAID

O sistema RAID (redundant array of independent disks ou também conhecido como redundant array of inexpensive disks) consiste em um conjunto de dois ou mais discos rígidos com dois objetivos básicos: tornar o sistema de disco mais rápido (isto é, acelerar o carregamento de dados do disco), através de uma técnica chamada divisão de dados (data stripping ou RAID 0) e/ou tornar o sistema de disco mais seguro, através de uma técnica chamada espelhamento (mirroring ou RAID 1). Essas duas técnicas podem ser usadas isoladamente ou em conjunto.

Vamos falar primeiro na divisão de dados. Imagine um micro equipado com dois discos rígidos iguais. Em um micro comum, sem RAID, um disco é acessado independentemente do outro. Na técnica de divisão de dados, os dois discos rígidos farão parte de um mesmo conjunto, fazendo com que o micro “pense” que os dois discos rígidos é um só disco maior. Se os dois discos são de 20 GB, então o micro “pensará” que existe um disco rígido único de 40 GB instalado no micro. Na hora de gravar um arquivo no disco, o sistema RAID irá dividir esse arquivo entre os dois discos rígidos, gravando metade do arquivo em um disco e a outra metade do arquivo no outro disco. Tudo isso é feito sem que o usuário perceba.

Mas qual é a vantagem disso? Vamos supor que você esteja gravando um arquivo de 200 KB. No sistema de disco tradicional, esse arquivo terá de ser gravado por inteiro em um só disco, usando o único canal de comunicação existente. No caso da divisão de dados, esse arquivo será dividido em dois arquivos de 100 KB, sendo que cada um será gravado em um dos discos existentes ao mesmo tempo. Ora, como um arquivo de 100 KB demora a metade do tempo para ser gravado em um disco que um arquivo de 200 KB, a velocidade de acesso ao disco rígido dobrou!

Para você ter uma idéia mais concreta, imagine que você esteja trabalhando com um arquivo de dados realmente grande, por exemplo 100 MB (realmente grande para usuários comuns, mas se pensarmos em edição profissional de áudio e vídeo, um arquivo desse tamanho é relativamente comum). Se o seu disco rígido (e sua placa-mãe) forem do padrão ATA-100, isso significa que ele teoricamente transfere dados a 100 MB/s. Dizemos “teoricamente” porque na prática essa taxa é mais baixa. Mas vamos continuar com nosso exemplo teórico. Esse arquivo demora, portanto 1 segundo para ser transferido (lido ou gravado). Se usarmos um sistema RAID 0 nesse micro, isto é, usarmos dois discos rígidos iguais com divisão de dados e supondo que esses discos são ATA-100, então ocorrerá que o mesmo arquivo será dividido em dois de 50 MB e, com isso, demorará apenas 0,5 s para ser gravado (ou lido) em cada disco. Como o acesso aos dois discos ocorre de forma simultânea, o tempo total para acessar o mesmo disco passa a ser a metade (0,5 s), ou seja, o desempenho dobra.

Só que o sistema RAID não é limitado a apenas dois discos rígidos. Podemos, em princípio, colocar quantos discos quisermos. Nesse mesmo exemplo, se usarmos quatro discos iguais em vez de um, o micro “pensará” que os quatro discos são apenas um e dividirá automaticamente o arquivo em quatro, quadruplicando a velocidade de leitura e gravação do arquivo. No mesmo exemplo do arquivo de 100 MB, ele será dividido automaticamente em quatro de 25 MB e, com isso, será gravado em apenas 0,25 s, se supormos discos ATA-100.

Sistema RAID 0

If you can see this, then you might need a Flash Player upgrade or you need to install Flash Player if it's missing. Get Flash Player from Adobe.

Sistema RAID 1

If you can see this, then you might need a Flash Player upgrade or you need to install Flash Player if it's missing. Get Flash Player from Adobe.

Sistema RAID 2

Sistema RAID 3

Sistema RAID 4

Sistema RAID 5

If you can see this, then you might need a Flash Player upgrade or you need to install Flash Player if it's missing. Get Flash Player from Adobe.

Sistema RAID 6

If you can see this, then you might need a Flash Player upgrade or you need to install Flash Player if it's missing. Get Flash Player from Adobe.

Sistema RAID 10

Sistema RAID 50

Sistema RAID 0+1

If you can see this, then you might need a Flash Player upgrade or you need to install Flash Player if it's missing. Get Flash Player from Adobe.

Esquemas de flip-flop – Registrador e Contador