Come rallentare il computer (a scopo di test)? [chiuso]


20

Come molti concordano, incoraggiare gli sviluppatori a creare codice veloce dando loro macchine lente non è una buona idea . Ma c'è un punto in quella domanda. La mia macchina di sviluppo è veloce e quindi ogni tanto scrivo codice che è inquietantemente inefficiente, ma che diventa evidente solo quando lo si esegue su macchine di altre persone.

Quali sono alcuni buoni modi per rallentare temporaneamente una macchina di sviluppo turbo? La nozione di "velocità" comprende diversi fattori, ad esempio:

  • Frequenza di clock della CPU.
  • Quantità di core della CPU.
  • Quantità di memoria e cache del processore.
  • Velocità di vari autobus.
  • I / O del disco.
  • GPU.
  • eccetera.

34
Rimuovi il pulsante "Turbo" ... no, aspetta.
LennyProgrammers

6
Ecco la radice del tuo problema: "Inquietantemente inefficiente". cambia la tua abitudine di codifica
Darknight,

16
@Darknight: No, non è quello. Devi prima farlo bene, quindi farlo velocemente se necessario . Per sapere cosa ottimizzare, devi testare e scoprire qual è la parte problematica. Fare le cose il più velocemente possibile, in primo luogo è spreco di vostro tempo - e probabilmente spreco di fare bene .
Joonas Pulakka,

1
Beh, in parte sono d'accordo. Tuttavia, se hai un'abitudine di codifica efficiente con cui iniziare; poi come "farla funzionare bene" puoi dedicare meno tempo dopo "renderla più veloce".
Darknight,

4
@Darknight: Penso che @Joonas stia facendo una domanda molto sensata. L'idea che sia sufficiente "cambiare l'abitudine al codice" non è realistica. Ecco un esempio: ( stackoverflow.com/questions/926266/… ) E, l'idea che si possa semplicemente cronometrare su una macchina più lenta senza un IDE presuppone che sia sufficiente per trovare i bug delle prestazioni. Molte persone parlano della profilazione, ma farlo (con successo) è un'altra questione. Ciò che mi aiuterebbe davvero (e altri penso) è quello che Joonas sta chiedendo.
Mike Dunlavey,

Risposte:


39

Esegui i test in una macchina virtuale con memoria limitata e un solo core.

Le vecchie macchine che le persone potrebbero ancora avere ora sono per lo più cose dell'era Pentium 4. Non è così irrealistico - ne sto usando uno io stesso ora. Le prestazioni single core su molti PC attuali normalmente non sono molto migliori e possono essere peggiori. Le prestazioni della RAM sono più importanti delle prestazioni della CPU per molte cose comunque, e limitando un po 'più duramente rispetto a un vecchio P4 da 1 GB, lo compensi un po'.

In caso contrario, se sei disposto a spendere un po ', acquista un netbook. Esegui i test su questo.


1
O un laptop anziano.

Il problema con le macchine virtuali è che nessuna di esse (AFAIK) supporta la porta IEEE 1394 (firewire). Alcuni dei miei software usano telecamere collegate con firewire, quindi ...
Joonas Pulakka,

quelli reali ti consentono di assegnare qualsiasi dispositivo PCI alla VM
Javier

3
Potrebbe essere un lavoro per Xen: la macchina virtuale non ha un O / S host, ma è il livello superiore in sé. Ha una lunga storia Unix, ma ora può supportare sistemi operativi proprietari. Ma non l'ho mai usato e non so quanto controllo puoi avere su prestazioni e risorse di una VM specifica.
Steve314,

1
+1 Una VM è altamente ottimizzabile e fornisce esattamente l'ambiente che stai cercando per i test. Uso VMWare per questo scopo.
Gary Rowe,

11

Il modo per individuare una significativa inefficienza dell'algoritmo consiste nel profilare il codice. Il modo per catturare un uso eccessivo della memoria è innanzitutto capire quanta memoria ha la tua destinazione, quindi progettare di conseguenza e testare regolarmente in quell'ambiente.

Se stai scrivendo codice thread, test su più macchine con diverse velocità della CPU ti aiuteranno a evidenziare specifici bug relativi alla temporizzazione nella gestione dei thread, ma è necessario un test di unità aggressivo della logica dei thread.


1
No, la profilazione non rileva l'inefficienza algoritmica. Ti mostrerà dove il programma sta trascorrendo il suo tempo se devi accelerarlo, ma non se devi accelerarlo.
David Thornley,

Penso che mi manchi la distinzione qui. Se intendi che la profilazione non ti dirà SE stai subottimamente, proprio dove stai spendendo i tuoi cicli della CPU, allora sono d'accordo. Ci vuole esperienza per dare quel giudizio.
Michael Shaw,

4
@ David Thornley e @ Tolomeo: penso che l'inefficienza dell'algoritmo o gli hot spot del codice siano secondari al problema principale: "È troppo lento o no?" È soggettivo, ma è anche la domanda più importante. Se in pratica non sembra lento, allora cosa succede se il tuo algoritmo è inefficiente? Fa quello che deve fare! O se il programma sembra troppo lento, indipendentemente da algoritmi altamente ottimali, allora potresti dover cambiare del tutto l'approccio (architettura? Linguaggio di programmazione? Qualcosa!). Avere algoritmi altamente ottimali non è una scusa per la lentezza del programma :-)
Joonas Pulakka,

1
Per rivelare l'inefficienza dell'algoritmo, utilizzare set di dati di dimensioni progressive per i test.
rwong,

10

Qualsiasi cosa tu faccia per rallentare la tua macchina sarebbe probabilmente un trucco.

Ecco un paio di suggerimenti:

  • Usa macchine virtuali
  • Profila il codice sulla tua macchina, cercando colli di bottiglia
  • Utilizzare una vecchia macchina per "test delle prestazioni"

@matt cosa significa?
johnny,

1
@johnny: Voglio dire, sto votando perché Jason ha suggerito di profilare l'applicazione, che si spera possa trovare la fonte di colli di bottiglia senza la necessità di passare a un sistema più lento.
Matt Ellen,


4

Renditi conto che questa è una domanda piuttosto vecchia, ma per chiunque altro in questa situazione; potresti provare CPUKiller. Fondamentalmente è una piccola app che puoi configurare per consumare diverse% di processore. http://www.cpukiller.com/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.