SORU
7 Ocak 2011, Cuma


Hangisi daha hızlı, (bayrak==0) veya (0==bayrak) çalıştırır mı?

1**: Hangisi daha hızlı, if (flag==0) if (0==flag) idam edecek? Neden?

CEVAP
7 Ocak 2011, Cuma


Henüz doğru cevap (ve zaten bazı vardır) görmedimuyarı: Navaz kullanıcı tanımlı bindirme işaret yaptı. Ve "en aptal" pek doğru değil gibi görünüyor, çünkü derleyici optimizasyonu ile ilgili güzel bir sohbet:) için oda verir soru . aceleyle dökme benim upvote pişmanım

Cevap:

flagne tür?

flag aslında olduğu durumda kullanıcı tanımlı bir tür. Hangi seçeneği bağlıdır. Tabii ki simetrik değil, ama kesinlikle izin aptalca görünebilir, ve zaten diğer ihlalleri gördüm.

Eğer flag yerleşik ise, o zaman her ikisi de aynı hızda sürer.

Gelen Wikipedia article x86, bence bahis için Jxx talimat if açıklama: belki de bir JNZ (Atlama değilse Sıfır) veya bazı eşdeğer.

Derleyici en iyi duruma getirmeleri kapalıyken bile bu kadar bariz bir optimizasyon özlüyor, şüphe ederdim. Bu Peephole Optimization için tasarlanmıştır şeyler yazın.

DÜZENLEME:Tekrar fırladı, bazı derleme (LLVM IR 2.7) ekleyelim

int regular(int c) {
  if (c == 0) { return 0; }
  return 1;
}

int yoda(int c) {
  if (0 == c) { return 0; }
  return 1;
}

define i32 @regular(i32 %c) nounwind readnone {
entry:
  %not. = icmp ne i32 %c, 0                       ; <i1> [#uses=1]
  %.0 = zext i1 %not. to i32                      ; <i32> [#uses=1]
  ret i32 %.0
}

define i32 @yoda(i32 %c) nounwind readnone {
entry:
  %not. = icmp ne i32 %c, 0                       ; <i1> [#uses=1]
  %.0 = zext i1 %not. to i32                      ; <i32> [#uses=1]
  ret i32 %.0
}

Eğer IR okumayı bilen biri varsa bile, kendini açıklayıcı olduğunu düşünüyorum.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • B3ASTTY™

    B3ASTTY™

    27 Mayıs 2013
  • happyjpy

    happyjpy

    22 AĞUSTOS 2009
  • Peter Sharp

    Peter Sharp

    11 ŞUBAT 2013