O que é Execução Fora de Ordem?

Os computadores são máquinas complexas sem nenhuma parte mais complexa do que a CPU. Em um nível básico de visão geral, parece que a CPU deve ser relativamente simples. Ele recebe uma série de comandos, os processa e, em seguida, gera os dados. Isso tem pouca semelhança com o funcionamento real das CPUs modernas.

Subescalar para superescalar

As primeiras CPUs eram exatamente como você esperaria. Eles receberam instruções individualmente, na ordem em que foram dadas, processaram-nas até a conclusão e passaram para a próxima instrução. CPUs desse tipo eram subescalares, capazes de completar menos de uma instrução por ciclo de clock. Os projetistas de CPU identificaram que havia muitos estágios diferentes para concluir uma instrução. Cada um desses estágios exigia um hardware diferente. Isso significava que, ao executar uma única instrução em toda a sequência de cada vez, algumas partes do hardware ficavam ociosas. Em qualquer tipo de processador, o hardware ocioso é um hardware inútil.

Para utilizar esse hardware ocioso, os designs de CPU foram atualizados para usar uma abordagem de pipeline. Isso separou ainda mais o hardware para cada estágio, mas permitiu que todos fossem utilizados ao mesmo tempo por uma série de instruções. Embora ainda levasse alguns ciclos para cada instrução passar pelo pipeline, a taxa de transferência geral era de uma instrução por ciclo. Isso tornou as CPUs escalares.

Para poder fazer mais, os processadores precisavam ser superescalares. Para conseguir isso, vários pipelines paralelos foram implementados.

Mantendo pipelines alimentados com dados

O principal problema de desempenho dos computadores geralmente é a latência da memória. Muitas instruções operam com dados e, portanto, esses dados precisam estar disponíveis para que a instrução seja executada. A questão é: o que você faz se precisar esperar por esses dados porque eles não estão disponíveis imediatamente? Tradicionalmente, a resposta era apenas parar e esperar que ele ficasse disponível. Isso deixa todo o pipeline vazio, possivelmente por centenas de ciclos de CPU. As coisas ficam ainda piores quando duas instruções em pipelines paralelos precisam esperar pela memória, já que a primeira atrasará até mesmo a solicitação dos dados da segunda. Embora a memória cache da CPU possa ajudar a resolver esse problema, ela ainda não pode corrigi-lo. Um novo paradigma era necessário para resolvê-lo. Essa mudança de paradigma foi Out Of Order Execution ou OOO.

O primeiro estágio de um pipeline é decodificar a instrução. Isso significa definir o que precisa ser feito e verificar se os dados necessários para a operação estão disponíveis. Em uma CPU OOO, as instruções decodificadas são adicionadas a uma fila. Eles só são removidos da fila e realmente processados ​​quando os dados de que precisam estão disponíveis. Criticamente, não importa em que ordem as instruções foram adicionadas à fila. Se uma instrução anterior estiver esperando por dados, uma instrução mais recente pode avançar se estiver pronta para ser executada. Os processadores OOO podem reordenar as instruções que devem processar com base na fila das próximas instruções e quais delas estão prontas para execução.

dependências críticas

Este processo pressupõe duas coisas. Em primeiro lugar, é possível identificar e lidar com dependências verdadeiras de forma confiável. Em segundo lugar, você pode lidar com confiança e identificar falsas dependências. Qual é a diferença? Bem, uma verdadeira dependência é uma dependência que não pode ser mitigada em um sistema OOO. O exemplo mais fácil é o read-after-write. Se você tiver uma instrução que deve escrever alguns dados e outra que deve ler esses dados, não há como reordenar essas instruções. Eles devem ser preenchidos na ordem em que foram apresentados, ou você obterá dados sem sentido.

Uma dependência falsa é aquela que pode ser escondida com outro truque inteligente. Vamos pegar o exemplo de escrever depois de ler. À primeira vista, você pode pensar que não pode sobrescrever os dados antes de lê-los. As coisas não são tão simples assim. E se você tiver outro lugar onde possa gravar os novos dados e, em seguida, apenas trocar os dados novos pelos antigos depois que os dados antigos forem lidos? Este é o processo de renomeação de registradores e é crítico para o processamento OOO.

