Como um processador pode ser acelerado com uma atualização de "software"?


120

Os novos processadores AMD Ryzen estão no mercado e, infelizmente, parecem não ter jogos. Os processadores Intel são obviamente ainda mais rápidos para jogos. As pessoas obviamente não eram a favor disso e a AMD fez uma declaração dizendo que está atualizando o firmware ou software para acelerar o Ryzen para jogos.

Corrija-me se estiver errado, mas o processador deve ter um firmware estático para ser compatível com o padrão x64? Se sim, a AMD não teria que otimizar os jogos (software) para seus processadores, o que é obviamente impossível? O que está acontecendo lá para dizer essas coisas se parece impossível ver as condições subjacentes?

Mas posso estar errado (espero que sim), então a pergunta é:

É possível obter uma aceleração para um processador sem alterar o hardware subjacente? Se for possível, como isso é feito? Existe software ao lado do firmware do processador?


71
Você pode pesquisar no Google o termo "microcódigo".
PlasmaHH


10
O firmware pode ser bom ou ruim, ou simplesmente não "bom para o aplicativo". O x86 não define o tempo das instruções; portanto, atualizar o firmware (microcódigo) para melhorar o tempo das instruções não quebra a compatibilidade do x86. Existem algumas razões possíveis para que isso seja possível e possa ser necessário: 1) o microcódigo inicial é um trabalho rápido e não é ideal; 2) o microcódigo inicial apresenta bom desempenho quando o programa é compilado para a Ryzen, mas não se o programa for compilado para x86 genérico ou para o processador da intel, que é a maioria do software existente.
user3528438

15
Uma atualização de microcódigo pode melhorar o tempo de instrução, mas há muito mais. As CPUs modernas realizam tarefas como previsão de ramificação, execução especulativa, execução fora de ordem e muito mais que podem melhorar significativamente o desempenho. Tudo isso é controlado por microcódigo. As otimizações de microcódigo levam tempo e essa mercadoria geralmente é escassa em um negócio competitivo.
precisa saber é o seguinte

4
Imagine que você está correndo e, por algum motivo, se recusa a dobrar a perna esquerda. Isso fará com que você fique constrangido e lento - você pode aumentar facilmente sua velocidade de corrida usando o "mesmo hardware" da sua perna com mais eficiência e dobrando-a com mais eficiência. Alterar as instruções do "cérebro" para a perna aumenta drasticamente o desempenho.
Enderland 8/03

Respostas:


123

Os processadores modernos são muito mais complicados do que se poderia pensar. Eles são incrivelmente complicados, quase além da compreensão de uma única pessoa. Expandindo uma breve observação de "horta", pode-se ter todo o seguinte:

  1. Para começar, quase todo o hardware interno é configurável em grande medida. Existem milhares e milhares de registros de configuração com zilhões de bits individuais que devem ser definidos para que uma CPU opere. Todas as várias camadas de interação CPU-cache têm pipelines configuráveis, e vários atrasos de tempo obviamente afetam o desempenho geral.

  2. Existem centenas de recursos avançados que os arquitetos colocam ali que a engenharia não teve tempo de validar, portanto centenas de recursos são desabilitados ou configurados em uma configuração à prova de falhas com "pedaços de frango" . Mas eles podem ser ajustados e ativados se forem funcionais e úteis. Esses recursos de aprimoramento geralmente são validados em profundidade ao longo do tempo e podem ser ativados gradualmente ao longo da vida de um processador por vários patches de microcódigo.

  3. Todas as CPUs recentes possuem várias unidades internas controladas por microprocessadores independentes incorporados no chip da CPU x86. Uma unidade de superfície pública é a unidade P. Os processadores modernos não podem funcionar sem um gerenciamento agressivo de energia, ou eles derreterão. No entanto, o gerenciamento profundo de energia está em contradição com uma política agressiva de relógio / tensão de entrada / saída e as mudanças na política afetam fortemente o desempenho geral do sistema. Todos os detalhes são controlados pela unidade P e podem ser otimizados / ajustados carregando outro patch de microcódigo, conforme respondido aqui.

  4. Muitos outros aspectos da interconexão interna são controlados por vários processadores embarcados adicionais, que podem ser corrigidos carregando patches de microcódigo neles ou atualizando o BIOS se ele tiver acesso a esses recursos de configuração.

