Texas Instruments

   A TI era uma fonte alternativa para os dispositivos 486SLC e DLC da Cyrix, e também desenvolveu suas próprias versões com caches maiores e interface de barramento PCI incorporado. Os últimos processadores fabricados por essa empresa TI486SXL2 e SXLC2, ambos com clock's duplicados, aceitando um cache de 8kb. O dispositivo SXL é um dispositivo de pinagem 486, e o SXLC é um despositivo de pinagem i386SX. Todos possuindo versões de 3,3V, operando a velocidades de até 40Mhz.


X86 da IBM

   Acordos com a Intel permitem que a IBM tenha acesso aos design 386 e 486, mas a impedem de vende-los sozinhos, eles precisam estar montados em placas ou em módulos. A IBM desenvolveu 3 produtos básicos : o 386SLC, o 486SLC2 e o Blue Lighting. O 386SLC era um processador semelhante ao 486 com um cache de 8Kb num gabinete de pinagem 386SX da Intel, e opera a 20 e 25 Mhz. O 486SLC2 era o mesmo processador Intel 486 mas com 16Kb de cache, operando a 66Mhz internamente. Esse dispositivo era também comercializado na pinagem 386SX da Intel. O Blue Lighting era semelhante ao 486, mas foi recondicionado na pinagem do 386 da Intel, trabalhando de 75 a 100 Mhz, Atualmente a IBM fabrica somente processadores com tecnologia RISC.


NexGen

   Em 1993, a NexGen produziu um conjunto de chips que chamou de NX586, que não oferecia vantagem sobre o Pentium da Intel, composto de um único chip. Desde então, o conjunto o conjunto de chip's da NexGen encolheu de tamanho, e acabou se formando um dispositivo de chip único fabricado pela IBM e que utilizava uma tecnologia de 0,5 mícron. Ele oferece pouco em termos de desempenho e competiu apenas no preço. Esse processador não chegou a ocupar lugar no mercado pois não era compatível com principais novidades, exemplo PCI.


Processadores Para o Próximo Milênio

Postulados de Von Neumann

   Von Neumann, que trabalhou no desenvolvimento do ENIAC e posteriormente empregou sua experiência no projeto do IAS (1952), elaborou as idéias e os conceitos que nortearam a arquitetura dos computadores até os dias de hoje. Seu entendimento é essencial para apreciarmos a atual evolução dos computadores. Iniciemos constatando, de forma óbvia, que as máquinas que usamos nas nossas casas possuem quatro elementos básicos: a CPU, a memória, os dados e as instruções (ou programas). A partir daí, apresentamos os três postulados básicos de von Neumann, que no momento podem parecer triviais, mas que não o eram na década de 50:

1. Um único controle centralizado (uma só CPU);
2. Uma única memória para dados e instruções; e
3. As instruções devem fazer operações elementares sobre os dados.

   Cerca de 90% dos computadores atuais usam esses postulados e por isso são chamados de “Arquitetura de von Neumann”, ou “Arquitetura Serial”, pois empregam um único processador. Essa arquitetura, aliada aos avanços da microeletrônica, ofertou-nos o atual mercado de computadores, rápidos e baratos. Porém, tal arquitetura enfrenta um limite de velocidade que é ditado pelas leis da física. O tempo que um sinal elétrico gasta para trafegar entre dois pontos de um circuito eletrônico é muito pequeno, porém não é igual a zero. Em outras palavras, isto corresponde a dizer que existe um limite para a velocidade de relógio das CPU's e, infelizmente, ele não está muito distante. Como então continuar com a evolução dos computadores? Essa é a pergunta que tem ocupado a cabeça de muitos pesquisadores e desde a segunda metade desta década, várias soluções foram propostas.

   A principal resposta vem da comparação entre nosso cérebro e um processador. É sabido que o sinal elétrico trafegando por dentro de um CI é muito mais veloz que o trânsito de impulsos nervosos entre nossos neurônios. É claro que, para fazer operações numéricas, comparar e classificar, o computador é mais rápido. Mas, por outro lado, ele é inferior, pois não pensa, não inova e não aprende, apenas segue passos programados. Por exemplo, com um único olhar em uma sala identificamos imediatamente centenas de objetos. Já um computador, mesmo o mais sofisticado, apenas consegue identificar os objetos mais simples.

   Somos capazes de dirigir um carro e enquanto andamos por nossas (terríveis) estradas, temos habilidade para escolher o melhor caminho. Será que um computador pode dirigir um carro? Uma das experiências no MIT com um piloto computadorizado, que identificava a rua através das linhas paralelas do meio fio, revelou um grande escalador de árvores, pois ele confundia o contorno do meio fio com o contorno do caule das árvores.

   Como será que o cérebro consegue ser superior aos processadores, se o nosso neurônio é muito mais lento que um circuito eletrônico? A resposta é óbvia: porque temos vários bilhões de neurônios operando em paralelo. Ora, por que, ao invés de construirmos CPU's velozes e gigantescas, não usamos várias CPU's, simples e confiáveis, operando em paralelo? Chegamos assim à idéia básica do processamento paralelo, que é a esperança para o próximo milênio


