Kısa cevap
Talimatın kodunu çözme ve yürütme adımları, önceki talimatın bir sonraki adımına paralel olarak yürütülür. Bu teknik boru hattı olarak bilinir. Aşağıdaki RISC İşlemcilerde konusuna bakın.
Tek sorunlu bir RISC mimarisi, bekleme kaydı ve kayıt / kayıt işlemleri için belleğe çarpan yükleme / depolama işlemleri için harcanan zaman nedeniyle döngü başına bir komuttan biraz daha az ortalama olacaktır. Gecikme yuvaları, bu sürenin bir kısmını geri almanıza izin verebilecek bir mimari kanca verir. Bkz On RISC işlemciler aşağıda.
Bir talimat döngüsü, bir talimatın uygulanması için gereken süredir. Bu, mimariye ve (bazı durumlarda) talimatlara göre değişir. Örneğin, MIPS R2000 / 3000 gibi bir şeyle ilgili çoğu yönerge bir döngü alır. Bellek erişimini (yükleme / saklama, şube) içeren talimatlar birden fazla döngü gerektirir, ancak gecikme yuvaları gecikme yuvasında başka bir şey (muhtemelen sadece bir NOP) yürütebileceğiniz anlamına gelir. Boru hattı olmayan mimariler, genellikle adresleme moduna göre değişen birkaç saat döngüsünün talimat döngülerine sahip olabilir. Aşağıdaki RISC işlemcileri, Geleneksel CISC mimarileri ve Kablolu Mimariler konusuna bakın.
Çok sayıda sorunlu tasarımlar, birden fazla komutu paralel olarak uygulayarak bu kavramı biraz bulanıklaştırabilir.
CISC işlemcilerin değişen sürelerde talimatları olabilir. Kesin saat döngüsü sayısı mimariye ve talimatlara bağlıdır. CISC ISA'ları üzerinde değişen saat döngüleri, aşırı derecede boru hatlı mimarilere dönüştürülmesinin zor nedenlerinden biridir. Aşağıdaki Geleneksel CISC mimarilerine bakınız.
Daha uzun cevap
Tek bir sorun MIPS, SPARC veya diğer CPU için, '(gecikme yuvası' 'olarak bilinen bir şeye sahip olmalarına rağmen, tüm (ilk yaklaşım için) talimatlar tek bir döngüde yayınlanır.
RISC İşlemciler Hakkında
Bu bağlamda, tek sorunlu CPU, CPU'nun anında anında bağımlılık analizi ve modern CPU'ların yaptığı gibi paralel talimatlar vermediği, yani talimatları uygulayan tek bir yürütme birimine sahip olduğu CPU'dur. memoty'den okunan sıra. Bu konuyla ilgili daha sonra.
Eski RISC işlemcilerinin çoğu tek sorunlu tasarımlardır ve bu türler gömülü sistemlerde hala yaygın olarak kullanılmaktadır. 32 bit tek sayı tamsayı RISC çekirdeği yaklaşık 25.000-30.000 kapıya uygulanabilir, bu nedenle bu tür CPU çekirdekleri çok düşük güç tüketimine ve çok küçük ayak izlerine sahiptir. Bu, SOC (çip üzerinde sistem) ürünlerine entegre edilmelerini kolay ve ucuz hale getirir.
RISC CPU tasarımları boru hattına bağlıdır - talimatın işlenmesi birkaç aşamada yapılır, her talimat boru hattından her saat döngüsünde bir sonraki aşamaya geçirilir. Çoğu durumda, tek sayıdan oluşan bir boru hattı CPU, saat döngüsü başına bir talimata yakın bir şey yürütür.
Bazı mimariler, bellek erişimi tarafından alınan ek döngünün kod tarafından görülebildiği, dallanma veya bellekten yükleme / saklama gibi talimatlara sahiptir.
Örneğin, bir SPARC V7 / V8 tasarımında, bir dalın yürütülmesinden sonraki dalın kendisi gerçekleşmeden önce bir sonraki talimat. Genellikle daldan sonra yuvaya bir NOP koyarsınız, ancak yararlı bir şey bulabilirseniz başka bir talimat koyabilirsiniz.
MIPS R2000 / R3000 mimarisinde, yükleme / saklama talimatlarında benzer bir gecikme yuvası vardı. Bellekten bir değer yüklediyseniz, kayıtta başka bir döngü için gerçekte görünmez. Yuvaya bir NOP koyabilir veya daha önce yayınladığınız yükleme işlemine bağlı olmayan bir şey bulabilirseniz başka bir şey yapabilirsiniz.
Bellek, genellikle CPU'dan daha yavaşsa, bellek erişimlerinde ek bekleme durumları alabilirsiniz . Bekleme durumları, bellek erişimi tamamlanana kadar CPU'yu bir veya daha fazla saat döngüsünde dondurur. Pratikte, bu bekleme durumları ve bellek erişimi için fazladan zaman, tek sorunlu CPU tasarımlarının saat döngüsü başına bir komuttan biraz daha az ortalama olduğu anlamına gelir. Gecikme yuvaları, bir bellek işlemi sırasında başka talimatlar uygulayarak kodu optimize etmek için bazı olası fırsatlar sunar.
Geleneksel CISC işlemciler
CISC işlemcileri , değişen sürelerde talimatlar alabilen tasarımlardır. Genellikle RISC CPU'daki yazılımda yapılması gereken doğrudan donanımda uygulanan daha karmaşık talimatlar vardı.
M68K ve intel 386'ya kadar çoğu ana bilgisayar mimarisi ve hemen hemen tüm PC tasarımları geleneksel mikro kodlu CISC CPU'larıydı. Bu tasarımlar saat başına daha yavaş olduğunu kanıtladı ve RISC CPU'lardan daha fazla geçit kullandı.
mikrokod
Mikro-kodlanmış bir mimari örneği (MOS 6502) burada emülasyonda görülebilir . Mikrokod görüntünün üst kısmında görülebilir.
Mikrokod, talimatları yürütmek için CPU içinde etkinleştirilen veri akışlarını ve eylemleri kontrol eder. Mikrokoddaki adımlar arasında geçiş yaparak bir CPU'nun bölümlerini etkinleştirebilir, verileri ALU'larda taşıyabilir veya diğer adımları uygulayabilirsiniz. CPU'daki yeniden kullanılabilir bileşenler, bir talimatı yürütmek için birden fazla saat döngüsünde koordine edilebilir. 6502 durumunda, bazı kodlanmış eylemler mikrokod tarafından da yürütülebilir.
Mikro kodlu tasarımlar, bir talimatı tamamlamak için birkaç saat döngüsü alma pahasına, sabit kablolu yongalardan daha az silikon kullanmıştır. Tasarıma bağlı olarak, bu CPU'lar talimat başına değişen zaman alacaktır.
Kablolu mimariler
Kablolu tasarımlar (mikrokod ile karşılıklı olarak münhasır olmayan) bir talimatı senkronize olarak yürütür veya birden fazla saat döngüsünde bir şey yapmak için kendi koordinatörlerine sahip olabilir. Tipik olarak daha özel donanım pahasına daha hızlıdırlar ve bu nedenle uygulanması, eşdeğer işlevselliğin mikro kodlu tasarımından daha pahalıdır.
Bunun ünlü bir örneği , belirli IBM System / 370 modellerinde CPU'nun yerini alan orijinal Amdahl 470/6 CPU'ydu . Amdahl CPU, IBM'in 370 CPU'larının büyük oranda mikro koda dayalı olduğu bir zamanda kablolu bir tasarımdı. Amdahl CPU, değiştirdikleri IBM CPU'lardan yaklaşık 3 kat daha hızlıydı.
Söylemeye gerek yok, IBM eğlendirilmedi ve bu, IBM'in onay kararnamesi birkaç yıl önce sona erene kadar ana bilgisayar mimarisini açmaya zorlayan bir mahkeme savaşıyla sonuçlandı.
Tipik olarak, bu tip bir kablolu tasarım, değişken talimat zamanlamaları ve formatları bir RISC tasarımında olduğu gibi boru hattının kapsamına izin vermediği için hala bir RISC CPU'su kadar saat başı hızlı değildi.
Çok sayıda tasarım
Modern CPU'ların çoğu , tek bir iş parçacığında aynı anda birden fazla komutu işleyebilen çok sayıda sorunlu mimaridir . Yonga, gelen komut akışına dinamik bir bağımlılık analizi yapabilir ve önceki bir hesaplamanın sonucuna bağımlılığın olmadığı durumlarda paralel olarak komutlar verebilir.
Bu yongaların verimi, kodda ne kadar paralellik elde edilebileceğine bağlıdır, ancak modern CPU'ların çoğu, çoğu kodda döngü başına birkaç talimatı ortalama olarak verecektir.
Modern Intel ve diğer x86 / X64 ISA CPU'ları, eski okul CISC talimatını , boru hatlı RISC tarzı çoklu sorun çekirdeğinden beslenebilen mikro talimatlara göre yorumlayan bir katmana sahiptir . Bu, boru hattı için tasarlanmış ISA'lı CPU'larda bulunmayan bazı ek yükler ekler (örn. ARM veya PowerPC gibi RISC mimarileri).
VLIW tasarımları
Intel Itanium'un belki de en iyi bilinen VLIW tasarımları asla ana akım mimariler olarak çıkmadı, ancak IIRC bu tür tasarımı kullanan bir dizi DSP mimarisi var. Bir VLIW tasarımı, paralel olarak verilen birden fazla talimat içeren bir talimat kelimesi ile çoklu sorunu açık hale getirir.
Bunlar, paralellik için bağımlılıkları ve fırsatları belirleyen, talimatları her talimat kelimesinde bulunan çoklu yuvalara bırakarak iyi optimize eden derleyicilere bağlıydı.
VLIW mimarileri, matris / dizi işlemleri kapsamlı paralellik için fırsatlar sunma eğiliminde olduğundan sayısal uygulamalar için oldukça iyi çalışır. Itanium bir süre süper hesaplama uygulamalarında niş bir pazara sahipti ve en az bir süper bilgisayar mimarisi - Multiflow TRACE - bu tip bir ISA kullanılarak üretildi.
Bellek ve önbellekleme
Modern CPU'lar bellekten çok, çok daha hızlıdır, bu nedenle bellekten doğrudan okumalar, bellek erişimi tamamlanana kadar CPU'yu engelleyen yüzlerce bekleme durumu oluşturabilir. Şimdi birden çok katmanda yapılan önbellekleme, önbellekte en son kullanılan bellek konumlarını tutar. CPU'lar genellikle kodları yürütmek için zamanın büyük çoğunluğunu döngülerde harcadığından, son zamanlarda kullandığınız bellek konumlarını yeniden kullanarak iyi vuruş oranları elde edersiniz. Bu özelliğe 'başvuru yeri' denir.
Referans yerini aldığınız yerde CPU optimum hıza yakın çalışabilir. Önbellek bir sonraki bekleme durumuna kadar birtakım bekleme durumlarına uğrar; önbellek özlüyor aşağı ana bellek yüzlerce oluşabilir.
Böylece, CPU yongalarının gerçek verimi büyük ölçüde bellek erişim modellerinin verimliliğine bağlı olabilir. Tüm kitaplar bunun için kod optimizasyonu üzerine yazılmıştır ve bu kendi başına karmaşık bir konudur.