Definindo afinidade no servidor Windows 2003

2

Eu tenho um programa que, por padrão, é executado apenas em uma CPU. Eu tentei usar o comando start /affinity x notepad.exe batch, mas não consigo executá-lo. ele altera o título da janela da linha de comando, mas não executa o programa. este comando start funciona para o bloco de notas, por isso pode ser apenas um problema com o software. Eu defini a afinidade manualmente por meio do gerenciador de tarefas, então sei que funciona.

Eu não sou o programador deste software tão mutável que não é uma opção.

Atualização: consegui executar o programa agora. Eu adicionei o comando exit ao final do meu script em lote. Agora eu preciso saber como funciona o sinalizador / affinity. Eu não consigo fazer isso para usar 4 cpu '.

Atualização 2: finalmente descobri que o sinalizador / affinity espera um número hexadecimal. Agora posso definir a afinidade corretamente para o bloco de notas, mas ainda não posso configurá-la para o software que estou usando. Será que o software simplesmente não suporta multi-threading?

    
por Samuel 27.04.2010 / 15:47

3 respostas

1

Meu primeiro problema foi que o arquivo em lote não executava meu programa. Isso acabou sendo um problema com espaços no caminho. Eu não conseguia descobrir como escapar deles, então eu usei apenas nomes curtos. (por exemplo, c: / progra ~ 1 / em vez de c: / arquivos de programas /)

segundo problema foi definir a afinidade. Acontece que o sinalizador de afinidade no comando iniciar leva números hexadecimais. o software ainda não funcionou, mas isso tem a ver com o software. Está sendo corrigido pelo desenvolvedor agora. (yay!)

No que diz respeito ao software não ser multiencadeado, acho que o Windows faz algum balanceamento de carga, porque se você configurá-lo manualmente para usar todos os processadores, o software usa todos eles e vai mais rápido.

    
por 30.04.2010 / 20:41
1

É bit a bit então converta binário em decimal. Por exemplo. 0001 = 1 = cpu1, 1000 = 8 = cpu4, 1111 = 15 = todos os quatro cpus

    
por 27.04.2010 / 16:17
1

Se "alterar o título da janela da linha de comando, mas não executar o programa", isso parece um problema de linha de comando. Você pode postar a linha de comando real? Inclui espaços, cotações ou parâmetros adicionais?

Editar:

É bom saber que você conseguiu. Como outros disseram, o parâmetro "afinidade" é um bitmask; então, você precisa usar "1" para "CPU 1", "2" para "CPU 2", "4" para "CPU 3", "8" para "CPU 4" e assim por diante; você pode definir a afinidade para múltiplas CPUs adicionando esses números, então, se você quiser que seu processo use as CPUs 3 e 4 (mas não 1 e 2) você usaria "12". "15" é o que você deve usar para dizer "todos os primeiros 4 CPUs".

Editar 2:

Naturalmente, se o seu programa não é multithreaded, não se beneficiará de ter mais CPUs disponíveis. Para descartar isso, defina sua afinidade usando o Gerenciador de Tarefas e veja como ele se comporta; se você tiver quatro CPUs, mas o programa usar apenas 25% do tempo total de CPU do sistema, ele será um único thread; se chegar a 50%, ele executa no máximo dois threads. Se conseguir ir até 100%, poderá tirar o máximo proveito do seu servidor (mas tenha cuidado para não abrandar todo o resto).

    
por 27.04.2010 / 15:54