Diferença entre superescalar e multi-core?

11

Não consigo entender isso, qual é a diferença entre superescalar e um processador multi-core?

Eu continuo misturando tudo, então alguns pontos simples sobre o que eles fazem seriam ótimos.

Marsover
fonte
Também me confunde ... Conforme a Wikipedia, os processadores superescalares podem ser de núcleo único ou ter design de núcleo múltiplo. pt.wikipedia.org/wiki/Superscalar_processor 2nd phara
Avi Mehenwal

Respostas:

15

Processadores superescalares significa que você envia várias instruções durante um único ciclo de clock. A razão pela qual isso é diferenciado do multi-core é que você recebe apenas um contador de instruções. Portanto, você acompanha várias instruções durante o voo, mas todas as instruções são de um único programa. Este ainda é apenas um processo. Agora eu disse "você recebe um contador de instruções", e tecnicamente isso é verdade, pois não há nenhum ponto em que seu código sofra uma disparidade, exceto usando alguns esquemas de previsão de ramificações (Execução Especulativa: você executa simultaneamente ambas as ramificações e joga fora o "erro"). "resultado da previsão).

Quando você entra no multi-core, você tem vários fluxos de instruções executando simultaneamente. A parte importante é que cada núcleo (executando com seu próprio contador de instruções) também pode ser super escalar para executar cada processo mais rapidamente!

É possível ter superescalar sem pipelining ou execução fora de ordem, com o que é chamado de palavra de instrução muito longa ou "VLIW". Isso também é chamado de superescalar "estático" (ou seja, está no próprio código). É aqui que você basicamente tem componentes suficientes para executar várias instruções ao mesmo tempo, e você busca várias instruções de uma só vez e as executa. Em sua forma mais simples, imagine que você disse "esse processador sempre buscará e executará duas instruções ao mesmo tempo". Então, contanto que o codificador possa encontrar trabalho a ser executado simultaneamente no mesmo processo, você duplicará sua taxa de transferência! Se você não encontrar duas instruções para montar, basta emparelhar uma instrução e um NOP. Essa idéia não é muito boa, principalmente porque, se você criar uma versão melhor do processador, capaz de executar 3, 4 ou mais instruções ao mesmo tempo, todo o código antigo será quebrado! Mas eles resolveram isso de uma maneira bastante engenhosa; você deve verificar explicitamente instruções paralelas de computação ou material "EPIC", se quiser saber mais.

O superescalar dinâmico com pipelining pode tirar proveito das instruções independentes de dados e do paralelismo no nível das instruções, que é o que a torna uma combinação tão poderosa. Essencialmente, permite que você, com hardware suficiente, execute o máximo de instruções independentes simultaneamente possível.

O superescalar dinâmico, com pipelining e execução fora de ordem, era essencialmente o limite do paralelismo no nível das instruções: você tentaria executar várias instruções no mesmo estágio simultaneamente, tentando encontrar operações que funcionassem sem dependências de dados. Você pode terminar fora de ordem, começar fora de ordem, há todo tipo de coisa que você precisa fazer para manter a cabeça reta enquanto faz coisas superescalares. Multi-core diz "ei programador! Me dê vários problemas que eu possa resolver ao mesmo tempo!" e, como o programador é capaz de ver problemas independentemente solucionáveis ​​além de apenas algumas linhas na montagem compilada, ele pode programar com mais eficiência essas soluções para multi-core.

O superescalar nem é capaz de resolver problemas como "como executo esses dois programas mais rapidamente". Só poderia executar cada programa independente mais rapidamente.

Espero que ajude, desculpe se estiver um pouco desconectado.

--Editar--

Modificado para levar em conta o ponto de ajs410 de que eu havia confundido várias idéias.

Kit Scuzz
fonte
Sim, isso ficou muito mais claro, obrigado! A propósito, acho que a palavra que você procura é "Execução especulativa". De qualquer forma, obrigado novamente.
Marsrover # 12/12
11
Para tornar as coisas esclarecidas por @KitScuzz um pouco mais complicado de novo, leia também HyperThreading
ppeterka
Eu acho que isso confunde super escalar, fora de ordem e pipelining. Especificamente, o superescalar diz "Eu tenho quatro ALUs, para que eu possa pegar essas quatro instruções de adição (de um único thread!) E emiti-las durante o mesmo ciclo de clock". A execução fora de ordem reorganiza o fluxo de instruções em torno das dependências de dados para maximizar o paralelismo no nível das instruções. O pipelining emitirá novas instruções enquanto as instruções antigas estiverem em andamento. A execução e o pipeline fora de ordem têm uma forte sinergia com a execução superescalar, mas não são estritamente necessários para satisfazer a definição.
ajs410
Fixo! Desculpe o atraso.
precisa
1

Se você olhar para os processadores anteriores, como o 80486 ou Pentium, uma CPU era uma única unidade lógica de processamento. Ele executa um único fluxo de instruções por vez. Uma única CPU também era um único chip de silício. Se você quiser mais poder de processamento, poderá comprar uma placa-mãe de servidor dispendiosa com slots para caber em duas CPUs separadas. Então você tinha uma máquina com duas CPUs e dois núcleos de processamento.

Em algum momento, a Lei de Moore significava que tínhamos tantos transistores disponíveis no silício que você podia colocar todo o circuito de duas CPUs em apenas um único chip. Agora você tem o potencial de nomear confusão. Dizer que você tem duas CPUs pode significar que você tem os dois pacotes de silício mais antigos ou o mais novo, mas com a configuração de processamento de dois processadores. Para resolver isso, agora queremos dizer que a CPU é um único pacote de silício e um Core é uma única unidade de processamento lógico dentro dele.

Superescalar refere-se a uma técnica usada em um núcleo para tentar melhorar o desempenho e permitir processar em média mais instruções por ciclo. Um processador escalar executa no máximo uma instrução por ciclo, superescalar significa que pode executar potencialmente mais de uma instrução por ciclo. Por exemplo, se o processador possui uma unidade funcional para aritmética inteira e outra para ponto flutuante, por que não usar as duas ao mesmo tempo para executar duas instruções simultaneamente. E se você tiver três unidades inteiras e duas unidades de ponto flutuante? Agora você tem um potencial ainda maior para execução paralela. Mas você também precisa de mais transistores para a implementação e lógica muito mais complicada para fazê-lo funcionar de maneira confiável. No mundo real, você tende a ser superescalar usado em conjunto com projetos fora de ordem, porque eles se complementam.

Phil Wright
fonte