Introdução O Fórum PCs teve a oportunidade de testar em primeira mão o novo Athlon64 X2, especificamente o modelo 4800+, o mais rápido da linha. Os processadores de núcleo duplo, mais conhecidos como Dual Core, são a próxima promessa na evolução tecnológica dos PCs, pois permitirão o uso de processamento em paralelo, algo antes só […]

O Fórum PCs teve a oportunidade de testar em primeira mão o novo Athlon64 X2, especificamente o modelo 4800+, o mais rápido da linha. Os processadores de núcleo duplo, mais conhecidos como Dual Core, são a próxima promessa na evolução tecnológica dos PCs, pois permitirão o uso de processamento em paralelo, algo antes só usado em aplicações cientificas, para usuários comuns com micros de mesa.
Longhorn, o próximo sistema operacional da Microsoft. O Windows XP atual, embora seja um multitarefa, não requer nas especificações das suas aplicações que essas também sejam. No Longhorn todas as tarefas de background serão otimizadas para múltiplos processadores e todas as aplicações e drivers certificados pela Microsoft também atenderão essa característica.
É importante nesse momento mostrar uma diferença semântica: os termos multi-tasking e multi-threading são muitas vezes confundidos, mas em essência significam coisas ligeiramente diferentes e difíceis de explicar sem entrar em termos técnicos e cenários que só quem conhece a arquitetura da computação profundamente poderia compreender. Taskem inglês significa Tarefaenquanto Threadpode ser traduzido como Linha. Não é meu objetivo aqui dissertar sobre esse tema, principalmente porque existem milhares de interpretações, mas para um entendimento geral vamos imaginar que Task são as aplicações e Threads são as linhas de códigos de um mesmo programa que podem ser executadas de forma independente pelo sistema operacional.
Um sistema operacional moderno é por natureza um Multi-Threading porque aloca frações do tempo do processador para as inúmeras Threads de um mesmo programa que estão sendo executadas simultaneamente. E também é Multi-Tasking porque permite que vários programas sejam executados ao mesmo tempo, usando o mesmo fracionamento das unidades de tempo da CPU.
Talvez com um exemplo fique mais fácil: um programa de renderização de imagem pode dividir a tela em blocos e associar uma Threadpara cada bloco. Assim, uma vez que o sistema operacional esteja livre, ele passa a executar as demais threads da fila no intuito de terminar a renderização mais rapidamente. Um processador como o Pentium 4 HT (HyperThreading) é capaz de processado duas threads simultaneamente, os demais processadores para desktop apenas uma de cada vez.
Um processador Dual Core como o Athlon64 X2 pode executar duas Taskdiferentes, por exemplo, o mesmo programa de renderização acima e mais um outro qualquer, como o SuperPi (uma aplicação single thread para cálculo do número Pi). Nesse caso, duas Threads podem ser realizadas simultaneamente, mas uma para cada programa diferente e completamente independente uma da outra, usando inclusive registradores diferentes. No momento que um dos programas chegar ao fim, o processador agora ocioso passa a receber mais threads da fila para processar. Quem gerencia essa dupla fila de threads é o sistema operacional.
Para um leigo, parece confuso, mas para quem é programador experiente sabe o quão diferentes são os dois cenários, o que coloca o desenvolvimento de softwares em uma condição de suma importância para o bom aproveitamento dos novos processadores. Mais uma vez, a infraestrutura do hardware chega ao mercado antes dos softwares otimizados possam aproveitar todas as funcionalidades, mas nesse caso do Dual Core já temos ganhos imediatos por causa das aplicações desenvolvidas para workstations, geralmente multiprocessadas, que estão disponíveis.

Para um usuário comum, seja ele doméstico ou corporativo, um sistema Dual Core hoje é tão útil quanto um sistema de dois processadores, ou seja, a percepção do benefício se dará em função da aplicação que o mesmo utiliza com freqüência. Se for para usar a suíte Office, navegar na internet, acessar e-mails e jogar, o benefício certamente não compensará o custo mais alto. Ele perceberá uma resposta mais rápida do sistema, um conforto maior no uso geral, mas ele dificilmente saberia identificar se está usando um sistema de dois núcleos ou um HyperThreading mono processado.
De forma resumida, se você não é usuário típico de uma placa mãe para dois processadores (workstation) dificilmente você será de um Dual Core nesse momento. O futuro é outra história, o desenvolvimento dos novos aplicativos e dos novos sistemas operacionais Windows serão fortemente baseados na premissa que há processamento paralelo disponível no equipamento do usuário, só que isso leva algum tempo para se tornar uma realidade prática.
Vocês sabiam que desde o ano passado os drivers das placas de vídeo 3D mais rápidas permitem uma aceleração nas tarefas de vídeo, edição e aplicação de filtros em imagens? Sim, isso é verdade, mas o Photoshop, o Adobe Premiere, os produtos da Pinnacle, Sony Vegas Vídeo e muitos outros ainda não aproveitam esse recurso ocioso, mesmo nas suas últimas versões. Muitos dos softwares DVD Player também não. São apenas exemplos de quão dependentes alguns recursos de hardware são dos desenvolvedores de softwares.
A mudança de mentalidade necessária para o desenvolvimento de softwares adequados para processamento paralelo é muito grande, e por isso imagino que muitas aplicações tipicamente domésticas levarão anos para se adequarem. Um processo seqüencial é muito simples, pois cada linha de código é executada em uma seqüência lógica, e cada execução retorna um valor () que pode ser testado antes de dar seguimento à próxima linha. No processamento paralelo o programador precisa criar threads independentes e usar “sinais de trânsito” para que uma se beneficie do resultado da outra. Se o cálculo de um valor em uma thread depende do resultado de outra thread, essa primeira precisa “aguardar no sinal WAIT” até a outra terminar, e enquanto ela está parada, mais outra thread pode ser iniciada se ela não tiver dependência com as anteriores, senão teremos outro caso de WAIT.
Essa complexidade pode criar situações onde um programa mal desenhado pode dar resultados diferentes se estiver sendo usado em um processador de núcleo simples ou duplo, ou ainda ser penalizado com baixa performance se o encadeamento das threads não for bem feito. Um detalhe importante, um bom desenho de código para dois núcleos não necessariamente é um bom desenho para quatro núcleos e assim por diante. Deu para perceber a complexidade, não é?
Tanto a AMD quanto a Intel estão desenvolvendo compiladores e ferramentas de análise muito sofisticadas para incentivar os desenvolvedores a adotar o processamento paralelo em seus softwares e aplicativos.