SORU
20 EYLÜL 2008, CUMARTESİ


() Olası/muhtemel() Linux çekirdeği makro - nasıl çalışır? 'onların yararı ne?

Linux çekirdeği bazı kısımları inceledim ve buldum böyle: çağırır

if (unlikely(fd < 0))
{
    /* Do something */
}

ya

if (likely(!err))
{
    /* Do something */
}

Onları tanımını buldum:

#define likely(x)       __builtin_expect((x),1)
#define unlikely(x)     __builtin_expect((x),0)

Optimizasyon için olduğunu biliyorum, ama nasıl çalışır? Ve ne kadar performans boyutunu küçült bunları kullanarak beklenen/olabilir? Ve darboğaz kodu güçlük (ve muhtemelen taşınabilirlik kaybetme) en az (tabii ki kullanıcı) değer.

CEVAP
20 EYLÜL 2008, CUMARTESİ


Şube tahmin "" atlama talimatı. yan yana Olası neden olacak talimatları sağlamak için derleyici için bir talimat onlar Bu büyük bir zafer olabilir, eğer bu tahmin doğru ise atlama yönergesi temelde ücretsiz ve sıfır devir alacak demektir. Eğer tahminim doğru ise, öte yandan, sonra işlemci boru hattı temizlendi tutulmalı ve birkaç döngüleri mal olabilir. Tahmin çoğu zaman doğru olduğu sürece, bu performans için iyi olma eğilimindedir.

Tüm bu performans mükemmelleştirme gibi sadece sıkı bir döngü içinde çalıştırılan kapsamlı bir profil kodu gerçekten bir darboğaz olduğundan emin olmak için, ve muhtemelen mikro doğası gereği sonrasında yapmak gerekir. Genellikle Linux geliştiricileri böyle bir şey yaptılar ... sanıyorum bu yüzden oldukça deneyimlidir. Gerçekten onlar sadece gcc hedef olarak taşınabilirlik konusunda çok fazla umurlarında değil, ve bunu oluşturmak istiyorlar Meclisi çok yakın bir fikirleri yok.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bucky Roberts

    Bucky Robert

    9 HAZİRAN 2011
  • GWTLecturer

    GWTLecturer

    18 EKİM 2012
  • TheRightTire

    TheRightTire

    14 EKİM 2009