Processamento Paralelo

   Sabemos então que devemos usar uma grande quantidade de processadores, mas como controlá-los de forma a que façam alguma coisa de útil? Existem grandes problemas! Para iniciar, vamos trabalhar o conceito de processamento paralelo através de um exemplo bem simples. Se um pedreiro constrói uma casa em um ano, então dois pedreiros constroem a mesma casa em meio ano. Este é conceito básico do processamento paralelo: a divisão das tarefas. Podemos seguir adiante e concluir que cem pedreiros gastam apenas 3,6 dias. Será isto um absurdo?

   É claro que há um limite, pois o trabalho dos pedreiros só será eficiente se estiverem perfeitamente sincronizados e equilibrados. Este ponto é importante: todos os pedreiros devem ter a mesma carga de trabalho. Em termos técnicos, usa-se a expressão “Balanceamento da Carga de Trabalho”. Esse balanceamento pode ser feito de dois modos. No primeiro modo, o trabalho de cada pedreiro é idêntico, ou seja, cada um faz 1/100 da casa. No outro modo é usado a especialização, ou seja, alguns pedreiros “viram” cimento enquanto outros assentam tijolos e outros tratam do encanamento, e assim por diante.

   Ao imaginarmos todas as tarefas que devam ser executadas para a construção da casa, fica claro que algumas delas não poderão ser paralelizadas. Imagine 100 pedreiros para colocar um porta, ou 100 pedreiros em cima da casa tentando montar o telhado. A casa acabaria por cair! Além disso, deve haver um limite para a quantidade de pedreiros que podem trabalhar em paralelo. A partir deste limite, quanto mais pedreiros colocamos, pioramos o desempenho e em conseqüência, aumentamos o tempo de construção.

   Temos então dois grandes problemas: até quanto podemos paralelizar uma tarefa e até quantos processadores devem ser alocados? A partir daí, surgem outras questões: como sincronizar esses processadores de forma a que um não repita o trabalho do outro e como garantir o balanceamento da carga de trabalho? Agora temos condições de entender porque se diz que as dificuldades presentes no projeto do hardware de máquinas paralelas não são tão complexas quando comparados com os problemas de sua programação. Diz-se que os computadores estão sempre uma geração atrasada em relação às nossas necessidades e os programas, duas gerações atrasadas. Em suma, um desafio maior que o projeto de supercomputadores é a sua programação.


Classificação de Computadores Paralelos

   É muito difícil a tarefa de classificar computadores paralelos. Já foram feitas diversas sugestões. A classificação definitiva ainda está por vir. Porém, a que trouxe melhores resultados e ainda hoje é usada, é a proposta por Flynn. Essa classificação está baseada em dois conceitos: fluxo de instruções e fluxo de dados. O fluxo de instruções está relacionado com o programa que o processador executa, enquanto que o fluxo de dados está relacionado com os operandos manipulados por essas instruções. O fluxo de instruções e o fluxo de dados são considerados independentes e por isso existem quatro combinações possíveis.

SISD - Instrução Única, Dado Único (Single Instruction Single Data)

   Essa arquitetura é usada nos computadores que temos em casa. Segue o proposto por von Neumann e é por isso denominada de “Arquitetura de von Neumann”, também chamado de computador serial. Temos um único fluxo de instruções (SI), caracterizado pelo contador de programa da CPU, que opera sobre um único dado (SD) por vez.


SIMD - Única Instrução, Múltiplos Dados (Single Instruction Multiple Data)