Em resumo, enquanto o hardware da CPU é realmente conectado, a configuração do hardware define praticamente seu desempenho e pode ser ajustada para obter um melhor desempenho do sistema por meio de atualizações do BIOS e patches de microcódigo incorporados.


Não tenho certeza de qual resposta devo aceitar. A resposta de @ bwDraco é boa, mas a sua se encaixa na resposta real, mais difícil ainda: a resposta é fornecer informações específicas sobre o problema.
Arthur PR

Bem, você deve aceitar esta resposta. Você veio de um ambiente eletrônico, por isso parece estar interessado no firmware da CPU (não em algumas mudanças no Windows). @ ArthurP.R.
AnoE

3
@ ArthurP.R. Se as pessoas de benchmarking descobriram que o Windows não agende tarefas para processadores multithread corretamente (trata os threads como núcleos independentes), isso significa que a AMD de alguma forma estragou os descritores do processador / o que seja, para que a Microsoft não os entenda. Se os descritores puderem ser corrigidos de acordo com os padrões da Microsoft por algum mecanismo de atualização, isso seria uma correção fácil de primeira ordem. E você fez uma pergunta geral, então isso responde. :-)
Ale..chenski

É por isso que eu aceitei a sua resposta mesmo que a resposta de @bwDraco ajuste está aqui também
Arthur PR

102

Uma variedade de problemas de software nos níveis de sistema operacional e de aplicativo está causando desempenho abaixo do ideal.

Os processadores Ryzen de oito núcleos consistem em dois complexos de núcleo (CCXs), cada um com quatro núcleos e 8 MB de cache L3. O acesso ao cache L3 em um CCX diferente é mais lento devido à necessidade de avançar os dados ao longo do Infinity Fabric (interconexão coerente em cache proprietária da AMD), o que significa que mover threads de um CCX para outro ou se comunicar entre núcleos em diferentes CCXs resulta em desempenho reduzido. Essa penalidade é uma reminiscência do que aconteceria em um servidor com vários soquetes executando um sistema operacional que não seja da NUMA .

Parece que o Windows tem uma tendência a simplesmente mover processos em diferentes núcleos e não reconhece a penalidade de comunicação entre CCX . Isso significa que o Windows pode colocar threads em diferentes CCXs, mesmo quando isso não for necessário , reduzindo o desempenho.

O revisor alemão PC Games Hardware testou um Ryzen 7 1800X com vários números de núcleos desativados e descobriu que ter dois CCXs com dois núcleos ativados em cada um produz um desempenho mais lento do que ter um CCX ativado com todos os seus núcleos intactos:

Resultado de benchmark da PC Games Hardware: Battlefield 1

Isso ocorre apesar de ter apenas um CCX ativado significa que apenas 8 MB de cache L3 estão disponíveis, em vez dos 16 MB completos. No artigo Hardware de jogos para PC, via Google Translate (ênfase adicionada):

[...] É muito mais emocionante reconhecer o fato de que as transferências de dados do CCX interferem entre si em qualquer caso - às vezes mais, às vezes com menos clareza. As vantagens do cache L3 maior (configuração 2 + 2) não estão em nenhum lugar nesta série de medições.

Este artigo do PC Perspective mostra que existe uma latência de comunicação substancial entre núcleos em diferentes CCXs, mas muito pouca latência ao se comunicar com núcleos no mesmo CCX. Observe que este artigo sugere que o Windows está ciente do design do CCX e está evitando agendar threads em diferentes CCXs, mas resultados conflitantes foram encontrados pelos membros da comunidade.


