Montaj talimatı düzeyinde kod profili oluştururken, modern CPU'ların seri veya sıralı talimatlar uygulamadığı dikkate alındığında, yönerge göstericisinin konumu gerçekten ne anlama gelir? Örneğin, aşağıdaki x64 assembly kodu varsayalım:Yönlendirme Düzeyi Profil Oluşturma: Talimat İşaretçisinin Anlamı?
mov RAX, [RBX]; // Assume a cache miss here.
mov RSI, [RBX + RCX]; // Another cache miss.
xor R8, R8;
add RDX, RAX; // Dependent on the load into RAX.
add RDI, RSI; // Dependent on the load into RSI.
hangi talimat üzerine talimat işaretçisi zamanının çoğunu geçirecek? Ben hepsi için iyi argümanlar düşünebilirsiniz: Bir önbellek bayan olduğu için
mov RAX, [RBX]
muhtemelen döngüleri 100'ler alıyor.mov RSI, [RBX + RCX]
ayrıca 100'lerin döngülerini alır, ancak muhtemelen önceki komutla paralel olarak yürütür. Talimat göstericisinin bunlardan biri veya diğeri üzerinde olması ne anlama geliyor?xor R8, R8
, büyük olasılıkla bellek yükleri bitmeden önce sipariş ve son işlemlerini gerçekleştirir, ancak yönerge gösterici, önceki tüm yönergeler de tamamlanana kadar burada kalabilir.add RDX, RAX
, birRAX
değerinin gerçek bir yavaş önbellek yükü yükünden sonra kullanıldığı yönerge olduğu için bir boru hattı durması oluşturur.add RDI, RSI
aynı zamandaRSI
'a yüke bağlı olduğu için duraklar.
Donanım performans izleme sayaçlarının bu bağlamda nasıl çalıştığını açıklar mısınız? Örneğin. Linux, PMC'lere dayalı istatistiksel profil sağlayan “perf” alt sistemine sahiptir. Çekirdek, yüksek frekanslı bir kesinti yaratıyor mu? - çok güzel bir benzetmeye göre - IP dalga fonksiyonunu daraltmak ve PMC'leri okumak, ve o zaman mevcut PMC'lerin mevcut değerlerini mevcut bulunan IP'ye atayacak mı? işlev çökmesi)? Ve sonra PMC'leri sıfırlayın ve interruptdan devam edin. – oberstet