De início esta arquitetura paralela pode parecer estranha, mas como será constatado adiante, ela não só é conhecida, como também já foi muito utilizada.

   Um grande exemplo desta arquitetura são os computadores Cray. Outro exemplo é o conjunto de instruções MMX. Eles são muito usados quando um mesmo programa deve ser executado sobre uma grande massa de dados, como é o caso de prospeção de petróleo. Note que essa arquitetura não sofre com problemas de sincronização, pois existe um único programa em execução.


MISD - Múltiplas Instruções, Dado Único (Multiple Instruction Single Data)

   Essa arquitetura é um pouco mais difícil de ser explicada. Tentemos imaginar como é que se pode fazer múltiplas operações (MI) sobre um mesmo dado (SD). Os próprios pesquisadores têm opiniões divergentes sobre esse assunto.

MIMD - Múltiplas Instruções, Múltiplos Dados (Multiple Instruction Multiple Data)

   Essa é a arquitetura que esperaríamos encontrar em um computador paralelo. Temos vários dados (MD) sendo operados por vários instruções (MI), simultaneamente. Essa é a arquitetura mais usada pelos modernos supercomputadores. Nesse caso, é importante que os processadores possam se comunicar entre si para fazer a sincronização e trocar informações. Além disso, é necessário ter uma memória, chamada de global, onde todos processadores possam disponibilizar, para os demais, os resultados intermediários.

   Para evitar uma quantidade excessiva de acessos a essa memória, os processadores possuem a chamada memória local, onde está a maioria das suas instruções e dos dados que devam ser operados. Essa memória local evita que a estrutura de comunicação se transforme num enorme gargalo. Os processadores precisam trocar informações e, no caso desta figura, a própria estrutura de comunicação se encarrega desta tarefa.

   Agora sim é necessária a genialidade dos programadores, pois como conseguir que uma estrutura deste tipo, imagine 1.024 processadores, trabalhe de forma sincronizada para gerar algum resultado? Se já é difícil escrever e depurar programas seriais, imagine fazer isso em um computador com 1.024 diferentes programas trabalhando sobre 1.024 dados diferentes.

Ganho de Velocidade

   Como medir o quanto se ganhou com a execução de uma tarefa em um computador paralelo? É intuitivo que devemos usar o tempo de execução para medir esse desempenho, já que nosso principal objetivo é aumentar a velocidade de processamento. Uma solução boa é verificarmos a relação entre os tempos gastos para executar essa tarefa em um computador serial e em um computador paralelo. A expressão a seguir é usada para o cálculo do Ganho de Velocidade, que é abreviado pela sigla GV.

   Por exemplo, uma determinada tarefa, quando executada em um computador convencional consome 200 s e quando executada em uma máquina paralela (24 processadores) consome 10 s, então o ganho de velocidade é GV = 200/10 = 20.

   Gostaríamos que o Ganho de Velocidade fosse igual à quantidade de Elementos de Processamento (EP) empregados, mas isso é raro de acontecer pois quando se escreve um programa para rodar em máquinas paralelas, invariavelmente se necessita colocar trechos extras (de programa) para sincronização dos diversos EP e troca de informações. Esses trechos extras recebem o nome de custo de paralelização. Dependendo da tarefa a ser executada, pode haver uma necessidade de sincronização e troca informações tão grande que venha a inviabilizar o processamento paralelo.

Lei de Amdhal

   Apesar do quanto promissor a computação paralela possa parecer, ela não é uma solução para todo o problema de processamento. Existem tarefas que são eminentemente seqüenciais e que não tiram proveito de um computador paralelo. Voltando ao nosso exemplo da construção de uma casa, apesar dela ser executada em paralelo, existe por detrás uma seqüência que deve ser obedecida. Nessa construção, não podemos fazer o telhado antes de termos as paredes prontas e também não podemos construir as paredes antes do alicerce. Assim, é comum que as tarefas a serem executadas possuam porções paralelizáveis e porções que precisam ser executadas de forma seqüencial. Note que um computador paralelo operando de forma seqüencial é um grande desperdício, pois enquanto um processador trabalha no trecho serial, todos os demais ficam ociosos.

Conclusão

   O Processamento paralelo com certeza será um grande passo na evolução dos computadores, mas ela está apenas "no ovo" e vai demorar algum tempo para que realmente atinja resultados satisfatórios.


Volta