Arquitetura de Computadores - Uma Aborda

Arquitetura de Computadores - Uma Aborda

(Parte 5 de 8)

Computação de desktop O primeiro e maior mercado em termos financeiros ainda é o de computadores desktop. A computação desktop varia desde sistemas inferiores, vendidos por menos de US$ 300, até estações de trabalho de ponta altamente configuradas, que podem custar US$ 2.500. Desde 2008, mais da metade dos computadores desktops fabricados, por ano, corresponde a computadores laptop alimentados por bateria.

Por todo esse intervalo de preço e capacidade, o mercado de desktop costuma ser orientado a otimizar a relação preço-desempenho. Essa combinação de desempenho (medido principalmente em termos de desempenho de cálculo e desempenho de gráficos) e preço de um sistema é o que mais importa para os clientes nesse mercado e, portanto, para os projetistas de computadores. Como resultado, os microprocessadores mais novos, de desempenho mais alto, e os microprocessadores de custo reduzido normalmente aparecem primeiro nos sistemas de desktop (ver, na Seção 1.6, uma análise das questões que afetam o custo dos computadores).

A computação de desktop também costuma ser razoavelmente bem caracterizada em termos de aplicações e benchmarking, embora o uso crescente de aplicações centradas na web, interativas, imponha novos desafios na avaliação do desempenho.

Servidores Com a passagem para a computação desktop nos anos 1980, o papel dos servidores cresceu para oferecer serviços de arquivo e computação em maior escala e mais seguros. Tais servidores se tornaram a espinha dorsal da computação empresarial de alta escala, substituindo o mainframe tradicional.

Para os servidores, diferentes características são importantes. Primeiro, a disponibilidade é crítica (discutimos a dependência na Seção 1.7). Considere os servidores que suportam as máquinas de caixa eletrônico para bancos ou os sistemas de reserva de linhas aéreas. As falhas desses sistemas de servidor são muito mais catastróficas do que as falhas de um único desktop, pois esses servidores precisam operar sete dias por semana, 24 horas por dia. A Figura 1.3 estima as perdas de receita em função do tempo de paralisação para aplicações de servidor.

FIGURA 1.3 Os custos arredondados para o milhar mais próximo de um sistema não disponível são mostrados com uma análise do custo do tempo de paralisação (em termos de receita perdida imediatamente), considerando três níveis de disponibilidade diferentes e que o tempo de paralisação é distribuído uniformemente. Esses dados são de Kembel (2000) e foram coletados e analisados pela Contingency Planning Research.

Por fim, os servidores são projetados para um throughput eficiente. Ou seja, o desempenho geral do servidor — em termos de transações por minuto ou páginas web atendidas por segundo — é o fator crucial. A capacidade de resposta a uma solicitação individual continua sendo importante, mas a eficiência geral e a eficiência de custo, determinadas por quantas solicitações podem ser tratadas em uma unidade de tempo, são as principais métricas para a maioria dos servidores. Retornamos à questão de avaliar o desempenho para diferentes tipos de ambientes de computação na Seção 1.8.

Computadores clusters/escala wharehouse O crescimento do software como serviço (Software as a Service — SaaS) para aplicações como busca, redes sociais, compartilhamento de vídeo, games multiplayer, compras on-line, e assim por diante, levou ao crescimento de uma classe de computadores chamados clusters. Clusters são coleções de computadores desktop ou servidores conectados por redes locais para funcionar como um único grande computador. Cada nó executa seu próximo sistema operacional, e os nós se comunicam usando um protocolo de rede. Os maiores clusters são chamados computadores de armazenamento em escala (Warehouse-Scale Computers — WSCs), uma vez que eles são projetados para que dezenas de milhares de servidores possam funcionar como um só. O Capítulo 6 descreve essa classe de computadores extremamente grandes.

A relação preço-desempenho e o consumo de potência são críticos para os WSCs, já que eles são tão grandes. Como o Capítulo 6 explica, 80% do custo de US$ 90 milhões de um WSC é associado à potência e ao resfriamento interior dos computadores. Os próprios computadores e o equipamento de rede custam outros US$ 70 milhões e devem ser substituídos após alguns anos de uso. Ao comprar tanta computação, você precisa fazer isso com sabedoria, já que uma melhoria de 10% no desempenho de preço significa uma economia de US$ 7 milhões (10% de 70 milhões).

Os WSCs estão relacionados com os servidores no sentido de que a disponibilidade é crítica. Por exemplo, a Amazon.com teve US$ 13 bilhões de vendas no quarto trimestre de 2010. Como em um trimestre há cerca de 2.200 horas, a receita média por hora foi de quase US$ 6 milhões. Durante uma hora de pico de compras no Natal, a perda potencial seria muitas vezes maior. Como explicado no Capítulo 6, a diferença em relação aos servidores é que os WSCs usam componentes redundantes baratos, como building blocks, confiando em uma camada de software para capturar e isolar as muitas falhas que vão ocorrer com a computação nessa escala. Note que a escalabilidade para um WSC é tratada pela rede LAN que conecta os computadores, e não por um hardware integrado de computador, como no caso dos servidores.