Muitos (mas não todos) benchmarks Gaming Show aumento de desempenho quando SMT está desativado. No entanto, rumores dizem que o Windows programa incorretamente como se todos os threads de hardware como seu próprio núcleo estivessem incorretos . De acordo com a AMD, isso é causado pelo fato de muitos aplicativos serem otimizados apenas para processadores Intel (o que não é inesperado, pois a AMD tem sido MIA no mercado de processadores de última geração por cinco anos). A AMD diz que está trabalhando com centenas de desenvolvedores de jogos para melhorar o desempenho nos processadores Ryzen. No entanto, suspeito que uma atualização do Windows ainda pode ajudar, ajustando com mais precisão o agendador para as características da arquitetura Zen .

O exemplo a seguir do Tom's Hardware demonstra desempenho degradado com o SMT ativado:

Resultado de benchmark de Tom's Hardware: Ashes of the Singularity

O TechSpot fez uma análise aprofundada do desempenho dos jogos com SMT ativado e desativado e apresentou resultados muito semelhantes:

Resultado de benchmark da TechSpot: Deus Ex: Mankind Divided


Também há problemas de gerenciamento de energia envolvidos nesses testes. A mesma declaração da AMD observa que o Windows não está totalmente ciente dos novos recursos do Ryzen, como estacionamento principal e troca rápida de frequência de clock. Isso é consistente com as melhorias de desempenho relatadas pelo Tom's Hardware ao usar o plano de energia de alto desempenho (consulte a tabela acima, HP = alto desempenho). Uma atualização para o Windows pode adicionar suporte para esses recursos e melhorar o desempenho.


12
Não tenho certeza se estou seguindo. O OP diz explicitamente que, como a otimização de jogos para Ryzen está em dúvida neste estágio e os bugs do Windows são uma história ainda mais longa, como essa resposta ajuda a entender como as atualizações de firmware podem dar esperanças de melhorar o desempenho?
Ale..chenski

11
Ele está basicamente dizendo que o Windows está bagunçando totalmente como / onde está alocando threads - causando problemas de desempenho.
Journeyman Geek

2
@JourneymanGeek, qualquer Windows decente (não tenho certeza se o W10 se qualifica) sempre tem controle explícito da afinidade principal com um processo, e zombar com afinidade sempre foi a primeira ferramenta de benchmarking. O que há de novo então?
28517 Ale..chenski

4
Infelizmente sim, mas as atualizações do kernel estão em andamento. Você provavelmente precisará esperar pelo kernel 4.12; 4.11 traz algumas correções, mas não está lá. phoronix.com/scan.php?page=news_item&px=Ryzen-7-Linux-4.11
bwDraco

7
@Crouchingkitten A AMD pode apenas fornecer drivers, não atualizações do sistema operacional. Essas coisas não estão no pool de tarefas do AMDS.
Arthur PR

9

http://wccftech.com/amd-ryzen-launch-aftermath-gaming-performance-amd-response/

1) Os BIOS antigos da placa-mãe certamente estavam com problemas: desativar recursos não relacionados desativaria os núcleos. Definir overclock de memória em algumas placas-mãe desabilitaria o impulso. Algumas revisões do BIOS produziriam um desempenho universalmente suprimido.

2) A Ryzen se beneficia da desativação dos HPET (High Precision Event Timers). A resolução do timer do HPET pode causar um efeito de observador que pode subtrair o desempenho. Esta é uma opção do BIOS ou uma função que pode ser desativada no shell de comandos do Windows.

3) A Ryzen se beneficia da ativação do perfil de potência de alto desempenho. Isso substitui o estacionamento principal. Eventualmente, teremos um driver que permite que as pessoas permaneçam equilibradas e desativem o estacionamento principal de qualquer maneira. Os jogadores também fazem isso há algum tempo. Eu errei aqui. Quero esclarecer o benefício: O modo de alto desempenho permite que a CPU atualize sua voltagem / velocidade do relógio em 1ms, contra os 30ms necessários no modo balanceado. É isso que o nosso motorista realizará. Desculpas pela confusão!