Normalmente, um conjunto de instruções define um número definido de registros de arquitetura usados ​​no sistema. Você literalmente não pode abordar nenhum outro. Mas e se você superprovisionar registros? Você pode apenas ocultá-los na maior parte, usá-los para armazenar dados que ainda não deveriam ter sido processados ​​e simplesmente trocar os rótulos dos registros ocultos e arquitetônicos quando a linha do tempo estiver correta novamente. A qualquer momento, há a quantidade exata de registros arquitetônicos, mas eles não estão necessariamente sempre no mesmo lugar. Uma analogia do mundo real seria hot-desking.

Conclusão

A execução fora de ordem é um paradigma de processamento em que as instruções podem ser reordenadas dinamicamente em tempo de execução pela CPU. Isso é feito com base nas primeiras instruções emitidas que possuem dados disponíveis. Isso significa que as instruções que estão sendo carregadas no pipeline estão sempre prontas para serem executadas e não há atrasos durante a espera pelos dados. Obviamente, é necessário ter uma fila longa o suficiente para não ser preenchida com instruções aguardando dados, mas isso é um desafio de implementação. A execução OOO depende da renomeação de registradores para ocultar falsas dependências. Mesmo que essas instruções sejam realmente executadas fora de ordem, os registradores são renomeados de forma a ocultar esse fato do resto do computador.



Como consertar o driver WUDFRd que falhou ao carregar no Windows 10?

Como consertar o driver WUDFRd que falhou ao carregar no Windows 10?

Você está enfrentando a mensagem de erro ao inicializar o computador, informando que o driver WUDFRd falhou ao carregar no seu computador?

Como corrigir o código de erro NVIDIA GeForce Experience 0x0003

Como corrigir o código de erro NVIDIA GeForce Experience 0x0003

Você está enfrentando o código de erro 0x0003 da experiência NVIDIA GeForce em sua área de trabalho? Se sim, leia o blog para descobrir como corrigir esse erro de forma rápida e fácil.

Noções básicas de impressão 3D: adesão à base da impressora

Noções básicas de impressão 3D: adesão à base da impressora

Aprendendo sobre impressão 3D? Aqui está o que você precisa saber sobre a adesão da base da impressora.

Como remover uma GPU do Windows PC em 2023

Como remover uma GPU do Windows PC em 2023

Você precisa remover a GPU do seu PC? Junte-se a mim enquanto explico como remover uma GPU do seu PC neste guia passo a passo.

Como instalar um SSD NVMe em um desktop e laptop

Como instalar um SSD NVMe em um desktop e laptop

Comprou um novo SSD NVMe M.2, mas não sabe como instalar? Continue lendo para saber como instalar um SSD NVMe em um laptop ou desktop.

O que é uma bomba lógica?

O que é uma bomba lógica?

Uma bomba lógica é um incidente de segurança em que um invasor configura uma ação atrasada. Continue lendo para saber mais.

O que é Stuxnet?

O que é Stuxnet?

O Stuxnet era um worm autopropagado. Foi o primeiro uso de uma arma cibernética e a primeira ocorrência de malware.

O que é um hacker ético?

O que é um hacker ético?

Um hacker ético é um hacker que age dentro das restrições da lei. Continue lendo para saber mais sobre o assunto.

O que é criptografia simétrica?

O que é criptografia simétrica?

Existem muitas partes diferentes da criptografia. Se você deseja criptografar alguns dados, existem dois tipos de algoritmos que você pode usar: simétrico

Como fazer o teste de estresse da GPU em 2023: + 6 melhores ferramentas

Como fazer o teste de estresse da GPU em 2023: + 6 melhores ferramentas

Deseja fazer um teste de estresse da GPU em seu PC com Windows para garantir um desempenho confiável para jogos em HD? Leia este guia de GPU de teste de estresse agora!