Baixe o app para aproveitar ainda mais
Prévia do material em texto
Multithreading no chip Todas as CPU modernas, com paralelismo (pipeline), têm um problema inerente: quando uma referência à memória encontra uma ausência das caches de nível I e nível 2, há uma longa espera até que a palavra requisitada (e sua linha de cache associada) sejam carregadas na cache, portanto, o pipeline para. Uma abordagem para lidar com essa situação, denominada multithreading no chip, permite que a CPU gerencie múltiplos threads de controle ao mesmo tempo em uma tentativa de mascarar essas protelações. Ou seja, se o thread 1 estiver bloqueado, a CPU ainda tem uma chance de executar o thread 2, de modo a manter o hardware totalmente ocupado. Multiprocessadores com um único chip Embora o multithreading ofereça ganhos em desempenho significativos por um custo modesto, para algumas aplicações é preciso um ganho em desempenho muito maior do que ele pode oferecer. Para conseguir esse desempenho estão sendo desenvolvidos chips multiprocessadores. Há duas áreas de interesse para esses chips que contêm duas ou mais CPUs: servidores de alta tecnologia e equipamentos eletrônicos de consumo. Coprocessadores Com a adição de um segundo processador especializado os computadores podem ganhar velocidade. Há uma variedade desses coprocessadores, de pequenos a grandes. Nos mainframes IBM 360 e em todos os seus sucessores, existem canais independentes de E/S para fazer entrada/saída. De modo semelhante, o CDC 6600 tinha dez processadores independentes para efetuar E/S. Gráficos e aritmética de ponto flutuante são outras áreas em que são usados coprocessadores. Até mesmo um chip DMA pode ser visto como um coprocessador. Em alguns casos, a CPU dá ao coprocessador uma instrução ou um conjunto de instruções e ordena que ele as execute; em outros casos, ele é mais independente e funciona em grande parte por si só. Em termos físicos, coprocessadores podem variar de um gabinete separado (os canais de E/S do 360) a uma placa de expansão (processadores de rede) ou uma área no chip principal (ponto flutuante). Em todos os casos, o que os distingue é o fato de que algum outro processador é o principal e que os coprocessadores estão lá para ajudá-lo. Três áreas são apresentadas como principais na possibilidade de aumento de velocidade: processamento em rede, multimídia e criptografia. Processadores de rede Grande parte dos computadores de hoje estão conectados a uma rede ou à internet. Como resultado desse progresso tecnológico em hardware de rede, as redes agora são tão rápidas que ficou cada vez mais difícil processar em software todos os dados que entram e que saem. Por conseguinte, foram desenvolvidos processadores especiais de rede para lidar com o tráfego e muitos computadores de alta tecnologia agora têm um desses processadores. Processadores de mídia Mais uma área na qual coprocessadores são usados é o tratamento de processamento gráfico de alta resolução, como renderização 3D. CPUs comuns não são muito boas nas computações maciças necessárias para processar as grandes quantidades de dados requeridas nessas aplicações. Por essa razão, alguns PCs atuais e a maioria dos PCs futuros serão equipados com GPUs (Graphics Processing Units – unidades de processamento gráfico) para os quais passarão grandes porções do processamento geral. Criptoprocessadores Outra área na qual os coprocessadores são populares é segurança, em especial segurança em redes. Quando uma conexão for estabelecida entre um cliente e um servidor, em muitos casos eles devem primeiro se autenticar mutuamente. Então, é preciso estabelecer uma conexão segura e criptografada entre eles, para que os dados sejam transferidos com segurança, frustrando quaisquer bisbilhoteiros que poderiam estar invadindo a linha. O problema da segurança é que, para consegui-la, é preciso usar criptografia, a qual faz uso muito intensivo de computação. Há dois tipos gerais de criptografia, denominados criptografia de chave simétrica e criptografia de chave pública. A primeira é baseada na mistura completa de bits, algo equivalente a jogar uma mensagem dentro de um liquidificador. A última é baseada em multiplicação e exponenciação de grandes números (por exemplo, 1.024 bits) e consome enormes quantidades de tempo. Para tratar de computação necessária para criptografar os dados com segurança para transmissão ou armazenamento, várias empresas produziram coprocessadores criptográficos, às vezes na forma de placas de expansão para barramento PCI. Esses coprocessadores têm um hardware especial que os habilita a executar a criptografia necessária muito mais rápido do que poderia uma CPU comum. Infelizmente, uma discussão detalhada do modo de funcionamento dos Criptoprocessadores exigiria, em primeiro lugar, explicar muita coisa sobre criptografia em si, o que está fora do escopo desse conteúdo. Multiprocessadores Um computador paralelo no qual todas as CPUs compartilham uma memória comum. Todos os processos que funcionam juntos em um multiprocessador podem compartilhar um púnico espaço de endereço virtual mapeado para a memória comum. Qualquer processo pode LER ou ESCREVER uma palavra de memória apenas executando uma instrução LOAD ou STORE. Nada mais é preciso. O Hardware faz todo resto. Dois processos podem se comunicar pelo simples ato de um deles escrever dados para a memória e o outro ler. A Capacidade de dois (ou mais) processos se comunicarem apenas lendo e escrevendo a memória é a razão da popularidade dos multiprocessadores. É um modelo de fácil entendimento pelos programadores e é aplicável a uma ampla faixa de problemas. Pode ser de dois tipos: Multiprocessadores de memória compartilhada Paralelismo pode ser acrescentado a chips únicos e a sistemas individuais adicionando um coprocessador e múltiplas CPUs totalmente desenvolvidas podem ser combinadas para formar sistemas maiores. Sistemas com várias CPUs podem ser divididos em multiprocessadores e multicomputadores. Multiprocessadores versus Multicomputadores Em qualquer sistema de computação paralelo, CPUs que trabalham em partes diferentes do mesmo serviço devem se comunicar, umas com as outras para trocar informações. O modo exato como elas devem fazer isso é assunto de muito debate na comunidade da arquitetura de computadores. Dois projetos distintos foram propostos e implementados: multiprocessadores e multicomputadores. A diferença fundamental entre os dois é a presença ou ausência de memória compartilhada. Essa diferença interfere no modo como são projetados, construídos e programados, bem como em sua escala e preço. Multicomputadores Arquitetura paralela em que todas CPUs possuem sua própria memória privada, acessível somente por ela e nenhuma outra. Também denominado sistema de memória distribuída. O aspecto fundamental que distingue um multicomputador de multiprocessadores é que a CPU de um multicomputador tem sua própria memória local privada, a qual pode acessar apenas executando LOAD e STORE. Assim, multiprocessadores têm um único espaço de endereço físico compartilhado por todas as CPUs, ao passo que multicomputadores têm um espaço de endereço físico para cada CPU. Uma vez que as CPUs em um multicomputador não podem se comunicar apenas lendo e escrevendo na memória comum, elas precisam de um mecanismo de comunicação diferente. O que elas fazem é passar mensagens uma para outra usando a rede de interconexão. Entre os exemplos de multicomputadores podemos citar IBM BlueGene/P o Red Storm e o cluster Google. O exemplo IBM BlueGene/P é descrito no artigo http://www.ic.unicamp.br/~ducatte/mo401/1s2006/T2/057615- T.pdf Comparação entre IBM BlueGene/P e Red Storm (TANENBAUM, Andrew S. Organização Estruturada de Computadores. São Paulo:Pearson Prentice Hall: 2013, 6° Edição).
Compartilhar