Como diminuir a velocidade do seu computador (para fins de teste)? [fechadas]

20

Como a maioria das pessoas concorda, incentivar os desenvolvedores a criar código rápido, dando a eles máquinas lentas, não é uma boa idéia . Mas há um ponto nessa pergunta. Minha máquina de desenvolvimento é rápida e, por vezes, escrevo código que é perturbadoramente ineficiente, mas isso só se torna aparente quando executado nas máquinas de outras pessoas.

Quais são algumas boas maneiras de desacelerar temporariamente uma máquina de desenvolvimento com turbocompressor? A noção de "velocidade" inclui vários fatores, por exemplo:

  • Frequência do clock da CPU.
  • Quantidade de núcleos da CPU.
  • Quantidade de memória e cache do processador.
  • Velocidade de vários ônibus.
  • E / S de disco.
  • GPU.
  • etc.
Joonas Pulakka
fonte
34
Pressione o "botão Turbo" ... não, espere.
LennyProgrammers
6
Aqui está a raiz do seu problema: "Perturbadoramente ineficiente". mudar seu hábito de codificação
Darknight
16
@ Darknight: Não, não é isso. Você deve primeiro fazer a correção e, se necessário , torná-la rápida . Para saber o que otimizar, você precisa testar e descobrir qual é a parte problemática. Fazendo as coisas o mais rápido possível, em primeiro lugar é desperdício de seu tempo - e resíduos susceptíveis de fazê-lo direito .
Joonas Pulakka
1
Bem, eu concordo parcialmente. No entanto, se você tem um hábito de codificação eficiente para começar; então, como "fazendo o trabalho direito", você poderá gastar menos tempo depois "tornando o processo mais rápido".
Darknight
4
@Darknight: Eu acho que @Joonas está fazendo uma pergunta muito sensata. A idéia de que apenas "mudar seu hábito de codificar" é suficiente não é realista. Aqui está um exemplo: ( stackoverflow.com/questions/926266/… ) E, a idéia de que você pode cronometrar em uma máquina mais lenta sem um IDE pressupõe que seja suficiente para encontrar erros de desempenho. Muitas pessoas falam sobre criação de perfil, mas fazê- lo (com sucesso) é outra questão. O que realmente me ajudaria (e outros que eu acho) é o que Joonas está pedindo.
Mike Dunlavey

Respostas:

39

Execute seus testes em uma máquina virtual com memória limitada e apenas um núcleo.

As máquinas antigas que as pessoas ainda podem ter agora são principalmente coisas da era Pentium 4. Isso não é tão irrealista - estou usando um agora mesmo. O desempenho de núcleo único em muitos PCs atuais normalmente não é muito melhor e pode ser pior. De qualquer maneira, o desempenho da RAM é mais importante que o desempenho da CPU e, ao limitar um pouco mais do que em um P4 de 1 GB antigo, você compensa um pouco.

Caso contrário, se você estiver disposto a gastar um pouco, compre um netbook. Execute os testes nisso.

Steve314
fonte
1
Ou um laptop antigo.
O problema com as máquinas virtuais é que nenhum deles (AFAIK) suporta a porta IEEE 1394 (firewire). Alguns dos meus software usa câmeras que estão conectados com firewire, então ...
Joonas Pulakka
os reais permitem atribuir qualquer dispositivo PCI à VM
Javier
3
Pode ser um trabalho para o Xen - a máquina virtual não possui um sistema operacional de host, mas é a camada superior em si. Possui um histórico fortemente Unix, mas agora pode oferecer suporte a sistemas operacionais proprietários. Mas nunca o usei e não sei quanto controle você pode ter sobre o desempenho e os recursos de uma VM específica.
precisa saber é o seguinte
1
+1 Uma VM é altamente ajustável e fornece exatamente o ambiente que você precisa para testar. Eu mesmo uso o VMWare para esse fim.
Gary Rowe
11

A maneira de detectar ineficiência significativa de algoritmo é criar um perfil do seu código. A maneira de capturar o uso excessivo de memória é primeiro entender quanta memória o seu destino usa e, em seguida, projetar de acordo, e testar regularmente nesse ambiente.

Se você estiver escrevendo código encadeado, o teste em várias máquinas com velocidades diferentes da CPU ajudará a destacar erros específicos relacionados ao tempo no manuseio do encadeamento, mas o teste de unidade agressivo da lógica do encadeamento é obrigatório.

Michael Shaw
fonte
1
Não, a criação de perfil não detectará ineficiência algorítmica. Ele mostrará onde o programa está gastando seu tempo, se você precisar acelerá-lo, mas não se precisar acelerá-lo.
David Thornley
Acho que estou perdendo a distinção aqui. Se você quer dizer que a criação de perfil não lhe dirá SE você está sendo ideal, exatamente onde você está gastando seus ciclos de CPU, então eu concordo. É preciso experiência para fazer esse julgamento.
Michael Shaw
4
@ David Thornley e @Ptolemy: Eu acho que a ineficiência do algoritmo ou pontos de acesso de código são secundários ao problema principal: "É muito lento ou não?" É subjetivo, mas também é a questão mais importante. Se não parecer lento na prática, e daí se o seu algoritmo for ineficiente? Ele faz o que precisa fazer! Ou, se o programa parecer lento demais, independentemente dos algoritmos altamente ideais, talvez você precise alterar a abordagem (arquitetura? Linguagem de programação? Alguma coisa!). Tendo algoritmos altamente ideais não são uma desculpa para a lentidão programa :-)
Joonas Pulakka
1
Para revelar a ineficiência do algoritmo, use conjuntos de dados de tamanho progressivo para teste.
Rwong
10

Qualquer coisa que você faça para desacelerar sua máquina provavelmente seria um hack.

Aqui estão algumas sugestões:

  • Use máquinas virtuais
  • Faça o perfil do código em sua máquina, procurando gargalos
  • Use uma máquina antiga para "teste de desempenho"
Jason
fonte
@matt, o que isso significa?
quer
1
@johnny: Quero dizer, estou votando porque Jason sugeriu criar um perfil do aplicativo, que, esperançosamente, encontraria a fonte de gargalos de desempenho sem a necessidade de mudar para um sistema mais lento.
Matt Ellen
4

Perceba que essa é uma pergunta bastante antiga, mas para qualquer outra pessoa nessa situação; você pode tentar o CPUKiller. Basicamente, é um aplicativo pequeno que você pode configurar para consumir%% diferentes do seu processador. http://www.cpukiller.com/

Dave
fonte