Escalabilidade ruim do código paralelo
Recentemente tenho analisado como meus cálculos paralelos realmente aceleram em processadores de 16 núcleos. E a fórmula geral que concluí - quanto mais tópicos você tem, menos velocidade por núcleo - fica embaraçosa para mim. Aqui estão os diagramas da minha carga de CPU e velocidade de processamento:
Assim, você pode ver que a carga do processador aumenta, mas a velocidade aumenta muito mais lentamente. Eu quero saber por que tal efeito ocorre e como obter o motivo do comportamento não escalável. Eu tenho certeza de usarModo de GC do servidor. Eu me certifiquei de que estou paralelizando código apropriado assim que o código não faz nada mais do que
Carrega dados da RAM (o servidor tem 96 GB de RAM, o arquivo de troca não deve ser atingido)Executa cálculos não complexosArmazena dados na RAMEu tenhoperfilado meu aplicativo cuidadosamente e não encontrei gargalos - parece que cada operação se torna mais lenta conforme o número do encadeamento cresce.
Estou preso, o que há de errado com o meu cenário?
Eu uso o .Net 4 Task Parallel Library.