2013-06-09 18 views
8

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, bir RAX 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ı zamanda RSI'a yüke bağlı olduğu için duraklar.

cevap

6

CPU'lar, yalnızca mimari kayıtların (RAX, RBX, vb.) Olduğu ve belirli bir yönerge göstericisinin (IP) bulunduğu kurgusunu sürdürür. Programcılar ve derleyiciler bu kurguyu hedefler. Daha önce de belirttiğiniz gibi, modern CPU'lar seri olarak veya sırayla yürütülmezler. Programcı/kullanıcı IP'yi talep edene kadar, bu, Kuantum Fiziği gibidir; IP, yürütülmekte olan bir talimat dalgasıdır; hepsi böylece işlemci programı olabildiğince hızlı çalıştırabilir. Mevcut IP'yi (örneğin, bir hata ayıklayıcı kesme noktası veya profiler kesintisi ile) talep ettiğinizde, işlemci beklediğiniz kurguyu yeniden yaratmalı, böylece bu dalga formunu (tüm "uçuşta" talimatları) çöker, kayıt değerlerini yeniden toplar. mimari adları ve hata ayıklayıcı yordamını yürütmek için bir bağlam oluşturur.

Bu bağlamda, işlemcinin yürütmeyi sürdürmesi gereken yönergeyi gösteren bir IP vardır. Sipariş dışı yürütme sırasında, bu talimat işlemin kesildiği anda işlemcinin bu noktadan sonra iyi bir şekilde alınmasına rağmen, henüz tamamlanmamış en eski talimattı. Örneğin, belki de kesme, IP olarak mov RSI, [RBX + RCX]; gösterir, ancak xor zaten yürütüldü ve tamamlandı; Ancak, işlemci, kesintiden sonra yürütmeyi sürdürdüğünde, xor'u yeniden çalıştırır.

+1

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

İlgili konular