Passei algum tempo analisando a taxonomia de Flynn, mas há um aspecto que ainda não consigo entender. Aprendi sobre os seguintes aspectos do multithreading de hardware: multithreading de granulação fina, de granulação grossa e simultâneo. Este último é usado pela Intel e é chamado de hyper-threading.
Para multithreading simultâneo, pelo menos, eu sei que a implementação de hyper-threading da Intel dá a ilusão de ter mais núcleos do que fisicamente presentes. Eu sei que o multithreading simultâneo é alcançado usando um modelo de execução de múltiplos problemas dinâmico como base. Agora, o multithreading simultâneo pode processar vários threads no mesmo passo de tempo. Mas isso significa que ele tem vários fluxos de instruções e, portanto, é MIMD? Eu me pergunto o mesmo sobre os outros tipos de multithreading (grosso e refinado). Especialmente porque a Wikipedia escreve isso sobre MIMD: "Máquinas que usam MIMD têm vários núcleos de processador que funcionam de forma assíncrona e independente"
Obrigado por me ajudar a resolver isso!
Nenhum.
SIMD e MIMD operam no nível de instruções dentro do processador, em vez de multithreading , que envolve o núcleo do processador e apresenta dois núcleos de processador ao sistema.
MIMD dentro de um núcleo é apresentado como tendo múltiplas unidades de execução capazes de executar instruções concorrentemente. Enquanto múltiplos processadores podem parecer MIMD em um sentido conceitual, não é realmente o que se pretende.
Como exemplo da Wikipedia Skylake (microarquitetura) Mudanças na arquitetura comparadas à microarquitetura Broadwell você pode ver o núcleo de um único processador. Dentro desse núcleo as instruções são decodificadas em um ou mais uOPs (instruções micro-op específicas para a microarquitetura do processador) e de lá são empurradas para o planejador:
As EUs são Unidades de Execução que podem operar simultaneamente, recebendo dados e instruções. Esta é a área que é MIMD. Várias instruções e dados sendo despachados para várias unidades dentro do núcleo. Várias Instruções acontecem simultaneamente, manipulando vários pedaços de dados.
O SIMD, por outro lado, funciona colocando vários pedaços de dados em um registro ou conjunto de registros muito amplo e uma única instrução dispara um cálculo que se aplica a todos eles em paralelo. Isso pode ser uma multiplicação de matriz matemática ou similar. Uma única instrução faz um conjunto de cálculos em vários bits de dados.
O Hyperthreading opera fora do núcleo do processador. Ele está fora do front-end, do planejador e das unidades de execução e apresenta um estado salvo separado do processador para o mundo externo. Quando um thread no processador para ou falha em fazer uso efetivo de EUs, ele pode alimentar instruções do segundo thread para preencher as lacunas.
SIMD/MIMD são coisas distintas e separadas de multithreading ou hyperthreading.
Se cada 'thread' HT aparecer como uma CPU lógica separada, então ele também se comporta como uma CPU lógica separada – ele tem seus próprios registradores e seu próprio ponteiro de instrução, então também seu próprio fluxo de instrução. Portanto, seria uma forma de MIMD sob sua classificação.
O Hyper-threading no x86 foi projetado dessa forma para que, quando as CPUs com HT foram introduzidas pela primeira vez, os sistemas operacionais da época não soubessem o que era, mas ainda pudessem trabalhar com uma CPU HT como se estivessem simplesmente sendo executadas em um sistema multi-core (ou multi-CPU), agendando processos diferentes em cada thread HT, como fariam com núcleos de CPU independentes.
(Embora, como os threads de hardware compartilham certos componentes do núcleo no qual estão localizados, um agendador com suporte a HT pode tomar melhores decisões, como evitar colocar processos em threads irmãos se um núcleo separado pudesse ser usado em vez disso... mas o ponto é que o HT é projetado de tal forma que até mesmo um sistema operacional sem suporte a HT ainda pode fazer uso dele.)