Portanto, a verdadeira questão não é como uma atualização de BIOS / firmware pode tornar um processador mais rápido (pode fazer, otimização de microcódigo etc ...) é mais ... quão aleijada é uma CPU pelo BIOS / firmware de buggy


Sinto muito por perguntar do lado errado da pergunta. Eu pensei que seria adequado, especialmente porque também estou interessado em informações não triviais.

np, talvez seja abstrato o suficiente para ficar. Estou seguindo Ryzen enquanto planejo uma grande reconstrução, por isso estou acompanhando todos os problemas iniciais. Como usuário do Linux, também estou acompanhando problemas específicos do Linux. Uma coisa a considerar com o Ryzen (e o núcleo zen) é o primeiro SMT da AMD e as indicações iniciais são de que os núcleos lógicos são diferentes do que a Intel e o BIOS / Windows podem estar tentando usar todos os "núcleos" como núcleos físicos quando metade é lógica. núcleos. Isso afectar significativamente o desempenho
Naib

As respostas, comentários e pensamentos sobre esta questão são muito importantes, eu acho, porque as pessoas precisam saber se as coisas podem melhorar ainda mais e até agora vi que agora posso esperar novamente. Entre o artigo é muito, muito bom!

Para mais informações específicas da Ryzen ... forums.gentoo.org/viewtopic-t-1057910.html Muitos de nós no fórum do gentoo publicam e discutem quando obtemos informações. No momento, para o Linux, os drivers de áudio da mobo estão apenas no git, da mesma forma que os monitores térmicos não existem ... Os problemas principais e de HPET são uma preocupação imediata. Agora AMD bater completamente Intel para fora para computação puro
Naib

1
até certo ponto sim. Eu mantenho a minha afirmação de que para o Ryzen ele está sendo aleijado de modo BIOS / condutores irão "acelerar"
Naib

6

O BIOS é geralmente considerado como firmware. O BIOS pode modificar todos os tipos de bits no hardware para alterar a forma como o sistema é executado

Portanto, sim, é perfeitamente viável que eles realizem um novo firmware e para coisas como a velocidade do relógio, ou se as pré-configurações estão ativadas ou se um determinado núcleo - ou IIO - pode obter determinadas preferências no cache, o que tem o potencial de aumentar o desempenho dos jogos devido a para a maioria dos jogos projetados de maneira única.


Isso parece interessante, é possível encontrar referências para isso? Seria muito bom ter alguns deles a prova para as pessoas :)

@ ArthurP.R. Entre pcode, ucode (microcode) e BIOS, o desempenho e a funcionalidade de um chip podem sofrer grandes alterações. Esses são todos software / firmware. Em termos de fonte, não, não posso fornecer fontes externas para essas informações (pois são todas internas).
horta

Que chatice @horta, no entanto, muito obrigado por esta informação. Sinta-se à vontade para ajustar sua resposta para incluir essas informações também. Vale a pena!

4

Não é tanto que as atualizações de software tornem o processador mais rápido. O que todo mundo espera é que as atualizações de software tornem o software mais adequado para a arquitetura da Ryzen e capaz de alavancar melhor seu desempenho.

Corrija-me se estiver errado, mas o processador deve ter um firmware estático para ser compatível com o padrão x64?

Quase. Há software na CPU (microcódigo, como mencionado acima) e pode influenciar o desempenho. Basicamente, o X86 especifica apenas os resultados das operações, como exatamente a CPU alcança esses resultados é o problema dos engenheiros. As chances de ajustes de microcódigo desempenhando um papel importante com a Ryzen são pequenas, já que a diferença de desempenho parece se aplicar principalmente a jogos que sugerem que a CPU tenha um bom desempenho, mas alguns jogos em particular não a aproveitam bem.

O sistema operacional é responsável por garantir que os programas sejam distribuídos de forma eficiente na CPU, o que pode afetar o desempenho, mas, em geral, nenhum desses fatores é o principal problema de uma nova arquitetura. A maioria das melhorias de desempenho em casos como esse ocorre como resultado dos desenvolvedores que escrevem código mais adequado à nova arquitetura. Isso tende a não acontecer entre gerações de CPU da Intel, pois as mudanças no design não são tremendamente significativas; portanto, o que funciona bem em um provavelmente funcionará bem em outro.

