SORU
8 Mayıs 2015, Cuma


GCC şube tahmin her zaman belli bir şekilde gitmek için zorlamak için derleyici bir ipucu var mı?

Intel mimarileri için bir yol her zaman şube tahmin güçleri kod oluşturmak için GCC derleyici öğretmek benim için bir kod belirli bir yolu var mı? Intel donanım bile bunu destekliyor mu? Ne diğer Derleyiciler veya donanım hakkında?

Ben bunun için bu C kodunu biliyorum durum keşke çalıştırmak için hızlı ve bakımı hakkında yavaşla zaman diğer şube ihtiyaçları için alınan bile sahip yakın bir zamanda çekilmiş bu şube.

for (;;) {
  if (normal) { // How to tell compiler to always branch predict true value?
    doSomethingNormal();
  } else {
    exceptionalCase();
  }
}

Bir Evdzhan Mustafa için soru takip olarak, ipucu sadece işlemci talimat karşılaştığı ilk defa bir ipucu belirtin, sonraki tüm şube tahmini normal çalışıyor olabilir?

CEVAP
8 Mayıs 2015, Cuma


GCC fonksiyonu __builtin_expect(long exp, long c) Bu tür bir özellik sağlar. Belgeleri here kontrol edebilirsiniz.

exp koşulu kullanılır ve c beklenen değer. Senin durumda örneğin isterim

if (__builtin_expect(normal, 1))

Garip sözdizimi çünkü bu genellikle gibi iki özel makrolar tanımlayarak kullanılır

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

görevini kolaylaştırmak için sadece.

Unutmayın:

  1. bu standart olmayan
  2. cpu şube tahmini/derleyici bu mikro-optimizasyon erken olabilir bu yüzden büyük olasılıkla bu tür şeyler karar verirken size daha fazla yetenekli

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Shameless Maya

    Shameless Ma

    24 Mayıs 2012
  • TheFlightsuit

    TheFlightsui

    22 HAZİRAN 2009
  • VJ VIMANA

    VJ VIMANA

    3 Mayıs 2007