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

  • CodingMadeEasy

    CodingMadeEa

    25 EYLÜL 2010
  • SellerDp

    SellerDp

    27 EKİM 2009
  • UlyssesForever's channel

    UlyssesForev

    28 ŞUBAT 2012