2008-09-10 25 views
11

Çok çeşitli CPU'larda ve mimarilerde (bazıları gömülü cihazlara çok yakın) çalışacak bir uygulamada bazı darboğazları optimize etmeye çalışıyorum.Profilleme için CPU hızını sınırlama

Ancak, profilerimin sonuçları, CPU'mın hızı nedeniyle gerçekten önemli değil. Profilleme amacıyla CPU'm hızını sınırlamak için (tercihen Windows veya Mac OS X altında) herhangi bir yol var mı?

Sanal bir makine kullanmayı düşündüm, ancak bu tür bir işlevsellik bulamadı.

cevap

0

Downloadsquad.com sitesinde son zamanlarda bir uygulama vardı. Bunun ismini hatırlamıyorum ama biraz eğlendirici işlemci ve görev yöneticisi yaptı. Sadece hangi uygulamanın cpu üzerinde olduğunu yönetmek olabilirdi ama belki size bunu verebilirdi. Bu öğleden sonra onu aramaya çalışacağım ve bulursam geri döneceğim.

0

Çoğu profil oluşturucu (örneğin oprofile - ancak yalnızca Linux), veri topladıkları sıklığı ayarlamanıza izin verir. Profilcinizin bunu destekleyip desteklemediğini ve farklı bir tane denemediğini görün.

+0

CPU'yu yavaşlatmak istediğine inanıyorum, böylece CPU hızı ile diğer işlemlerin hızı (I/O, kullanıcı girişi ...) eski sistemlerde yaşanan ilişkilere daha yakındır. Artan toplama sıklığının oraya nasıl yardımcı olacağını anlamıyorum. – sleske

+0

@sleske CPU'nun çok hızlı olduğu ve çok az profil örneği toplandığı anlamına geldiğini farz ettim, böylece anlamlı bir veri geri gelmedi. –

1

Korkarım ki eski donanım için bölgenize bakmaya başlamaktan başka bir cevap bile bilmiyorum. CPU, (genellikle) şeyleri etkileyebilecek tek değişken değildir. L1/L2 önbellek boyutu, bellek veri yolu hızı, bellek hızı/gecikme süresi, sabit sürücü hızı vb. Birçok uygulamada önemli faktörlerdir.

2

Kodunuzun performans sorunlarınızın nerede olduğunu bilmek için ne kadar hızlı olduğunu bilmeniz gereken yaygın bir yanlış anlamadır. Problem-ölçümü ile problem-bulmayı karıştırır. Programda bazı savurgan bir mantık varsa

This is the method I use.

, olursa olsun o ishal Ne CPU savurgan olacaktır.

Bilmeniz gereken, nerede olduğu. Ölçüm için, ne kadar büyük olduğunu bilmenize gerek yok; Sadece sabit olması gerekecek kadar büyük olduğunu bilmeniz gerekir.

Genellikle farklı boyutlarda birçok sorun vardır. Muhtemelen ilk önce en büyükleri bulacaksın, ama onları hangi düzende düzeltiyor olursanız olun, düzeltdiğiniz her biri kalanları bulmayı kolaylaştıracak, çünkü daha büyük bir yüzdeyi alacaklar.

+0

Bir noktanız var, ama öncelikle bir probleminiz varsa * öğrenmelisiniz *. Verimsiz bir kodunuz varsa, ancak verimsizlikler G/Ç bekleme süreleri tarafından cüceleştirilirse, onu optimize eden bir nokta yoktur. Bu nedenle, sistem bileşenlerinin hızları arasındaki ilişkiler performans testi için önemlidir ve bu yüzden CPU'yu yavaşlatması gerekir. – sleske

+0

@sleske: Bu yüzden, CPU zamanı ile engellenen süre arasında çok fazla ayrım yapmak istemiyorum. Bir performans hatası her ikisinden de çok fazla olabilir, ancak OP gerçekten G/Ç'den bahsetmedi. Benim amacım, 1 işin yapılacağı yer olan 10 talimatla bir şey yapmak, 1hz'de 1hz'de savurganlık yapmaktır. Atıkları ayırmak amacıyla yüzdelerin zamanlardan daha önemli olduğunu düşünüyorum. –

+1

@sleske: ... Çok iyi demedim sanmıyorum. Burada yaklaşık 2 büyüklük büyüklüğünde bir dizi performans probleminin olduğu bir örnek (http://stackoverflow.com/questions/926266/performance-optimization-strategies-of-last-resort/927773#927773) bulunmaktadır. Bunlardan biri I/O problemiydi. Daha büyük olanları çıkardıktan sonra, G/Ç'nin en büyük olduğu bir noktaya geldi. CPU farklı bir hızda koştuğunda, bu sadece farklı bir noktada gelirdi. –

0

Ben sanal makinesini kullanarak düşündüm ama böyle işlevselliği ile herhangi bulamadı.

Niçin bu işlevselliği sunan bir VM'ye ihtiyacınız var? Sadece VM'nin ana işletim sistemindeki CPU kullanımını sınırlandırın (sadece normal bir süreçtir). Tam olarak aynı etkiye sahip olmalı.

Bunu örn. Linux'ta cpulimit kullanarak; MS Windows için benzer çözümler mevcuttur.

+0

Bu, çok düzgün olmayan bir işlemci, ör. VM sisteminin nasıl çalıştığına bağlı olarak, yarım saniyeliğine daha hızlı, sonraki yarım saniye için hiçbir şey. –