Multithreading simultâneo

O Intel Pentium 4 foi o primeiro processador desktop moderno a implementar multithreading simultâneo, a partir do modelo de 3,06 GHz lançado em 2002, e desde então introduzido em vários de seus processadores. A Intel chama a funcionalidade de Tecnologia Hyper-Threading, e fornece um mecanismo SMT básico de duas threads. A Intel alega uma melhoria de até 30% de velocidade em comparação com um Pentium 4 não-SMT idêntico. A melhoria de desempenho observada é muito dependente da aplicação; no entanto, ao executar dois programas que requerem atenção total do processador, pode realmente parecer que um ou ambos os programas diminuem ligeiramente quando o Hyper-Threading é ligado. Isto é devido ao sistema de replay do Pentium 4 amarrar recursos de execução valiosos, aumentando a contenção por recursos como largura de banda, caches, TLBs, reordenar entradas de buffer, equalizando os recursos do processador entre os dois programas, o que adiciona uma quantidade variável de tempo de execução. O núcleo do Pentium 4 Prescott ganhou uma fila de replay, o que reduz o tempo de execução necessário para o sistema de replay. Isto é o suficiente para superar completamente aquele acerto de desempenho.

Os últimos projetos de arquitetura MIPS da Imagination Technologies incluem um sistema SMT conhecido como “MIPS MT”. O MIPS MT fornece tanto elementos de processamento virtual pesados como microthreads de hardware mais leves. RMI, uma inicialização baseada em Cupertino, é o primeiro fornecedor de MIPS a fornecer um processador SOC baseado em oito núcleos, cada um dos quais com quatro threads. As roscas podem ser executadas em modo grão fino, onde uma rosca diferente pode ser executada a cada ciclo. As roscas também podem ser atribuídas prioridades. As CPUs MIPS da Imagination Technologies têm duas roscas SMT por núcleo.

O Blue Gene/Q da IBM tem SMT de 4 vias.

O IBM POWER5, anunciado em maio de 2004, vem como um módulo dual core dual-chip (DCM), ou módulo multi-chip quad-core ou oct-core (MCM), com cada núcleo incluindo um motor SMT de duas roscas. A implementação da IBM é mais sofisticada do que as anteriores, porque pode atribuir uma prioridade diferente às várias roscas, é mais fina, e o motor SMT pode ser ligado e desligado dinamicamente, para melhor executar aquelas cargas de trabalho em que um processador SMT não aumentaria o desempenho. Esta é a segunda implementação da IBM de hardware multithreading geralmente disponível. Em 2010, a IBM lançou sistemas baseados no processador POWER7 com oito núcleos, tendo cada um deles quatro Threads Inteligentes Simultâneos. Isto muda o modo de rosqueamento entre um fio, dois fios ou quatro fios, dependendo do número de fios do processo sendo programado no momento. Isso otimiza o uso do núcleo para um tempo de resposta mínimo ou máximo de produção. IBM POWER8 tem 8 roscas inteligentes simultâneas por núcleo (SMT8).

IBM z13 tem duas roscas por núcleo (SMT-2).

Embora muitas pessoas tenham relatado que o UltraSPARC T1 da Sun Microsystems (conhecido como “Niagara” até seu lançamento em 14 de novembro de 2005) e o agora defunto processador codinome “Rock” (originalmente anunciado em 2005, mas após muitos atrasos cancelados em 2010) são implementações do SPARC focadas quase inteiramente na exploração de técnicas SMT e CMP, o Niagara não está realmente usando SMT. A Sun refere-se a estas abordagens combinadas como “CMT”, e o conceito geral como “Throughput Computing”. O Niagara tem oito núcleos, mas cada núcleo tem apenas um pipeline, então na verdade ele usa multithreading de granulação fina. Ao contrário do SMT, onde instruções de múltiplas roscas compartilham a janela de problemas a cada ciclo, o processador usa uma política de round robin para emitir instruções a partir da próxima rosca ativa de cada ciclo. Isto o torna mais similar a um processador de barril. O processador de rocha da Sun Microsystems é diferente, ele tem núcleos mais complexos que têm mais de um pipeline.

O SPARC T3 da Oracle Corporation tem oito roscas finas por núcleo, o SPARC T4, SPARC T5, SPARC M5, M6 e M7 têm oito roscas finas por núcleo, das quais duas podem ser executadas simultaneamente.

Fujitsu SPARC64 VI tem multithreading vertical de granulação grossa (VMT) SPARC VII e as mais recentes têm SMT de 2 vias.

Intel Itanium Montecito usou multithreading de granulação grossa e Tukwila e as mais recentes usam SMT de 2 vias (com multithreading de domínio duplo).

Intel Xeon Phi tem SMT de 4 vias (com multithreading de multithreading de tempo múltiplo) com roscas baseadas em hardware que não podem ser desactivadas ao contrário do Hyperthreading normal. O Intel Atom, lançado em 2008, é o primeiro produto Intel a apresentar SMT de 2 vias (comercializado como Hyper-Threading) sem suportar reordenação de instruções, execução especulativa ou renomeação de registros. A Intel reintroduziu o Hyper-Threading com a microarquitetura Nehalem, após sua ausência na microarquitetura Core.

AMD Bulldozer microarquitetura FlexFPU e cache L2 compartilhado são multithreaded, mas núcleos inteiros em módulo são de rosca única, portanto é apenas uma implementação SMT parcial.

AMD Zen microarquitectura tem SMT de 2 vias.

VISC arquitectura usa a camada de software virtual (camada de tradução) para enviar uma única camada de instruções para o Front End Global que divide as instruções em threads de hardware virtual que são depois enviadas para separar os núcleos virtuais. Estes núcleos virtuais podem então enviá-los para os recursos disponíveis em qualquer um dos núcleos físicos. Núcleos virtuais múltiplos podem empurrar threlets para o buffer de reordenação de um único núcleo físico, que pode dividir instruções e dados parciais de vários threlets através das portas de execução ao mesmo tempo. Cada núcleo virtual mantém um registro da posição da saída relativa. A alocação de recursos é dinâmica em um nível de latência de ciclo quase único (1-4 ciclos, dependendo da mudança na alocação, dependendo das necessidades individuais da aplicação). Portanto, se dois núcleos virtuais estão competindo por recursos, existem algoritmos apropriados para determinar quais recursos devem ser alocados onde.