Estamos usando alguns sistemas com 2 cpu's com 6 núcleos / 12 encadeamentos cada, para um total de 24 encadeamentos, para muitas simulações multitarefa. Como o problema não escala perfeitamente, normalmente executo 4 problemas em parralel, de 5 threads cada. ter 4 núcleos para executar os 4 threads, que estão iniciando as simulações e pré e pósprocessamento. Eu notei algumas diferenças estranhas de desempenho para simulações idênticas.
Minha idéia era que usando afinidade eu poderia talvez regular o desempenho um pouco mais, guiando o processo para não ser dividido em 2 CPUs, para que o problema não se espalhe por partes diferentes do cache e da memória, mas permaneça fixo para uma única cpu ou conjunto de núcleos na cpu.
Eu sei como definir a afinidade no gerenciador de tarefas, uma vez que o processo está em execução, mas eu gosto de configurá-lo em um arquivo de lote.
por exemplo:
start / affinity HEXNUM myprog3.exe
onde HEXNUM é por exemplo: 1F000 (a representação hexadecimal de 011111000000000000
se o objetivo era executá-lo no núcleo: 0,1,2,3,4 de cpu2
ou HEXNUM 1F a representação hexadecimal de 011111 se o objetivo for executá-lo no núcleo 0,1,2,3,4 de cpu1.
Mas como isso parece não funcionar, como eu espero: Quando inicio uma simulação em 5 threads sem especificação de afinidade, o processo leva 20-21% da cpu. quando eu começo 5 degraus, com afinidade para 6 núcleos funciona também, mas quando eu começo 5 degraus com afinidade para 5 núcleos. leva apenas 13% e se eu olhar no gerenciador de tarefas, (windows 7 64 pro) parece que ele está usando apenas o núcleo 1,3,5.
existe algum problema ao usar um número desigual de núcleos para a especificação de afinidade? ou estou fazendo algo errado?
Existem pessoas com experiência na especificação de afinidades que conseguiram ganhos de desempenho? Quais estratégias você usou?
Tags cpu multi-core threads affinity