Bagaimana cara memperlambat komputer Anda (untuk tujuan pengujian)? [Tutup]

20

Karena kebanyakan orang setuju, mendorong pengembang untuk membuat kode cepat dengan memberi mereka mesin lambat bukanlah ide yang baik . Tapi ada satu poin dalam pertanyaan itu. Mesin dev saya cepat, jadi saya kadang-kadang menulis kode yang sangat tidak efisien, tetapi itu baru terlihat ketika dijalankan di komputer orang lain.

Apa beberapa cara yang baik untuk memperlambat sementara mesin dev turbocharged? Gagasan "kecepatan" mencakup beberapa faktor, misalnya:

  • Frekuensi jam CPU.
  • Jumlah inti CPU.
  • Jumlah memori dan cache prosesor.
  • Kecepatan berbagai bus.
  • Disk I / O.
  • GPU.
  • dll.
Joonas Pulakka
sumber
34
Unpress the "Turbo button" ... tidak, tunggu.
LennyProgrammers
6
Ini adalah akar masalah Anda: "Sangat tidak efisien". ubah kebiasaan koding Anda
Darknight
16
@Darknight: Tidak, bukan itu. Anda harus memperbaikinya terlebih dahulu, kemudian membuatnya cepat jika diperlukan . Untuk mengetahui apa yang harus dioptimalkan, Anda harus menguji dan mencari tahu apa bagian yang bermasalah. Membuat hal-hal secepat mungkin di tempat pertama adalah buang-buang waktu Anda - dan kemungkinan buang-buang melakukannya dengan benar .
Joonas Pulakka
1
Yah saya sebagian setuju. Namun jika Anda memiliki kebiasaan pengkodean yang efisien untuk memulainya; maka sebagai "membuatnya berfungsi dengan benar" Anda dapat menghabiskan lebih sedikit waktu kemudian "membuatnya lebih cepat".
Darknight
4
@Darknight: Saya pikir @Joonas mengajukan pertanyaan yang sangat masuk akal. Gagasan bahwa hanya "mengubah kebiasaan pengkodean Anda" sudah cukup tidak realistis. Berikut ini sebuah contoh: ( stackoverflow.com/questions/926266/… ) DAN, gagasan bahwa Anda dapat mengatur waktunya pada mesin yang lebih lambat tanpa IDE mengasumsikan itu cukup untuk menemukan bug kinerja. Banyak orang berbicara tentang profil, tetapi melakukannya (berhasil) adalah masalah lain. Apa yang benar-benar akan membantu saya (& orang lain yang saya pikir) adalah apa yang diminta Joonas.
Mike Dunlavey

Jawaban:

39

Jalankan tes Anda di mesin virtual dengan memori terbatas dan hanya satu inti.

Mesin-mesin tua yang masih ada sekarang kebanyakan adalah benda-benda dari era Pentium 4. Itu tidak realistis - saya menggunakan sendiri sekarang. Kinerja single core pada banyak PC saat ini biasanya tidak jauh lebih baik, dan bisa lebih buruk. Kinerja RAM lebih penting daripada kinerja CPU untuk banyak hal, dan dengan membatasi sedikit lebih keras daripada untuk P4 1GB yang lama, Anda mengompensasinya sedikit.

Gagal itu, jika Anda mau menghabiskan sedikit, beli netbook. Jalankan tes itu.

Steve314
sumber
1
Atau laptop yang lebih tua.
Masalah dengan mesin virtual adalah tidak satupun dari mereka (AFAIK) mendukung port IEEE 1394 (firewire). Beberapa perangkat lunak saya menggunakan kamera yang terhubung dengan firewire, jadi ...
Joonas Pulakka
yang asli memungkinkan Anda menetapkan perangkat PCI ke VM
Javier
3
Bisa jadi pekerjaan untuk Xen - mesin virtual tidak memiliki host O / S, tetapi merupakan lapisan teratas itu sendiri. Memiliki riwayat Unix yang berat, tetapi sekarang dapat mendukung OS berpemilik. Tapi saya tidak pernah menggunakannya, dan tidak tahu berapa banyak kontrol yang dapat Anda miliki atas kinerja dan sumber daya VM tertentu.
Steve314
1
+1 A VM sangat dapat disetel dan menyediakan lingkungan yang Anda inginkan untuk pengujian. Saya menggunakan VMWare sendiri untuk tujuan ini.
Gary Rowe
11

Cara untuk menemukan inefisiensi algoritma yang signifikan adalah dengan profil kode Anda. Cara untuk menangkap memori yang digunakan secara berlebihan adalah pertama-tama memahami berapa banyak memori yang digunakan target Anda, dan kemudian mendesainnya, dan secara teratur menguji di lingkungan itu.

Jika Anda menulis kode ulir, pengujian pada beberapa mesin dengan kecepatan CPU yang berbeda akan membantu menyoroti bug terkait waktu tertentu dalam penanganan utas Anda, tetapi pengujian unit yang agresif terhadap logika utas adalah suatu keharusan.

Michael Shaw
sumber
1
Tidak, membuat profil tidak akan menangkap inefisiensi algoritmik. Ini akan menunjukkan kepada Anda di mana program menghabiskan waktu jika Anda perlu mempercepatnya, tetapi tidak jika Anda perlu mempercepatnya.
David Thornley
Saya pikir saya kehilangan perbedaan di sini. Jika Anda bermaksud bahwa profil tidak akan memberi tahu Anda JIKA Anda kurang optimal, di mana Anda menghabiskan siklus CPU Anda, maka saya setuju. Itu membutuhkan pengalaman untuk membuat penilaian itu.
Michael Shaw
4
@ David Thornley & @ Patolemy: Saya pikir inefisiensi algoritma atau kode hot spot adalah masalah sekunder dari inti: "Apakah terlalu lambat atau tidak?" Ini subyektif, tetapi juga pertanyaan yang paling penting. Jika tidak terasa lambat dalam praktik, lalu bagaimana jika algoritme Anda tidak efisien? Itu melakukan apa yang perlu dilakukan! Atau jika program terasa terlalu lambat terlepas dari algoritma yang sangat optimal, maka Anda mungkin harus mengubah pendekatan (arsitektur? Bahasa pemrograman? Sesuatu!) Sekaligus. Memiliki algoritma yang sangat optimal bukanlah alasan untuk kelambatan program :-)
Joonas Pulakka
1
Untuk mengungkap inefisiensi algoritma, gunakan set data berukuran progresif untuk pengujian.
rwong
10

Apa pun yang Anda lakukan untuk memperlambat mesin Anda mungkin akan menjadi peretasan.

Berikut ini beberapa saran:

  • Gunakan mesin virtual
  • Profil kode pada mesin Anda, mencari kemacetan
  • Gunakan mesin lama untuk "pengujian kinerja"
Jason
sumber
@ tikar apa artinya itu?
johnny
1
@ Johnny: Maksud saya, saya memberikan suara karena Jason telah menyarankan membuat profil aplikasi, yang diharapkan akan menemukan sumber kinerja botol tanpa harus pindah ke sistem yang lebih lambat.
Matt Ellen
4

Sadarilah ini pertanyaan yang cukup lama, tetapi bagi siapa pun dalam situasi ini; Anda bisa mencoba CPUKiller. Ini pada dasarnya adalah aplikasi kecil yang dapat Anda konfigurasi untuk menggunakan% prosesor Anda yang berbeda. http://www.cpukiller.com/

Dave
sumber