Por que o processo c ++ é muito mais lento que em outra máquina com o mesmo hardware / software?

5

Eu tenho um programa em c ++ (compilado com o visual studio 2010 para windows x64) que faz alguma otimização matemática e não possui elementos interativos (o processo (único) acabou de ser iniciado via console e termina quando a otimização é feita). O tempo de execução depende da entrada dada e pode ser, por exemplo, ca. 4 minutos.

Quando executo esse processo em minha máquina (Dell Latitude E6420, Intel Core i7-2720QM 2,2 Ghz, 8 GB de RAM, Windows 7 (64 bits)), ele usa 13% de toda a CPU (isso deve estar correto, já que também pode usar um único núcleo). O problema é que ele é executado mais de 4 a 8 vezes mais lento do que em outro Dell Latitude E6420 (com exatamente as mesmas estatísticas e até mesmo o mesmo software instalado) enquanto usa os recursos de um núcleo. Por exemplo: o processo é executado 20 minutos na minha máquina, mas 4 minutos no outro.

Não há outros processos em execução, exceto os processos do sistema (o uso da CPU é de quase 0%, exceto para o processo c ++ em execução).

Erros numéricos ou outros problemas matemáticos estão fora de questão, verifica-se que o algoritmo faz exatamente o mesmo em ambas as máquinas, apenas mais lento (embora tenha exatamente o mesmo uso de processador (= 13%).

Eu quero evitar a reinstalação do Windows, então a pergunta é: poderia haver outros motivos, como hardware defeituoso, configurações erradas do BIOS etc.? Todos os drivers estão atualizados.

Alguma idéia do que pode causar essa diferença extrema no tempo de execução?

    
por Sebastian 12.06.2012 / 16:17

5 respostas

4

Você escreve que ambas as máquinas são Dell Latitude E6420. Como ambos têm o mesmo hardware, você deve poder trocar os discos rígidos. Dessa forma, você pode detectar os problemas no software sem reinstalar.

Outras coisas a verificar são as configurações da BIOS (mesmas configurações e mesma versão da BIOS).

Se nenhum dos dois produzir resultados, verifique os discos rígidos. O modelo e o visualizador de eventos nas janelas (erros de leitura serão registrados).

Por fim, monitore as CPUs com CPU-Z.

    
por 12.06.2012 / 17:25
3

Pode ser uma configuração de economia de energia que faz com que o regulador gire o processador mais baixo na máquina mais lenta.

    
por 12.06.2012 / 16:57
2

Você está executando o programa da mesma maneira em ambas as máquinas? Você diz que é mais lento em sua máquina - você está rodando a partir de dentro do DevStudio (por exemplo, Debug-> Start Without Debugging, ou o que quer que seja chamado)? Isso poderia atrasar o processo, pois ele é iniciado em um contexto ligeiramente diferente do que seria se fosse executado a partir da linha de comando / shell.

    
por 12.06.2012 / 17:15
0

Você disse que o programa está usando apenas um núcleo, mas isso não limita necessariamente a 1 / N do poder de processamento. Ele pode ser multi-threaded (especialmente porque é um programa moderno escrito no VS2010), então um sistema pode estar limitando-o artificialmente.

Se um programa parece estar atrofiado e usando menos CPU do que deveria (especialmente quando comparado ao mesmo programa rodando em outro sistema), verifique as afinidades da CPU:

  1. Executar o programa
    • Pressione Pausar na janela do console, se necessário (ou seja, se fechar muito rápido)
  2. Abra o Gerenciador de Tarefas
  3. Clique com o botão direito do mouse no processo do programa e selecione Definir afinidades
  4. Certifique-se de que todos os núcleos / CPUs / threads estejam selecionados (por exemplo, clique em )
  5. [OK]

O programa deve agora usar tanto do poder de processamento quanto é capaz de usar (isso depende da natureza do processo).

    
por 12.06.2012 / 21:49
0

O motivo pode ser que, na máquina mais lenta, a depuração avançada foi ativada (por exemplo, para uma depuração de corrupção de heap). Para ver os processos para os quais esta depuração está habilitada, abra o aplicativo "Global Flags" (Iniciar - > Todos os Programas - > Ferramentas de Depuração para Windows (x64)), vá para a aba "Arquivo de Imagem" e digite o nome do programa. ! use o botão "Tab" para atualizar) e certifique-se de que nenhum sinalizador esteja definido Global Flags . A outra opção é abrir linha de comando e digitar "gflags / p", ele mostrará a lista de todos os programas com depuração avançada (seu programa não deve estar lá). Mais sobre este link

    
por 08.05.2018 / 10:58

Tags