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
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:
- bu standart olmayan
- 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
Nasıl git başka bir şube için işleyen ...
Silmek için Zaman Gıt - Şube...
Neden tüm Raylar yardımcıları tüm görü...
Bir şekilde ellipsize=&; marquee" ...
Nasıl ASP.NET Web API her zaman JSON d...