SORU
24 Kasım 2008, PAZARTESİ


&; Pahalı " İSE "?

Ben mi, beni hayat için, tam olarak öğretmenimiz yaptığını hatırlıyor musun dedi o gün ve muhtemelen sen bilirsin diye umuyorum.

Modülü "Veri Yapıları ve Algoritmalar" ve ABD çizgisinde bir şey söyledi:

Eğer ifadesi en pahalı [bir şey]. [bir şey] kaydeder [bir şey].

Evet, korkunç bir hafızası var ve gerçekten çok üzgünüm, ama saatlerce googling oldum ve hiçbir şey geldi. Herhangi bir fikir?

CEVAP
24 Kasım 2008, PAZARTESİ


Çok düşük düzeyde (donanım), Eveteğers pahalı. Neden anlamak için, pipelines nasıl çalıştığını anlamak gerekir.

İdam edilmesi için geçerli bir talimat genellikle " molekülüYönerge işaretçisi(IP) yaprogram sayacı(PC); bu terimler eşanlamlıdır, ama şartlar farklı mimarileri kullanılır farklı. En yönergeler için, bir sonraki öğretim PC şuanki PC artı geçerli talimat uzunluğudur. En RISC mimarisi için, talimatları sabit bir uzunlukta, PC sabit bir miktar artırılabilir. 86, talimatlar gibi CISC mimarileri değişken uzunlukta olabilir, bu yüzden talimat çözer mantığı ne kadar geçerli talimat sonraki yönergenin konumunu bulmak için olduğunu anlamaya vardır.

İçinşubetalimatlar, ancak, bir sonraki öğretim yürütülecek geçerli talimat sonraki konum değil. Dalları gotos - bir sonraki talimat olduğu işlemci söylediler. Dalları da koşullu ya da koşulsuz olabilir, ve hedef konum veya hesaplanan ya da sabit olabilir.

Koşullu vs koşulsuz anlamak kolaydır - bir koşullu dallanma sadece alındığı takdirde belli bir koşul tutar (gibi olsun bir numara eşittir bir); if Dalı alınmaz, kontrol gelirleri için bir sonraki talimat sonra dal gibi normal. Koşulsuz şube için, şube her zaman alınır. Koşullu dallar if tablolar for while döngü denetimi testlerde. Koşulsuz dalları da ortaya kısır döngüler, fonksiyon çağrıları, işlevi, break continue tablolar, rezil goto ifadesi, ve daha birçok (bu liste çok uzak yorucu).

Şube hedefi bir başka önemli konudur. En dalları, şube, sabit bir hedef var - derleme zamanında sabit bir kod belirli bir yere gidiyorlar. Bu if tablolar, her türlü döngüler, normal işlev çağrıları, ve daha birçok içerir.Hesaplanmışdalları zamanında şubenin hedef hesaplamak. Bu switch ifadeler (bazen), fonksiyon, sanal işlev çağrıları ve işlev işaretçisi çağrıları dönen içerir.

Bu performans için ne anlama geliyor? İşlemci şube talimatı olan boru hattı görünür görünce, kendi boru hattı doldurmak için devam etmek için nasıl anlamaya ihtiyacı var. Sipariş için ne fark talimatları gel sonra şube program akışı, bilmek iki şey: (1) şube alınır ve (2) hedef şube. Bu sergiyi branch prediction denir ve zorlu bir sorun. Eğer işlemci doğru tahmin, program tüm hızıyla devam ediyor. İşlemci tahmin eğer yerineyanlışsadece yanlış bir şey işlem biraz zaman geçirdim. Şimdi olan boru hattı temizleme ve doğru uygulama yolunu talimatı ile yeniden vardır. Sonuç: büyük bir performans isabet.

Böylece, eğer ifadeleri pahalı geliyorsa sebebi neden kaynaklanmaktadırşube mispredictions. Bu en düşük seviyede. Eğer yüksek seviye kod yazıyorsanız, bu ayrıntılar konusunda endişe etmeye gerek yok. Yalnızca son derece C veya derleme performans-kritik kod yazıyorsanız bu konuda çok dikkat etmelisiniz. Eğer durum buysa, şube-ücretsiz kod yazma genellikle çok daha talimatları gerekirse bile şube kodu daha üstün olabilir. Bazı güzel bit öldürmek abs(), min() ve dallanma olmadan max() gibi şeyler hesaplamak için yapabileceğiniz bir hile vardır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Gimpology.com Video Tutorials

    Gimpology.co

    3 ŞUBAT 2008
  • HTC

    HTC

    12 Ocak 2006
  • tatermoog

    tatermoog

    2 AĞUSTOS 2006