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 RAM

Eu 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.

questionAnswers(5)

yourAnswerToTheQuestion