tl; Dr.
Daha kısa boru hatları, daha yüksek saat hızları anlamına gelir ancak verimi düşürebilir. Ayrıca, alttaki 2 ve 3. cevaplara bakın (kısa, söz veriyorum).
Daha uzun versiyon:
Burada dikkat etmeniz gereken birkaç şey var:
- Tüm talimatlar aynı anda alınmaz
- Tüm talimatlar derhal yapılanlara bağlı değildir (hatta on veya yirmi) talimatlara geri
Çok basitleştirilmiş bir boru hattının (modern Intel çiplerinde olanların karmaşıklığın ötesinde olduğu) birkaç aşaması var:
Alma -> Kod Çözme -> Bellek Erişimi -> Yürüt -> Yazma -> Program sayaç güncellemesi
Her birinde -> yapılan bir zaman maliyeti vardır. Ek olarak, her tıklatma (saat döngüsü), her şey bir aşamadan diğerine geçer, bu nedenle en yavaş aşamanız TÜM aşamaların hızına dönüşür (mümkün olduğu kadar benzer olmaları için para öder).
Diyelim ki 5 talimatınız var ve bunları uygulamak istiyorsunuz (wikipedia'dan çekilmiş, burada PC güncellemesi yapılmadı). Şuna benzerdi:
Her komutun tamamlanması 5 saat döngüsü alsa da, her döngüde bitmiş bir komut boru hattından çıkar. Her aşama için geçen süre 40 ns ve ara bitler için 15 ns (yukarıdaki altı aşamalı boru hattımı kullanarak), ilk talimatı almak için 40 * 6 + 5 * 15 = 315 ns alacaktır.
Buna karşılık, eğer boru hattını tamamen ortadan kaldıracak olsaydım (ama her şeyi aynı tutardım), ilk talimatı almak sadece 240 ns alacaktır. ("İlk" talimatı çıkarmak için hızdaki bu gecikmeye gecikme denir. Genelde, saniyedeki komutların sayısı olan verimden daha az önemlidir).
Gerçekte asıl farklı olan, boru hattındaki örnekte, her 60 ns'de bir yapılanmadan sonra (ilkinden sonra) yeni bir uygulama alıyorum. Boru hattında olmayan, her zaman 240 alır. Bu, boru hatlarının verimliliği artırmada iyi olduğunu göstermektedir.
Bir adım daha ileri giderek, bellek erişim aşamasında, bir ek birime ihtiyacım olacak gibi görünüyor (adres hesaplamaları yapmak için). Bu, o döngünün mem aşamasını kullanmayan bir talimat varsa, o zaman başka bir ek yapabilirim anlamına gelir. Böylece, bir işlemci üzerinde tek bir tıklamayla iki işlem aşaması yapabilirim (biri hafızaya erişim aşamasındadır) (zamanlama bir kabustur, ancak oraya gitmeyelim .. Ek olarak, PC güncelleme aşaması ayrıca bir atlama durumunda, ben bir kene üç ekleme yürütme durumları yapabilirim). Bir boru hattına sahip olarak, iki (veya daha fazla) komutun değerli aşamaları azaltarak farklı aşamaları (veya sıçrama aşamaları vb.) Kullanabileceği şekilde tasarlanabilir.
Bunu yapmak için, işlemcilerin çok fazla "sihir" ( sıra dışı uygulama , şube tahmini ve daha fazlası) yaptıklarını unutmayın, ancak bu, birden fazla talimatın bir boru hattından daha hızlı çıkmasına izin vermeyeceğini (çok fazla olan uzun süre yönetmek çok zordur ve yalnızca aşamalar arasında bekleyerek daha yüksek bir maliyete maruz kalırsınız). Çevirme tarafı, boru hattını çok uzun yaparsanız, çılgın bir saat hızı elde edebilirsiniz, ancak orijinal avantajların çoğunu kaybedebilirsiniz (aynı anda birden fazla yerde var olabilecek ve aynı anda kullanılabilen aynı mantık türüne sahip olmanız). ).
Cevap # 2:
SIMD (tek komut birden çok veri) işlemciler (çoğu GPU gibi) birçok bilgi bitinde çok fazla iş yapar, ancak bunların yapılması daha uzun sürer. Tüm değerleri okumak daha uzun sürer (daha yavaş bir saat anlamına gelir, ancak bu bir dereceye kadar çok daha geniş bir otobüse sahip olsa da dengeleyebilir) ancak bir seferde daha fazla talimat alabilirsiniz (döngü başına daha etkili talimatlar).
Cevap # 3:
Çünkü, döngü sayısını yapay olarak uzatarak "hile" edebilirsiniz, böylece her döngüde iki komut yapabilirsiniz (saat hızının sadece yarısı kadardır). Aynı zamanda, her iki kenede bir tekin yerine bir şeyler yapmak mümkündür (2x saat hızı verir, ancak talimatlarda bir saniye değişmez).