2011-07-31 28 views
13

Bu benim gereksinimim, bazı algoritmaların belirli birtakım veri kümeleri, vb. Kendime olanları görmek ve analiz etmek istiyorum.C/C++ Programında Önbellek Vuruşu/Bayan Program

Bu yüzden, belirli bir bellek/değişkenin nasıl okunduğunu, yani önbellekten mi olduğunu veya bir önbellek özniteliğinin nasıl olduğunu bilmenin bir yolu olup olmadığını merak ediyordum. Ayrıca, bu değer alınırken bir sayfa hatası olsaydı vb.

Çok teşekkürler!

+1

Bu soruyla ilgilenebilirsiniz: http://stackoverflow.com/questions/3052776/how-to-detect-cache-misses-from-users-codes –

cevap

7

Önbelleklerin ne zaman kaybolduğunu gerçekten bilmek istiyorsanız, modern işlemciler tam olarak bu amaçla kullanabileceğiniz performans sayaçlarına sahiptir. Bunları akademik araştırma için yoğun bir şekilde kullandım. Bunları kullanmanın en kolay yolu perfmon2'dur. Perfmon2, programınıza bağlayabileceğiniz bir kütüphaneye veya mevcut bir programı izleyecek tek başına bir programa sahiptir. this document (PDF) ait

Referans için
pfmon -eL1D_CACHE_LD:MESI,L1D_CACHE_LD:I_STATE your_program 

, Ek A mevcuttur hangi donanım sayaçları üzerinde Intel'in belgeleri listeler: Örneğin, burada tüm seviye 1 veri önbelleği okunan isteklerini kaçırsa kayıt tek başına bir programdır.

0

Belirli bir derleyiciye, işletim sistemine ve üzerinde çalıştığınız belirli bir işlemci modeline bağlıdır. C/C++ dilinde hiçbir şey (farkında olduğum), önbellek düzeyinde neler olup bittiğine erişmenizi sağlar.

Çeşitli ölçüm araçları vardır, ancak bunlar büyük oranda dilden bağımsız olurlar.

Önbellek ve sayfalama sorunlarını en aza indirmek için bazı "kurallar" vardır, ancak oldukça kapsamlı bir listeyi düşünmek biraz zaman alabilir.

4

valgrind cachegrind tool kullanmayı dener, bu satır için önbelleğin hangi isabet/atlama sayısı ile ek açıklamalı kaynak çizgilerini yazdırabilir.

+0

Not, bu cachegrind önbellek hataları gerçek değil önbellek özlüyor, ama bir simüle. – osgx

1

AMD CodeAnalyst'in bu ayrıntı düzeyini gösterip gösteremeyeceğini bilmiyorum, ancak kontrol etmek zarar vermez.

+0

AMD CodeAnalyst, Intel Platform üzerinde biraz sınırlı (ama çok temel çalışacaktır). Yani, Intel için Intel Vtune var; linux oprofile/perf/perfmon2. – osgx