Isto é de uma prova antiga do meu curso de tecnologia da computação:
Verdadeiro ou Falso? Multithreading de hardware resulta em simultaneidade e não em paralelismo.
De acordo com a chave de resposta, a resposta é "Verdadeiro".
No entanto, estou confuso sobre o porquê. O curso define paralelismo da seguinte forma:
"Paralelismo é sobre fazer (executar) muitas coisas ao mesmo tempo. Paralelismo pode ser visto do ponto de vista do hardware."
(nenhuma explicação mais detalhada foi dada).
Talvez eu esteja confuso sobre como o multithreading de hardware funciona, ou como o paralelismo é definido. Eu pensei que o multithreading de hardware é implementado usando processadores de múltiplos problemas, principalmente por causa deste slide de palestra: Slide de palestra
Isso não significa que várias instruções do mesmo thread (e de threads diferentes em multithreading) podem ser executadas ao mesmo tempo, resultando na execução de coisas diferentes ao mesmo tempo?
Acho que você precisa voltar e ler as notas do curso, não as questões do exame, pois as notas darão contexto e significado.
Normalmente, paralelismo se refere ao paralelismo no nível de instrução e simultaneidade se refere a processos ou threads simultâneos , não a instruções.
O que isso significa é que se você tiver apenas as palavras "paralelismo" e "simultaneidade", elas perderão grande parte do seu significado, pois a definição dessas palavras no dicionário tem alguma semelhança aproximada no significado.
Os núcleos de processadores modernos realmente têm uma grande quantidade de paralelismo de nível de instrução devido a eles serem projetados como mecanismos de execução superescalares fora de ordem. Eles têm várias unidades de execução dentro do núcleo e um planejador que pode determinar dependências de dados e, portanto, executar várias instruções de uma vez se essas instruções não dependerem dos resultados umas das outras. Por exemplo, se você tiver uma instrução adicionando valores A e B e outra adicionando valores C e D, essas instruções podem ser executadas em paralelo.
Isso não muda o que é visto pelo thread ou processo que está dando ao núcleo da CPU um fluxo de instruções. No momento em que o thread vê as instruções executadas, elas foram efetivamente reorganizadas de volta à sua ordem original. No que diz respeito ao thread fora do núcleo, o fluxo de instruções é o mesmo entrando e saindo. Todo o paralelismo acontece "por baixo do capô".
No entanto, múltiplos threads em um processador não permitem que você divida um único processo em vários fluxos de instruções paralelos, não sem o trabalho feito pelo programador.
O que múltiplos threads permitem que você faça é executar dois fluxos de instruções simultaneamente , ou seja, ao mesmo tempo. Ele não permite que o processador divida arbitrariamente um thread de programa em dois fluxos separados, é isso que o paralelismo dentro do núcleo faz porque ele tem muito mais informações imediatas sobre informações de estado atuais e futuras do que o thread tem.
Um programador pode dividir seu próprio programa em threads separados, permitindo-lhe novamente fazer melhor uso da simultaneidade, mas isso exige que ele saiba qual trabalho pode ser dividido em cada thread simultânea e aja adequadamente.