Uma categoria relacionada comos WSCs é a dos supercomputadores, que custam dezenas de milhões de dólares, mas os supercomputadores são diferentes, pois enfatizam o desempenho em ponto flutuante e, a cada vez, executam programas em lotes grandes, com comunicação pesada, por semanas. Esse acoplamento rígido leva ao uso de redes internas muito mais rápidas. Em contraste, os WSCs enfatizam aplicações interativas, armazenamento em grande escala, dependência e grande largura de banda de internet.

Computadores embarcados Os computadores embarcados são encontrados em máquinas do dia a dia: fornos de micro-ondas, máquinas de lavar, a maioria das impressoras, switches de rede e todos os carros contêm microprocessadores embarcados simples.

Muitas vezes, os processadores em um PMD são considerados computadores embarcados, mas os estamos colocando em uma categoria separada, porque os PMDs são plataformas que podem executar softwares desenvolvidos externamente e compartilham muitas das

características dos computadores desktop. Outros dispositivos embarcados são mais limitados em sofisticação de hardware e software. Nós usamos a capacidade de executar software de terceiros como a linha divisória entre computadores embarcados e não embarcados.

Os computadores embarcados possuem a mais extensa gama de poder de processamento e custo. Eles incluem processadores de 8 e 16 bits, que podem custar menos de 10 centavos de dólar, microprocessadores de 32 bits, que executam 100 milhões de instruções por segundo e custam menos de US$ 5, e processadores de ponta para switches de rede mais recentes, que custam US$ 100 e podem executar bilhões de instruções por segundo. Embora a gama da capacidade de computação no mercado de computação embarcada seja muito extensa, o preço é um fator importante no projeto de computadores para esse espaço. Existem requisitos de desempenho, é claro, mas o objetivo principal normalmente é atender a necessidade de desempenho a um preço mínimo, em vez de conseguir desempenho mais alto a um preço mais alto.

A maior parte deste livro se aplica ao projeto, uso e desempenho de processadores embarcados, sejam eles microprocessadores encapsulados, sejam núcleos de microprocessadores que serão montados com outro hardware de uso específico. Na realidade, a terceira edição deste livro incluiu exemplos de computação embarcada para ilustrar as ideias em cada capítulo.

Infelizmente, a maioria dos leitores considerou esses exemplos insatisfatórios, pois os dados levam ao projeto quantitativo e à avaliação de computadores desktop, e servidores ainda não foram bem estendidos para a computação embarcada (ver os desafios com o EEMBC, por exemplo, na Seção 1.8). Portanto, por enquanto ficamos com as descrições qualitativas, que não se ajustam bem ao restante do livro. Como resultado, nesta edição, consolidamos o material embarcado em um único novo apêndice. Acreditamos que o Apêndice E melhore o fluxo de ideias no texto, permitindo ainda que os leitores percebam como os diferentes requisitos afetam a computação embarcada.

Classes de paralelismo e arquiteturas paralelas Paralelismo em múltiplos níveis é a força impulsionadora do projeto de computadores pelas quatro classes de computadores, tendo a energia e o custo como as principais restrições. Existem basicamente dois tipos de paralelismo em aplicações:

1. Paralelismo em nível de dados (Data-Level Parallelism — DLP): surge porque existem muitos itens de dados que podem ser operados ao mesmo tempo. 2. Paralelismo em nível de tarefas (Task-Level Parallelism — TLP): surge porque são criadas tarefas que podem operar de modo independente e principalmente em paralelo.

O hardware do computador pode explorar esses dois tipos de paralelismo de aplicação de quatro modos principais:

1. O paralelismo em nível de instruções explora o paralelismo em nível de dados a níveis modestos com auxílio do compilador, usando ideias como pipelining e em níveis médios usando ideias como execução especulativa. 2. As arquiteturas vetoriais e as unidades de processador gráfico (Graphic Processor Units —

GPUs) exploram o paralelismo em nível de dados aplicando uma única instrução a uma coleção de dados em paralelo. 3. O paralelismo em nível de thread explora o paralelismo em nível de dados ou o paralelismo em nível de tarefas em um modelo de hardware fortemente acoplado, que permite a interação entre threads paralelos. 4. O paralelismo em nível de requisição explora o paralelismo entre tarefas muito desacopladas especificadas pelo programador ou pelo sistema operacional.

Esses quatro modos de o hardware suportar o paralelismo em nível de dados e o paralelismo em nível de tarefas têm 50 anos. Quando Michael Flynn (1966) estudou os esforços de computação paralela nos anos 1960, encontrou uma classificação simples cujas abreviações ainda usamos hoje. Ele examinou o paralelismo nos fluxos de instrução e dados chamados pelas instruções no componente mais restrito do multiprocessador, colocando todos os computadores em uma de quatro categorias:

