2010-07-01 16 views
11

Birkaç hesaplamalı CPU çalışması yapan bir uygulamaya sahibim, ancak çoğunlukla bellek erişimleri (nesneleri ayırma ve bunları taşıma, birkaç sayısal veya aritmetik kod var).Uygulamanın işlemci mi yoksa bellek mi bağlı olduğunu nasıl kontrol edebilirim?

CPU boşta kaldığında bellek erişim gecikmelerinde (önbellek kayıplarından dolayı) harcadığım sürenin payını nasıl ölçebilirim?

Uygulamanın bir Hyper-V konuğu üzerinde çalıştığını not etmeliyim; Herhangi bir güçlük çekeceğinden emin değilim, ama olabilir.

cevap

2

Çoğu zaman nerede geçirdiğini görmek için uygulamanızı her zaman profile uygulayabilirsiniz.

Uygulamanızın davranışları ve veri erişim kalıpları hakkında bu şekilde çok şey öğrenebilirsiniz.

DÜZENLEME:

Eğer Linux kullanıyorsanız, şöyle profilleme için uygun araçlar geniş bir yelpazesi var

İşlemci performansının yanı sıra bellek erişimlerinin daha kesin bir ölçümü için, AMD CodeAnalyst Performance Analyzer'u da deneyebilirsiniz. Here, Intel işlemcilerle nasıl kullanılacağına dair talimatlar, ancak kendim denemedim.

Ayrıca yararlı bulabileceğiniz başka bir araç da Intel Performance Tuning Utility'dur.

+0

Gördüğünüz gibi, uygulamayı zaten belirledim. Memset, memmove vb. Gibi çeşitli bellek erişimli fonksiyonlar tarafından alınan zamanın büyük bir kısmıyla oldukça düz bir performans profiline sahiptir (aslında bu, Windows üzerinde çalışan bir .NET uygulamasıdır ve bu işlevler, nesne yapımı sırasında CLR tarafından çağrılır). Zamanlarının CPU ya da bellek veri yolu tarafından baskın olup olmadığını bilmek isterim. – jkff

+1

** AMD CodeAnalyst Performance Analyzer ** 'ı deneyebilirsiniz: http://developer.amd.com/cpu/codeanalyst/Pages/default.aspx veya http://www.virtualdub.org/blog/pivot/entry.php ? id = 288 –

2

Sistemde yerleşik bir gecikme olmadıkça, uygulamayı yalnızca belirli bir makinede çalıştırın ve CPU sayaçlarını kontrol edin. Uygulamaya erişebileceği CPU çekirdeğinin% 100'ü kullanılıyorsa, CPU bağlı. Aksi takdirde, bellek ayırma ve IO gibi diğer şeylere zaman harcıyor.

+2

CPU kullanım performans sayaçlarına dahil olmayan bellek erişim gecikmeleri nedir? – jkff

+1

Özellikle de * dışlanmış olduklarını düşünmüyorum *, ancak bu tür bir ayrıntı düzeyinin sabitlenmesi zor. İşleminiz CPU'yu sabit bir süre alır, ancak işleminiz tahliye edilmediğinden, önbellek yüklerinin beklenmesi hala CPU'nun “kullanımı” olarak sayılır. Ben gerçekten otobüs saygısız olmadan bellek bekleme süresi için zor numaraları almak mümkün olduğunu bilmiyorum. – TMN

+1

'Callgrind' ile L1' ve' L2' önbellek özetleri için sayaçlar alabilirsiniz. Bu verileri profil bilgileriyle toplayın ve uygulamanız için veri erişim desenlerinin ne kadar iyi performans gösterdiğini öğrenin. –

İlgili konular