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.



Leave a Comment

O Que Fazer Se o Powerbeats Pro Não Carregar no Estojo

O Que Fazer Se o Powerbeats Pro Não Carregar no Estojo

Se o seu Powerbeats Pro não estiver carregando, experimente usar outra fonte de energia e limpe seus fones de ouvido. Deixe o estojo aberto enquanto carrega seus fones.

Canon Pixma MG5220: Digitalize sem Tinta

Canon Pixma MG5220: Digitalize sem Tinta

Como ativar a digitalização na Canon Pixma MG5220 quando você ficar sem tinta.

5 Motivos pelos Quais Seu Laptop Está Superaquecendo

5 Motivos pelos Quais Seu Laptop Está Superaquecendo

Descubra algumas das possíveis razões pelas quais seu laptop está superaquecendo, juntamente com dicas e truques para evitar esse problema e manter seu dispositivo fresco.

Como Corrigir o Código de Erro 0xC272008F do GeForce Now

Como Corrigir o Código de Erro 0xC272008F do GeForce Now

Você está se preparando para uma noite de jogos, e será uma grande noite – você acaba de adquirir “Star Wars Outlaws” no serviço de streaming GeForce Now. Descubra a única solução conhecida que mostra como corrigir o Código de Erro 0xC272008F do GeForce Now para que você possa começar a jogar jogos da Ubisoft novamente.

Fundamentos da Impressão 3D: Dicas de Manutenção para a Sua Impressora 3D

Fundamentos da Impressão 3D: Dicas de Manutenção para a Sua Impressora 3D

Manter suas impressoras 3D é muito importante para obter os melhores resultados. Aqui estão algumas dicas importantes a serem lembradas.

Como Encontrar o Endereço IP de uma Impressora

Como Encontrar o Endereço IP de uma Impressora

Está tendo dificuldades para descobrir qual endereço IP sua impressora está usando? Vamos mostrar como encontrá-lo.

Como desligar o Roku

Como desligar o Roku

Descubra como desligar o Roku Player, enquanto aprende sobre suas opções de economia de energia e melhores práticas.

O que é SLI?

O que é SLI?

SLI ou Scalable Link Interface é uma tecnologia da Nvidia que permite que várias placas gráficas trabalhem juntas para obter maior desempenho.

O que é N-Key Rollover e Anti-Ghosting?

O que é N-Key Rollover e Anti-Ghosting?

Entenda os conceitos de N-key rollover e Anti-Ghosting, dois recursos essenciais em teclados para gamers que melhoram a experiência de jogo.

O que é VRAM?

O que é VRAM?

VRAM, ou Video Random Access Memory, é uma forma essencial de RAM utilizada em processadores gráficos, fundamental para o desempenho em videogames.