Pergunta

Estou tendo alguns problemas reais para encontrar essas informações on -line, estou na uni segunda -feira para poder usar a biblioteca, mas logo quanto melhor. Quando um sistema possui processadores multicore, cada processador pega um segmento do primeiro processo na fila pronta ou é preciso um do primeiro e um do segundo? Além disso, apenas para verificar, os threads serão enviados e buscados dos multicores simultaneamente pelo sistema operacional, certo? Se alguém pudesse me indicar a direção certa em termos de recursos, isso seria ótimo!

Foi útil?

Solução

O principal é apreciar qual é a arquitetura da máquina.

Um "núcleo" é uma CPU com cache com uma conexão com a memória do sistema. A maioria das arquiteturas de máquinas é multiprocessamento simétrico, o que significa que a memória do sistema é igualmente acessível por todos os núcleos do sistema.

A maioria dos sistemas operacionais executa um encadeamento do agendador em cada núcleo (o Linux faz). O agendador possui uma lista de threads pela qual é responsável e os executará da melhor maneira possível no núcleo que controla. As regras que ele usa para escolher qual encadeamento é executado será redondo, ou com base prioritária, etc; ou seja, todas as regras normais de agendamento. Até agora, é como um agendador que você encontraria em um único computador principal. Até certo ponto, cada agendador é independente de todos os outros agendadores.

No entanto, este é um ambiente SMP, o que significa que realmente não importa qual núcleo executa qual encadeamento. Isso ocorre porque todos os núcleos podem ver toda a memória e todo o código e dados de todos os threads em todo o sistema são armazenados nessa memória única.

Portanto, os agendadores conversam entre si para se ajudarem. Os agendadores com muitos threads para executar podem passar um thread para um agendador cujo núcleo está abaixo da utilização. Eles são balanceamento de carga dentro da máquina. "Passe um encadeamento" significa copiar a estrutura de dados que descreve o encadeamento (ID do thread, quais dados, qual código).

Então é isso. Como a única comunicação entre núcleos é via memória, tudo depende de um sistema de semáforo de exclusão mútua eficaz disponível, o que é algo que o hardware deve permitir.

A dificuldade

Então, pintei uma imagem muito simples, mas na prática a memória não é perfeitamente simétrica. Atualmente, o SMP é sintetizado sobre o Hypertransport e o QPI.

Longe vão os dias em que os núcleos realmente tiveram acesso igual à memória do sistema no nível eletrônico. Na camada mais baixa de sua arquitetura, a AMD é puramente numea, e a Intel quase assim.

Atualmente, um núcleo deve enviar uma solicitação a outros núcleos sobre um link serial de alta velocidade (Hypertransport ou QPI), pedindo que enviem dados que eles obtiveram na memória anexada. A Intel e a AMD fizeram um bom trabalho ao fazer parecer de forma convincente o SMP no caso geral, mas não é perfeito. Os dados na memória anexados a um núcleo diferente levam mais tempo para se apossar. É incrivelmente complexo - os núcleos agora são nós de uma rede - mas é o que eles tiveram que fazer para obter um desempenho aprimorado.

Portanto, os agendadores levam isso em consideração ao escolher qual núcleo deve executar qual tópico. Eles tentarão colocar um encadeamento em um núcleo mais próximo da memória que mantém os dados aos quais o thread tem acesso.

O futuro, novamente

Se o ecossistema de software do mundo pudesse ser desmamado do SMP, os caras do hardware poderiam economizar muito espaço no silício, e teríamos sistemas mais rapidamente eficientes. Isso já foi feito antes; Os transputadores foram uma boa tentativa de uma arquitetura estritamente NUMA.

A NUMA e a comunicação de processos seqüenciais hoje facilitariam muito a gravação de software multi -roscado que escala com muita facilidade e executa com mais eficiência do que os gigantes de memória compartilhada de SMP de hoje.

O SMP era de fato uma maneira barata e desagradável de reunir vários núcleos, e o custo em termos de dificuldades de desenvolvimento de software e hardware ineficiente tem sido muito alto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top