Como eu defino o grupo e a afinidade de um executável do Windows na linha de comando?

6

Eu tenho um executável foo.exe que eu preciso executar simultaneamente 6 vezes em uma configuração de multiprocessador onde as 3 primeiras instâncias serão atribuídas aos núcleos no Grupo 0 e as próximas 3 instâncias serão atribuídas aos núcleos no Grupo 1.

Eu tenho 6 atalhos para o programa foo.exe na minha área de trabalho. Cada atalho fornece ao programa foo.exe um conjunto diferente de parâmetros para executar.

Eu simplesmente clico nos atalhos para executar as 6 instâncias dos programas foo.exe . Todos eles iniciam, no entanto eu tenho que ir para o gerenciador de tarefas e ter certeza de que 3 são atribuídos a CPUs no grupo 0 e 3 são atribuídos ao grupo 1 da CPU, definindo sua afinidade de grupo.

Existe uma maneira de modificar os atalhos que tenho na minha área de trabalho para ter certeza de que 3 dos programas foo.exe usam o Grupo 0 e 3 deles usam o Grupo 1?

    
por Zareh 15.12.2016 / 16:08

1 resposta

6

Você pode usar o sinalizador /affinity usando o comando start para especificar os núcleos que um processo deve usar.

Uso

start /affinity n foo.exe -arguments

Então, o seu atalho ficaria assim:

c:\windows\system32\cmd.exe /C start /affinity n foo.exe -arguments em que n é Número do núcleo da CPU +1.

Então, para rodar no Core 0, seria:

c:\windows\system32\cmd.exe /C start /affinity 1 foo.exe -arguments .

Fonte

Especificando vários núcleos

Suponha que uma CPU tenha 4 núcleos. Para especificar os núcleos a serem usados:

  1. Visualize os núcleos como uma matriz com o comprimento da matriz igual ao número de núcleos. Os núcleos serão organizados em ordem decrescente da direita para a esquerda:

    [CPU3, CPU2, CPU1, CPU0]

  2. Agora, substitua os núcleos que você gostaria que seu processo usasse com 1 e os que você não usaria com 0. Supondo que eu queira que meu processo use core 3 & 1, minha matriz gostaria disso:

    [0,1,0,1]

  3. "Pop" os elementos da matriz para uma string. Agora seria representado como 0101 .

  4. Suponha que a string esteja em binário e a converta em hexadecimal. Agora seria 0x5

  5. Agora use o mesmo comando start /affinity n foo.exe -arguments , mas agora n será 0x5 , dando start /affinity 0x5 foo.exe -arguments

Fonte

Notas:
  • A fonte explica a visualização como uma string binária, não uma matriz (confira). Acho isso um pouco confuso, então expliquei usando uma matriz.
  • A origem não especifica que você deve prefixar 0x para mostrar que é hexadecimal no comando. A leitura de start /? especifica que deve ser hexadecimal.
por 15.12.2016 / 16:47