Bilgisayarınızı yavaşlatma (sınama amacıyla)? [kapalı]


20

Çoğu insanın kabul ettiği gibi, geliştiricileri yavaş makineler vererek hızlı kod yapmaya teşvik etmek iyi bir fikir değildir . Ama bu soruda bir nokta var. Geliştirme makinem hızlı ve bu yüzden bazen rahatsız edici derecede verimsiz kod yazıyorum, ancak bu sadece diğer insanların makinelerinde çalıştırıldığında belirginleşiyor.

Turbo şarjlı bir dev makineyi geçici olarak yavaşlatmanın iyi yolları nelerdir? "Hız" kavramı çeşitli faktörleri içerir, örneğin:

  • CPU saat frekansı.
  • CPU çekirdeği miktarı.
  • Bellek ve işlemci önbelleği miktarı.
  • Çeşitli otobüslerin hızı.
  • Disk G / Ç.
  • GPU.
  • vb.

34
"Turbo düğmesi" ne basın ... hayır, bekleyin.
LennyProgrammers

6
İşte sorunun kaynağı: "Rahatsız edici derecede verimsiz". kodlama alışkanlığınızı değiştirin
Darknight

16
@Darknight: Hayır, o değil. Önce doğru, sonra gerekirse hızlı yapmalısınız . Neyi optimize edeceğinizi bilmek için, sorunlu kısmın ne olduğunu test etmeniz ve bulmanız gerekir. İlk etapta hızlı mümkün olduğunca şeyler yapma kaybıdır sizin ve olası atık - zaman doğru yapıyor .
Joonas Pulakka

1
Kısmen katılıyorum. Bununla birlikte, etkili bir kodlama alışkanlığınız varsa; "doğru çalışmasını" sağladıkça daha sonra "daha hızlı hale getirme" için daha az zaman harcayabilirsiniz.
Darknight

4
@Darknight: Sanırım @Joonas çok mantıklı bir soru soruyor. Sadece "kodlama alışkanlığınızı değiştirmenin" yeterli olduğu fikri gerçekçi değildir. İşte bir örnek: ( stackoverflow.com/questions/926266/… ) VE, IDE'siz daha yavaş bir makinede zamanlayabileceğiniz fikri, performans hataları bulmak için yeterli olduğunu varsayar. Birçok insan profil oluşturma hakkında konuşur , ancak bunu (başarılı bir şekilde) yapmak başka bir konudur. Bana gerçekten yardımcı olacak (ve düşündüğüm diğerleri) Joonas'ın istediği şey.
Mike Dunlavey

Yanıtlar:


39

Testlerinizi sınırlı belleğe ve yalnızca bir çekirdeğe sahip sanal bir makinede gerçekleştirin.

İnsanların hala sahip olabileceği eski makineler çoğunlukla Pentium 4 dönemi şeyleridir. Bu gerçekçi değil - şu anda kendim kullanıyorum. Mevcut birçok bilgisayarda tek çekirdekli performans normalde o kadar iyi değildir ve daha kötü olabilir. RAM performansı zaten birçok şey için CPU performansından daha önemlidir ve eski bir 1GB P4'ten biraz daha sert bir şekilde sınırlandırarak, bunu biraz telafi edersiniz.

Başarısız olursa, biraz harcama yapmak istiyorsanız, bir netbook satın alın. Bunun üzerinde testler yapın.


1
Ya da yaşlı bir dizüstü bilgisayar.

Sanal makinelerde sorun, bunların hiçbirinin (AFAIK) IEEE 1394 (firewire) bağlantı noktasını desteklememesidir. Bazı yazılımlarım firewire ile bağlı kameralar kullanıyor, bu yüzden ...
Joonas Pulakka

gerçek olanlar VM'ye herhangi bir PCI cihazı atamanıza izin verir
Javier

3
Xen için bir iş olabilir - sanal makinenin bir ana bilgisayar O / S'si yoktur, ancak kendi içinde en üst katmandır. Ağır bir Unix geçmişine sahiptir, ancak artık özel işletim sistemlerini destekleyebilir. Ama hiç kullanmadım ve belirli bir VM'nin performansı ve kaynakları üzerinde ne kadar kontrole sahip olabileceğinizi bilmiyorum.
Steve314

1
+1 Bir VM son derece ayarlanabilir ve test için tam olarak peşinde olduğunuz ortamı sağlar. VMWare'i bu amaçla kendim kullanıyorum.
Gary Rowe

11

Önemli algoritma verimsizliğini tespit etmenin yolu, kodladığınız profili profillemektir. Bellek aşırı kullanımını yakalamanın yolu önce hedefinizin ne kadar bellek kullandığını anlamak, ardından buna göre tasarım yapmak ve o ortamda düzenli olarak test etmektir.

Dişli kod yazıyorsanız, farklı CPU hızlarına sahip birden fazla makinede test yapılması, iplik kullanımınızdaki belirli zamanlama ile ilgili hataları vurgulamanıza yardımcı olacaktır, ancak iplik mantığının agresif birim testi şarttır.


1
Hayır, profil oluşturma algoritmik verimsizliği yakalamaz. Hızlandırmanız gerekiyorsa, programın zamanını nerede harcadığını gösterecektir, ancak hızlandırmanız gerekmiyorsa.
David Thornley

Sanırım buradaki ayrımı kaçırıyorum. Eğer profillemenin size en uygun olduğunuzu, sadece CPU döngülerinizi harcadığınız yeri söylemeyeceğini söylüyorsanız, o zaman katılıyorum. Bu kararı vermek için deneyim gerekir.
Michael Shaw

4
@David Thornley & @Ptolemy: Bence algoritma verimsizliği veya kod sıcak noktaları temel soruna ikincil: " Çok yavaş mı değil mi?" Bu öznel, ama aynı zamanda en önemli soru. Uygulamada yavaş hissetmiyorsa, algoritmanız verimsizse ne olur? Yapması gerekeni yapar! Veya program son derece optimal algoritmalardan bağımsız olarak çok yavaş geliyorsa, yaklaşımı (mimari? Programlama dili? Bir şey!) Tamamen değiştirmek zorunda kalabilirsiniz. Son derece optimal algoritmalara sahip olmak program yavaşlığı için bir mazeret değildir :-)
Joonas Pulakka

1
Algoritma verimsizliğini ortaya çıkarmak için test için aşamalı boyutlu veri kümeleri kullanın.
rwong

10

Makinenizi yavaşlatmak için yaptığınız her şey muhtemelen bir hack olacaktır.

İşte birkaç öneri:

  • Sanal makineleri kullanma
  • Darboğazları aramak için makinenizdeki kodu profilleyin
  • "Performans testi" için eski bir makine kullanın

@matt bu ne anlama geliyor?
johnny

1
@johnny: Demek istediğim oylama yapıyorum çünkü Jason, daha yavaş bir sisteme geçmeye gerek kalmadan performans şişe boyunlarının kaynağını bulacağından uygulamayı profillemeyi önerdi.
Matt Ellen


4

Bunun oldukça eski bir soru olduğunu ancak bu durumdaki herkes için farkına varın; CPUKiller'i deneyebilirsiniz. Temel olarak işlemcinizin farklı% 'lerini tüketecek şekilde yapılandırabileceğiniz küçük bir uygulamadır. http://www.cpukiller.com/

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.