O processo será executado mais devagar em um thread em vez de um núcleo

2

Tantas CPUs agora vêm com 2/4 núcleos e 4/8 threads.

Existem também algumas CPUs que são 4 core & 4 tópicos.

Isso significaria que um processo inigualável rodaria mais devagar no mesmo ciclo de clock da CPU com 8/4 da CPU do que na CPU de 4/4, porque está usando apenas metade do núcleo?

Existe uma forma programática (digamos, nível do sistema operacional) para configurar a CPU para apenas 1 thread por núcleo?

    
por dzh 05.06.2015 / 05:36

2 respostas

1

Would that mean that unparallel process will run slower on the same clock cycle CPU with 4 core 8 thread CPU than on 4 core 4 threadCPU because it is using only half of the core?

Classificar, sim e não.

Se eu executo 8 programas independentes de treaded em um 8 core (8 tread) CPU, cada núcleo irá executar um passo e estes serão executados em velocidade máxima (por exemplo, atribuir o tempo todo, ignorando coisas como o sistema operacional que também quer um pouco de CPU tempo).

Se eu executo 8 programas independentes de banda larga em uma CPU de 4 núcleos (4 passos), então, em média, cada núcleo executará dois deles. O programa será executado com metade da velocidade.

Até agora não há surpresas.

Agora, com uma CPU de 4 núcleos (8 passos), o sistema operacional acha que há 8 núcleos. Ele os seguirá como o primeiro caso. No entanto, este não é realmente o caso; metade dos núcleos não são construídos como núcleos regulares. Normalmente, apenas parte da funcionalidade é duplicada e, se você tiver má sorte, um dos degraus será interrompido. Não será mais rápido que uma CPU 4c / 4t.

No entanto, se você tiver muita sorte (por exemplo, as ALUs são duplicadas e você está alternando entre as trata de buscar informações da memória e adicionar), ambas podem ser executadas a toda velocidade.

Em média , isso leva a um aumento de velocidade de 30%.


Para tornar isso ainda mais complexo: se os programas usarem grandes conjuntos de dados, a execução de mais de quatro deles poderá resultar em menos acessos ao cache. O último pode realmente atrasar as coisas.


Is there a programmatic way (say OS level) to set CPU to only 1 thread per core?

Sim, a vez de hiper pisar.

Você pode fazer isso no firmware (por exemplo, no BIOS ou no UEFI) ou no sistema operacional.

Por exemplo para um CPU 8t 4core com núcleos 0 1 2 3 sendo os primeiros núcleos e 4 5 6 7 sendo o conjunto de trilhos que você poderia usar:

echo 0 > /sys/devices/system/cpu/cpu4/online
echo 0 > /sys/devices/system/cpu/cpu5/online
echo 0 > /sys/devices/system/cpu/cpu6/online
echo 0 > /sys/devices/system/cpu/cpu7/online

IIRC O FreeBSD fez o mesmo com um syscontrol. Para o OSX ou Windows, você precisaria pesquisar no Google.

    
por 05.06.2015 / 10:16
0

Threading é controlado por software (pense Java VM) e núcleos são hardware. Um processador pode ter vários núcleos internos com diferentes esquemas de interconexão. Cada núcleo pode processar um encadeamento, mas depende de como o sistema operacional gerencia cada encadeamento.

Eu recomendo a série "Expert's Voice in Microprocessors" da Apress para obter o que há de melhor em hardware de processador.

Eu recomendo o excelente livro de Paul Butcher sobre concorrência simultânea, pois ele também cobre as GPUs (Seven Concurrency Models in Seven Weeks).

    
por 05.06.2015 / 05:52