Duas threads, um núcleo: como funciona o multithreading simultâneo
Contexto e motivação
- Motivação para a adoção do SMT: foi introduzido para aumentar a utilização dos recursos do processador. O processador tem centenas de registradores, várias unidades de load/store e unidades aritméticas. Para aproveitar melhor isso, são usadas técnicas de paralelismo em nível de instrução (ILP).
- Pipeline de instruções: a execução das instruções é dividida em várias etapas, permitindo processar novas instruções a cada ciclo. Quanto mais profundo o pipeline, mais instruções podem ser processadas em paralelo.
- Arquitetura superscalar: permite emitir várias instruções por ciclo. Por exemplo, processadores Intel Core i7 modernos podem emitir 4 instruções por ciclo.
- Desperdício horizontal e vertical: é o desperdício de recursos que ocorre quando não se consegue encontrar instruções independentes em quantidade suficiente. O desperdício horizontal acontece quando o processador não encontra instruções independentes suficientes, e o desperdício vertical ocorre quando todas as instruções dependem da instrução atualmente em execução.
Implementação de SMT nos processadores Intel
- Replicação do estado arquitetural: o estado arquitetural do processador é replicado para executar duas threads ao mesmo tempo. Assim, um único processador físico aparece para o sistema operacional como dois processadores lógicos.
- Compartilhamento e replicação de recursos: alguns recursos são replicados e outros são compartilhados. A decisão de replicar ou não depende de vários fatores, como consumo de energia e espaço físico no chip.
Microarquitetura do processador
- Frontend, backend e unidade de retirement: a microarquitetura do processador é dividida em três partes. O frontend busca e decodifica instruções, o backend aloca recursos de execução e executa as instruções. A unidade de retirement acompanha os resultados das instruções executadas e os confirma no estado arquitetural.
Detalhes da implementação de SMT
- Frontend: é composto por vários elementos, como ponteiro de instrução, trace cache, cache ITLB e fila de uops. Cada componente é replicado ou compartilhado para dar suporte aos dois processadores lógicos.
- Backend: é composto por alocador de recursos, renomeação de registradores, fila de prontidão de instruções, escalonador de instruções etc. O alocador de recursos alterna entre os processadores lógicos a cada ciclo.
- Unidade de retirement: rastreia quando as instruções estão prontas para serem confirmadas no estado arquitetural e as confirma na ordem correta.
Subsistema de memória
- TLB: um pequeno cache que converte endereços virtuais em endereços físicos. É compartilhado dinamicamente entre os dois processadores lógicos.
- Caches L1, L2 e L3: cada núcleo de CPU tem seu próprio cache L1. O cache L2 pode variar conforme a microarquitetura, e o cache L3 é compartilhado entre os núcleos.
Impacto do SMT no desempenho
- Execução com thread única: ao executar uma única thread em um núcleo com SMT ativado, o desempenho pode cair porque os recursos são compartilhados.
- Execução com duas threads: o desempenho pode variar conforme o padrão de acesso ao cache. Threads cooperativas podem melhorar o desempenho, enquanto threads competitivas podem degradá-lo.
- Vulnerabilidades de segurança: nos últimos anos, foram descobertos problemas de segurança relacionados ao SMT. Devido ao compartilhamento de recursos e à execução especulativa de instruções, há possibilidade de vazamento de dados sensíveis.
Conclusão
- Decidir se deve usar SMT: o SMT foi projetado para aumentar a utilização dos recursos da CPU e elevar o throughput de instruções, mas envolve trade-offs de desempenho e segurança. É importante decidir se deve ser usado ou não de acordo com a carga de trabalho.
Resumo do GN⁺
- Entendendo o SMT: o SMT foi projetado para aumentar a utilização dos recursos da CPU e elevar o throughput de instruções.
- Desempenho e segurança: o SMT pode ajudar a melhorar o desempenho, mas também pode causar queda de desempenho e problemas de segurança devido à competição por recursos e a vulnerabilidades.
- Decidir se deve usar: é preciso decidir com cuidado se o SMT deve ser usado ou não dependendo da carga de trabalho. Em casos em que alto desempenho é essencial, pode ser melhor desativar o SMT.
- Projetos relacionados: também vale a pena consultar a implementação de SMT da AMD e projetos de análise de desempenho de SMT em processadores ARM.
Ainda não há comentários.