Por que um código c ++ é executado significativamente mais em um computador do que em outro? [fechadas]

0

O código é exatamente o mesmo - copiei de um computador para outro. O código é compilado com g ++ - 4 (4.9.1) obtido do fink no OSX em ambas as máquinas, e não é executado em paralelo.

As opções do compilador são "-O2" e os computadores basicamente não fazem mais nada (baixo uso de CPU e memória). Código é um código de pesquisa de 2400 linhas ligação .

Máquina 1:

  • MacBook Pro Retina do final de 2013,
  • 2,8 GHz i7-4558U,
  • 16 GB 1600 MHz DDR3,
  • Armazenamento Flash de 500 GB

Máquina 2:

  • Macinter Workstation do final de 2013,
  • 3.5GHz de 6 núcleos Intel Xeon E5-1650,
  • 32 GB 1867 MHz DDR3
  • 251 GB de armazenamento Flash,
  • Unidade SATA externa de 3 TB

Tempo de execução:
Máquina 1: com saída de 200 seg., Sem 18 seg.
Máquina 2: (/ diretório - deve ser flash drive): com 2230 seg., Sem 2075 seg.
Máquina 2: (~ diretório - deve ser drive externo): com 2262 seg., Sem 2080 seg.

Alguma idéia de como melhorar o tempo de execução no Mac Pro?

Stershic
fonte
@Ramhound Foi-me dito que seria mais relevante aqui do que o StackOverflow.
Stershic
2
Esta questão parece extremamente ampla. O que você precisa fazer para entender as diferenças é o seguinte. Determine qual parte do código demora mais. Você pode então modificar esse código para que seja rápido em ambas as máquinas. Se você ficar preso fazendo isso, você pode fazer a pergunta no site correto.
Ramhound
@Ramhound Foi sugerido que eu usasse o Instruments para criar o perfil do meu código, e consegui fazer isso, mas não está claro para mim se / como isso mostra qual parte do código demora mais tempo. Não estou perguntando porque sou especialista - estou perguntando porque não sou e quero aprender.
Stershic
1
Eu não posso nem pesquisar as diferenças entre o i7 e o E5, já que não tenho números de modelo específicos. Meu palpite seu único código encadeado. Como a velocidade de rajada do i7 é de cerca de 3,0 Ghz, isso significa que é improvável que a freqüência da CPU que causa o aumento de 115% gere uma saída.
Ramhound
Você foi capaz de fazer isso. Mas você não fornece essa informação. Você sabe quanto tempo o código demora. Qual função exatamente está causando o atraso? Claro que essa pergunta é uma questão Stackoverflow. Eu estou basicamente tentando te dizer que você está fazendo a pergunta errada. Eu devo adicionar o seguinte. Você não foi informado de que essa era uma pergunta de superusuário. A razão próxima indicou que poderia estar no tópico aqui, não é, você recebeu um conselho melhor nos comentários.
Ramhound

Respostas:

0

A maneira correta de abordar a questão "por que esse código demora tanto para ser executada", seja "longo" seja em termos absolutos ou relativos, é usar uma ferramenta chamada perfil.

Basicamente, você executa o programa através do profiler ou com o profiler anexado, e o profiler registra quanto tempo o programa gasta em várias funções. Esta informação é então apresentada a você de uma forma que lhe permite identificar as partes do programa que demoraram mais para serem executadas durante essa execução. Muitas vezes também será possível obter informações adicionais a partir desse relatório, como quais partes do programa são chamadas o maior número de vezes, e coisas assim, que também podem apontar para áreas que poderiam usar algum escrutínio.

Com base nesses dados, geralmente é fácil dizer quais partes precisam ser otimizadas, de modo que o programa seja executado mais rapidamente, sem empregar o jogo de adivinhação conhecido como "otimização prematura" ou confiar nos detalhes de alguma peça específica de hardware.

a CVn
fonte
1

Este é um palpite especulativo, mas seu código funciona com o disco e o disco de E / S, e vou assumir que esse é o seu gargalo - você mencionou que ele roda mais rápido na máquina com armazenamento flash de 500 GB do que com 250 GB flash storage - isso faz sentido, logicamente, devido à forma como o armazenamento flash é essencialmente um RAID 0 de chips de armazenamento flash menores (32 / 64GB) e mais chips / discos em uma array RAID-0 aumentará muito o desempenho. Não conheço a marca / modelo / firmware / controlador específico do armazenamento, mas suspeito que, se você fizesse um teste de E / S de disco, encontraria uma discrepância semelhante no desempenho das duas máquinas. Tal teste de desempenho pode melhor ser feito usando XBench .

user2813274
fonte
@Ramhound: por que você reverteria minha referência ao XBench? Como esta resposta sugere, a diferença de desempenho é provavelmente causada pela velocidade do disco rígido. Sugere-se para medir essa velocidade e eu adicionei um link para uma ferramenta para testar isso. Por que deletar isso?
agtoever
@agtoever - É complicado. Minha culpa
Ramhound