Núcleos, encadeamentos e multiprocessamento

0

Eu sei que toda essa terminologia é um campo confuso, mas estou tentando interpretar como eles estão sendo usados em: link

O contexto que eu tenho é que eu tenho um programa antigo escrito em VB6 que eu posso acionar muitas instâncias de. E estou pensando em quantas instâncias eu seria capaz de disparar antes que o processamento diminua significativamente? Por exemplo. para o Xeon E7-8870 seriam os 10 núcleos, os 20 threads ou os 8 multiprocessadores que me estrangulam?

(Eu sei que o programa precisa ser reescrito em C #, outras prioridades primeiro ...)

Muito apreciado

    
por Rodney 05.04.2013 / 02:36

2 respostas

1

Depois de saturar os núcleos físicos, cada instância diminuirá significativamente. Isso é especialmente verdadeiro se todos os threads estiverem executando a mesma mistura de instruções. Se você tiver 10 núcleos físicos, provavelmente começará a ver uma queda no desempenho total se iniciar mais instâncias.

Você realmente não saberá até que você tente embora. Se as tarefas fizerem muita E / S, você poderá descobrir que mais instâncias permitem que a CPU fique mais ocupada, mesmo durante a E / S. No entanto, se as tarefas usarem muita memória, você poderá descobrir que uma maior pressão nos caches e no controlador de memória faz com que o throughput total caia, possivelmente drasticamente.

Mesmo nas melhores circunstâncias, o hyper-threading só adiciona um aumento de 15% no throughput. Isso significaria que dois segmentos, cada um, executam cerca de 57% da velocidade de um único thread.

    
por 05.04.2013 / 03:08
2

Não há confusão realmente.

Um núcleo é um processador, em um dado. Você pode ter um processador, que é um único núcleo em um único pacote. Você também pode ter um processador dual-core que é um pacote com várias CPUs. O mesmo vale para qualquer multicore. Você poderia ter um processador de 1000 núcleos, ainda é um pacote com 1000 processadores.

O multiprocessador é composto por vários sockets e pacotes de CPU físicos. Você pode ter dois processadores de núcleo único ou mais. Você também pode ter vários processadores multi-core assumindo que a CPU o suporta. 4 processadores quad core é basicamente o mesmo que ter 16 processadores em pacotes separados ou 1 pacote de 16 núcleos no que se refere a potência e desempenho. São apenas 4 pacotes e 4 núcleos para cada pacote.

Threads são quantos processos separados podem ser executados por vez. Para simplificar, a maioria dos processadores pode lidar com 1 thread de cada vez, o Hyperthreading pode fazer 2 de cada vez. HTT (Hyperthreading) significa cada núcleo (não importa se o seu 2 em 1, ou 1 por 2) pode fazer 2 threads. Então, um processador HTT quad core pode, em teoria, fazer 8 threads. Isso nem sempre é correto, e alguns softwares lidam com o HTT muito mal.

Quanto ao seu processo, é difícil dizer. Se você tivesse 10 núcleos com o Hyper-threading e o aplicativo pudesse ser executado em um único thread, provavelmente você teria 20 instâncias separadas, assumindo: Você tem RAM suficiente Você drives de disco podem acompanhar os IOs Nada mais interrompe ou assume

Se o processo não puder preencher a CPU inteira por conta própria (digamos que ele seja limitado a 50% de uso), você poderá adicionar alguns threads / jobs extras ao pool também.

    
por 05.04.2013 / 02:45

Tags