No entanto, a Ryzen é um novo design, portanto, tudo o que foi escrito para se adequar a outras CPUs, por definição, não foi escrito para se adequar à Ryzen.

Para simplificar demais a situação, imagine dois processadores:

  • O Processador Um está no mercado há um tempo e é (por qualquer motivo) muito rápido em adicionar números. O software foi projetado para tentar usar a adição o máximo possível, para aproveitar essa capacidade.

  • Um processador concorrente chega ao mercado e é mais fraco além disso, mas mais forte na multiplicação. Todo o software otimizado para usar mais instruções de adição pesada executa mal no novo processador, mas o software que não foi adaptado para usar a adição de lotes executa mais ou menos da mesma forma. Alguns softwares já podem multiplicar bastante e terão melhores resultados nas novas CPUs do que no Processador Um, mesmo no dia do lançamento.

Algum tempo após o lançamento, os desenvolvedores começarão a se adaptar, usando mais multiplicação em seu software, ou até mesmo projetar seu software para alternar entre os caminhos de códigos pesados ​​de adição e os pesados ​​de multiplicação, dependendo de qual arquitetura de CPU estiver sendo usada.

É o que está acontecendo com a Ryzen - é uma nova arquitetura que os desenvolvedores de software ainda não otimizaram para se adequar às características. Com o tempo, os desenvolvedores começarão a ajustar seu software para obter um melhor desempenho. Como a maioria dos softwares já foi projetada para ter um bom desempenho nos processadores Intel (eles são bastante populares, afinal!), Eles provavelmente não se beneficiarão muito dessas mudanças.

Existem algumas cargas de trabalho nas quais a Intel simplesmente permanecerá mais rápida, e outras nas quais a Ryzen já é mais rápida (e ficará ainda mais rápida), dependendo do comportamento subjacente. Na situação mencionada acima, um software que apenas precisa adicionar coisas sempre terá melhor desempenho no primeiro processador, e software que simplesmente deve multiplicar as coisas sempre terá melhor desempenho no segundo - mas, na maioria das vezes, o software é complexo e essas diferenças se estabilizarão um pouco.

Se sim, a AMD não teria que otimizar os jogos (software) para seus processadores, o que é obviamente impossível?

Também vale a pena notar que o que a AMD realmente disse sobre o desempenho dos jogos é que eles estão trabalhando com desenvolvedores para otimizar os jogos. Eles estão enviando sistemas de desenvolvimento para empresas (atualmente existem 300 em estado selvagem, e estão apontando para 1000 até o final do ano) e conversando com aqueles cujos jogos apresentam um desempenho ruim para ajudar a resolver o problema. Até onde eu sei, nenhuma declaração foi feita de que a AMD esteja otimizando os jogos.

Nesse caso em particular, o Ryzen também está sendo retido em algumas circunstâncias pelo Windows, tomando más decisões sobre quais núcleos carregar com o trabalho, e os BIOS atuais são problemáticos por razões que simplesmente não pretendo conhecer. No entanto, esses problemas não podem ser responsáveis ​​por toda a lacuna de desempenho, pois há cargas de trabalho nas quais a Ryzen já supera a Intel de maneira convincente, o que sugere que o problema se deve pelo menos parcialmente (se não principalmente) aos programas específicos em execução, em vez de o SO ou BIOS como um todo.


Essa resposta também é interessante e ni e. Obrigado.
Arthur PR

1

Obviamente, o software pode melhorar o desempenho da CPU ou da GPU.

