Modern CPU'lar çok sayıda performans sayacına sahiptir - http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-system-programming-manual-325384.html Bunların nasıl okunması gerekir? Önbellek hataları ve şube yanlış tahminleriyle ilgileniyorum.i5, i7 CPU'larda performans sayaçları nasıl okunur?
cevap
PAPI'un çok temiz API'ye sahip olduğu ve Ubuntu 11.04 üzerinde gayet iyi çalışıyor. Yüklendikten sonra aşağıdaki uygulaması ne istediğini yapar: Intel Q6600 bu test
#include <stdio.h>
#include <stdlib.h>
#include <papi.h>
#define NUM_EVENTS 4
void matmul(const double *A, const double *B,
double *C, int m, int n, int p)
{
int i, j, k;
for (i = 0; i < m; ++i)
for (j = 0; j < p; ++j) {
double sum = 0;
for (k = 0; k < n; ++k)
sum += A[i*n + k] * B[k*p + j];
C[i*p + j] = sum;
}
}
int main(int /* argc */, char ** /* argv[] */)
{
const int size = 300;
double a[size][size];
double b[size][size];
double c[size][size];
int event[NUM_EVENTS] = {PAPI_TOT_INS, PAPI_TOT_CYC, PAPI_BR_MSP, PAPI_L1_DCM };
long long values[NUM_EVENTS];
/* Start counting events */
if (PAPI_start_counters(event, NUM_EVENTS) != PAPI_OK) {
fprintf(stderr, "PAPI_start_counters - FAILED\n");
exit(1);
}
matmul((double *)a, (double *)b, (double *)c, size, size, size);
/* Read the counters */
if (PAPI_read_counters(values, NUM_EVENTS) != PAPI_OK) {
fprintf(stderr, "PAPI_read_counters - FAILED\n");
exit(1);
}
printf("Total instructions: %lld\n", values[0]);
printf("Total cycles: %lld\n", values[1]);
printf("Instr per cycle: %2.3f\n", (double)values[0]/(double) values[1]);
printf("Branches mispredicted: %lld\n", values[2]);
printf("L1 Cache misses: %lld\n", values[3]);
/* Stop counting events */
if (PAPI_stop_counters(values, NUM_EVENTS) != PAPI_OK) {
fprintf(stderr, "PAPI_stoped_counters - FAILED\n");
exit(1);
}
return 0;
}
, bu 4 performans olayları destekler. İşlemciniz az çok destekleyebilir.
Performans sayaçları, RDPMC
insn.
DÜZENLEME: performans sayaçlarını okuma çok kolay değildir ve biz ayrıcalıklı talimatları gerektiren spesifik Registers, Model yazıyor içerir yanında burada açıklamak için eğer o sayfaların üzerine sayfalara alacağını, biraz daha bilgi eklemek için . Bunun yerine, performans sayaçları üzerine inşa edilen oprofile veya Intel VTune gibi hazır profilleyicileri kullanmayı tavsiye ederim.
RDPMC'den sonra bu zor görünmüyor. RDPMC için ayrıcalıklı mod devre dışı bırakıldıktan sonra sadece 15 satırlık kod ve Linux 2.6.32 varsayılan olarak devre dışı bırakılır. Ayrıca oldukça güzel bir kütüphane var - http://icl.cs.utk.edu/papi/software/index.html –
perf nedir? perf list hw cache
, 33 farklı etkinliği gösterir ve man sayfası, ham performans sayacı tanımlayıcılarının nasıl kullanıldığını gösterir.
Ben kullanılabilecek mevcut kütüphane denilen perfmon2, http://perfmon2.sourceforge.net/ olduğunu düşünüyorum ve dokümantasyon http://www.hpl.hp.com/research/linux/perfmon/perfmon.php4 ve http://www.hpl.hp.com/techreports/2004/HPL-2004-200R1.html mevcuttur, Geçenlerde ben en kısa sürede bunu anlamaya olarak örnek kod sonrası olacaktır bu lib dışarı kazma am ~
- 1. iPhone'daki performans sayaçları iPhone
- 2. Perfmon uygulamasında görüntülenen Java uygulama performans sayaçları
- 3. sayaçları
- 4. Python: Yuvalama sayaçları
- 5. Eski sayaçları silmeden mevcut bir performans sayacı kategorisine yeni bir sayaç nasıl eklenir?
- 6. Dropwizard metrikleri - Raporlama sonrası sayaçları nasıl sıfırlar
- 7. Sayaçları anlama/proc/[pid]/io
- 8. ASP.NET Performans Sayacı her zaman 0
- 9. Belirli bir alanın değeri nasıl okunur Okunur
- 10. Performans sayacı ortalama zamanlayıcıları tabanlarıyla nasıl ilişkilendirilir?
- 11. Neden özel performans sayacımın örneklerini perfmon göremiyor?
- 12. ffmpeg, h.264'ü intel i7 6700 donanım kodlayıcısıyla kodlar
- 13. Xcode 6.0.1 kötü performans
- 14. Java verbose: gc Çıktı nasıl okunur?
- 15. HardDisk Sıcaklığı nasıl okunur?
- 16. DBA'nın önerileri nasıl okunur?
- 17. gmon.out nasıl okunur?
- 18. Android'de pdf nasıl okunur
- 19. FileHelpers - ® karakterde nasıl okunur?
- 20. XML'de XML Nasıl Okunur?
- 21. Yerel çerezler nasıl okunur
- 22. utf16: codecvt kötü performans
- 23. Bir dosyadan bitler nasıl okunur?
- 24. Hamur sıralı dosya nasıl okunur?
- 25. Java'da icy protokolü nasıl okunur?
- 26. REPL'deki clojure istisnaları nasıl okunur?
- 27. Özellikler dosyasından değerler nasıl okunur?
- 28. Stdin'den nim betiği nasıl okunur?
- 29. HttpResponseMessage'den tanımlama bilgileri nasıl okunur?
- 30. Stdin'den (konsol) matris nasıl okunur?
PAPI iyi bir şey. Çapraz platformdur, dolayısıyla x86-Windows'dan IBM BlueGenes'e kadar birçok platformda çalışır. –