1. Fluxo simples de instrução, fluxo simples de dados (Single Instruction Stream, Single

Data Stream — SISD). Essa categoria é o uniprocessador. O programador pensa nela como o computador sequencial padrão, mas ele pode explorar o paralelismo em nível de instrução. O Capítulo 3 cobre as arquiteturas SISD que usam técnicas ILP, como a execução superescalar e a execução especulativa. 2. Fluxo simples de instrução, fluxos múltiplos de dados (Single Instruction Stream,

Multiple Data Streams — SIMD). A mesma instrução é executada por múltiplos processadores usando diferentes fluxos de dados. Computadores SIMD exploram o paralelismo em nível de dados ao aplicar as mesmas operações a múltiplos itens em paralelo. Cada processador tem sua própria memória de dados (daí o MD de SIMD), mas existe uma única memória de instruções e um único processador de controle, que busca e envia instruções. O Capítulo 4 cobre o DLP e três diferentes arquiteturas que o exploram: arquiteturas vetoriais, extensões multimídia a conjuntos de instruções-padrão e GPUs. 3. Fluxos de múltiplas instruções, fluxo simples de dados (Multiple Instruction Stream,

Single Data Stream — MISD). Nenhum microprocessador comercial desse tipo foi construído até hoje, mas ele completa essa classificação simples. 4. Fluxos múltiplos de instruções, fluxos múltiplos de dados (Multiple Instruction Streams,

Multiple Data Streams — MIMD). Cada processador busca suas próprias instruções e opera seus próprios dados, buscando o paralelismo em nível de tarefa. Em geral, o MIMD é mais flexível do que o SIMD e, por isso, em geral é mais aplicável, mas é inerentemente mais caro do que o SIMD. Por exemplo, computadores MIMD podem também explorar o paralelismo em nível de dados, embora o overhead provavelmente seja maior do que seria visto em um computador SIMD. Esse overhead significa que o tamanho do grão deve ser suficientemente grande para explorar o paralelismo com eficiência. O Capítulo 5 cobre arquiteturas MIMD fortemente acopladas que exploram o paralelismo em nível de thread, uma vez que múltiplos threads em cooperação operam em paralelo. O Capítulo 6 cobre arquiteturas MIMD fracamente acopladas — especificamente, clusters e computadores em escala — que exploram o paralelismo em nível de requisição, em que muitas tarefas independentes podem ocorrer naturalmente em paralelo, com pouca necessidade de comunicação ou sincronização.

Essa taxonomia é um modelo grosseiro, já que muitos processadores paralelos são híbridos das classes SISD, SIMD e MIMD. Mesmo assim, é útil colocar um framework no espaço de projeto para os computadores que veremos neste livro.

1.3 DEFINIÇÃO DA ARQUITETURA DO COMPUTADOR

A tarefa que o projetista de computador desempenha é complexa: determinar quais atributos são importantes para um novo computador, depois projetar um computador para maximizar o desempenho enquanto permanece dentro das restrições de custo, potência e disponibilidade. Essa tarefa possui muitos aspectos, incluindo o projeto do conjunto de instruções, a organização funcional, o projeto lógico e a implementação. A implementação pode abranger o projeto do circuito integrado, o acondicionamento, a

potência e o resfriamento. A otimização do projeto requer familiaridade com uma gama de tecnologias muito extensa, desde compiladores e sistemas operacionais até o projeto lógico e o o acondicionamento.

No passado, o nome arquitetura de computadores normalmente se referia apenas ao projeto do conjunto de instruções. Outros aspectos do projeto de computadores eram chamados de implementação, normalmente insinuando que a implementação não é interessante ou é menos desafiadora.

Acreditamos que essa visão seja incorreta. A tarefa do arquiteto ou do projetista é muito mais do que projetar o conjunto de instruções, e os obstáculos técnicos nos outros aspectos do projeto provavelmente são mais desafiadores do que aqueles encontrados no projeto do conjunto de instruções. Veremos rapidamente a arquitetura do conjunto de instruções antes de descrever os desafios maiores para o arquiteto de computador.

Arquitetura do conjunto de instruções Neste livro, usamos o nome arquitetura do conjunto de instruções (Instruction Set Architecture — ISA) para nos referir ao conjunto de instruções visíveis pelo programador. A arquitetura do conjunto de instruções serve como interface entre o software e o hardware. Essa revisão rápida da arquitetura do conjunto de instruções usará exemplos do 80x86, do ARM e do MIPS para ilustrar as sete dimensões de uma arquitetura do conjunto de instruções. Os Apêndices A e K oferecem mais detalhes sobre as três arquiteturas de conjunto de instruções.

1. Classes de ISA. Hoje, quase todas as arquiteturas de conjunto de instruções são classificadas como arquiteturas de registradores de propósito geral (GPRs), em que os operandos são registradores ou locais de memória. O 80x86 contém 16 registradores de propósito geral e 16 que podem manter dados de ponto flutuante (FPRs), enquanto o MIPS contém 32 registradores de propósito geral e 32 de ponto flutuante (Fig. 1.4). As duas versões populares dessa classe são arquiteturas de conjunto de instruções registrador-memória, como o 80x86,

(Parte 5 de 8)

Comentários