Uma maneira é definitivamente fazer overclock ou algum outro tipo de mecanismo de alteração de relógio. O segundo pode ser otimizações de driver. Isso inclui métodos melhores de compactação de dados, algoritmos de decodificação mais rápidos, etc ... basicamente recursos que ajudam a utilizar melhor o hardware. Esses recursos também podem ser atualizados por atualizações de firmware, o que não é realmente um software (regular). Depois, há um software que pode controlar a solução de refrigeração do seu computador. Isso é muito útil para CPUs e GPUs que utilizam tecnologias de aumento de desempenho, como o Turbo boost da Intel e o GPU da Nvidia. Um hardware como esse tem certas limitações de temperatura; portanto, eles diminuem o desempenho, quando estão com muito calor e fazem overclock dinâmico, quando os aplicativos exigem maior poder de computação, desde que não atinjam o consumo máximo de energia e eles '

Também existem outras opções, mas a maioria cobre isso. Basicamente, desde que você conheça o problema e possa manipular programaticamente a maneira como os dados são processados ​​(como a introdução de um algoritmo de decodificação inteligente que substitui um tipo de solução de "força bruta") ou manipular as reações do processador a diferentes fatores-chave de seu desempenho (como aumentar o resfriamento mais agressivamente em caso de superaquecimento ou monitorar as demandas de recursos dos aplicativos e fazer overclock dinamicamente quando é necessário mais poder de processamento), você pode fazer muito para melhorar (ou piorar) o desempenho de uma unidade de processamento.

No caso da AMD, provavelmente é uma otimização de seu mecanismo de impulso ou solução de refrigeração. Provavelmente, um ou ambos foram alterados para reagir de forma mais agressiva ao aumento de carga ou temperatura.

TL; DR: Sim, o software pode melhorar o desempenho de um processador. Há muitas maneiras de fazer isso, como otimizações de driver e firmware, overclocks etc. Qualquer alteração de software que prepare dados para facilitar o processamento ou fazer com que o hardware reaja melhor à carga ou suas limitações provavelmente levarão a um desempenho aprimorado.


-1

As atualizações de software podem definitivamente fazer o sistema (incluindo o processador) funcionar mais rápido.

Um exemplo muito extremo disso são os grandes computadores mainframe da IBM: você pode comprar mais tempo de CPU on-line e tudo o que obtém é uma chave de licença que precisa ser inserida no sistema operacional e o boom !, seu sistema funciona mais rápido. O truque é simples: às vezes, o agendador do sistema operacional se recusa a agendar tarefas e, em vez disso, a CPU entra no modo de suspensão, ou até mesmo executa um loop NO-OP por um curto período de tempo, para atingir um determinado rendimento médio geral. Se você pagar por uma licença mais cara, o agendador removerá os NO-OPs.

Ou, ainda mais drasticamente: se você comprar um sistema com apenas 4, 6 ou 8 CPUs, normalmente haverá cerca de 16 a 32 sistemas instalados. O sistema operacional simplesmente desliga alguns deles e, ao inserir uma chave de licença, você pode ativá-los.

Da mesma forma, os mainframes da IBM distinguem entre diferentes tipos de processadores: processadores Linux, Java, Transaction etc. Eles são na verdade todos do mesmo processador, mas o planejador do SO se recusará a agendar tarefas de Transação (que são as mais importantes) para um Processador Java ou Linux. Somente Java VMs serão agendadas para os processadores Java e apenas VMs Linux serão agendadas para os processadores Linux. Se você deseja obter um desempenho mais alto da transação, é necessário comprar licenças para mais processadores de transação: novamente, esses são exatamente os mesmos processadores, a única diferença é um sinalizador de configuração no agendador que diz "não agende tarefas de transação para esses processadores "

Outro exemplo, não tão extremo, são as diferentes edições do Windows. Edições diferentes do Windows suportam um número diferente de núcleos de CPU e diferentes quantidades de memória. Se você possui muita memória e um grande número de CPUs, pode acelerar seu sistema, apenas atualizando para uma edição "maior" do Windows. Observe que as edições têm exatamente o mesmo código; existe apenas uma opção de configuração em algum lugar que diz "você é uma Home Edition, você suporta apenas 1 CPU e 128 GiByte".

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.