However htop and system-monitor only show each of the 8 cores as loaded to ~50%.
Ok, isso significa simplesmente que você não está executando simulações suficientes ao mesmo tempo. Existem muitos elementos que podem resultar em uma simulação que não usa um núcleo de 100%. Ou você conserta isso ou simplesmente adiciona mais simulações.
but shouldn't I get a bit more than that?
Você deve conseguir 100% em cada núcleo.
Agora, se você ler metade do conhecimento de Khaledds ... aqui está a verdade:
- O Hyper-Threading significa que ambos os núcleos não têm tudo, isso é verdade, então ambos os núcleos podem, por exemplo, não realizar certas operações ao mesmo tempo.
- Infelizmente para ele, porém, isso não é visível para o sistema operacional. Fatores de "carga" da CPU "baseiam-se em" que% do tempo foi o principal ocupado por agendador de SO ". Portanto, se uma CPU tiver uma tarefa ativa de 400ms de segundo, ela estará 40% ocupada.
Falta de recursos do Hyper-Threading (ou seja, um núcleo virtual tem que esperar por um recurso) Significará simples que o núcleo virtual demora mais para executar uma operação - mas isso não é visível para o planejador do sistema operacional.Se o núcleo gastar 100ms esperando internamente , a tarefa levará 500 ms em vez de 400 ms. É bastante complexo tentar descobrir quando você se depara com a fome de recursos, e isso não é algo que o SO possa fazer (ou seja, é algo em que você executa um código especial e compara os tempos de execução para ver que demora mais do que deveria) = Hyper-threading "ruim" Se a CPU afinasse as estatísticas de uso interno, você poderia se despedir de qualquer performance para começar - isso é muito mais dados.
O resultado é que o segundo núcleo simplesmente não adicionará 100% de desempenho - portanto, se algo levar 100ms em um núcleo, com hyper-threading e 2 núcleos, ele pode levar 75, não 50. Depende muito do código. / p>
No seu caso, eu começaria com um único segmento e descobriria se você pode obter um núcleo para 100%. Se não, então a simulação simplesmente está esperando por algo - o que é um problema de stackoverflow (programa em todos os casos) (o programa deve ser alterado). Se é como é (IO, escrever / ler do disco), então pode ser uma necessidade simples executar mais de 1 simulação por núcleo.