RISC / CISC komutunun yürütülmesi için kaç saat çevrimi gerekir?


13

Göre Sayısal Tasarım ve Bilgisayar Mimarisi Harris ve Harris tarafından, aşağıdakiler de dahil bir MIPS işlemci uygulamak için çeşitli yollar vardır:

Tek döngülü mikro mimari bir döngü içinde bütün bir komutu çalıştırır. (...)

Çok tekerlekli mikro mimarisi, talimatları bir dizi daha kısa döngüde yürütür. (...)

Ardışık mikromimariye tek çevrim mikromimarisine için borulama özelliğini uygular.

Mimariler genellikle RISC veya CISC olarak sınıflandırılır. Gönderen RISC vs CISC :

RISC işlemcileri yalnızca bir saat döngüsü içinde gerçekleştirilebilecek basit talimatları kullanır.

MIPS RISC mimarisi olduğundan, yukarıdaki tanımlarla kafam karıştı ve aralarında bir tür çelişki olup olmadığını merak ediyorum. Daha spesifik olarak:

  1. Bir RISC talimatı daha kısa döngülere bölünebiliyorsa (Getir, Kod Çöz, ...), tüm talimatı yürütmenin sadece bir saat döngüsünün geçtiğini nasıl söyleyebiliriz? Her bir adımı yürütmek için bir saat döngüsü gerekmiyor mu ?
  2. O mu gerçekten bir RISC vereceği emirler bir saat devrine almak? Örneğin, önbellek kaçarsa ve işlemci yavaş DRAM beklemek zorunda kalırsa ne olur? Bu, talimatın yürütülmesini biraz uzatmamalı mı?
  3. Bir talimat döngüsü tam olarak nedir? Bir komutun tamamlanması için gereken süre mi (bir / birden fazla saat çevrimi)?
  4. Bir CISC talimatı saat / talimat döngülerinde ne kadar sürer?

2
Genellikle birden az :-).
Russell McMahon

Yanıtlar:


22

RISC ve CISC'nin pratik tanımları çok çamurlu ve bulanıktır, şimdi neredeyse anlamsızdırlar. Şimdi, onları bir CISC mimarisinin daha güçlü bireysel talimatlar (örneğin DIV ve benzeri) ile zengin bir talimat setine sahipken, bir RISC talimat seti çıplak kemikler ve hızlı olduğu için onları "felsefe" hakkında daha fazla düşünmek en iyisidir, ve karmaşık işlemleri uygulamak için derleyiciye bırakır. Hatta iddia edildiği gibi CISC komut setleri (x86 gibi) hem Intel hem de AMD yongalarında dahili talimatlara çevrilir ve daha çok RISC işlemcileri gibi uygulanır. Sorularınızı cevaplamak için:

  1. Orijinal akademik RISC işlemcileri (ve belki de ilk ticari sürümler) gerçekten getirme ve kod çözme de dahil olmak üzere döngü başına bir komut yürüttü. Bu mümkün çünkü veri yolları süper temizdi çünkü her aşamanın işlemleri basit ve iyi tanımlanmıştı. (buradaki ödünleşim sadece çok basit talimatlar bu şekilde uygulanabilir). Gerçek dünyaya çarptığında işler bulanıklaştı. Boru hattı ve süperskalar mimari gibi şeyler basit bir RISC / CISC ikilemini imkansız hale getirir.

  2. Orijinal RISC yongaları, döngü başına bir komut yürütmeyi denedi ve veriler kayıt dosyasında mevcutsa yapabilirler. Tabii eğer işlemci DRAM'e gitmek zorunda kalırsa (çok) daha uzun sürer. RISC, döngü başına bir talimat yürütmeye "çalışmak" ile ilgilidir.

  3. Bir talimat döngüsü, getirmeler arasında geçen süredir.

  4. İçinde büyük ölçüde talimat ve komut kümesi mimarisine bağlıdır. CISC mimarisinde bile bazı talimatlar çok hızlı bir şekilde yürütülebilir (örneğin sağa veya sola kaydırma gibi). Bazıları çok yavaş yürütüldü (10s döngü veya daha fazla). VAX mimarisinin (muhtemelen CISC felsefesinin zirvesi) gerçekten karmaşık talimatlar vardı. Bu arada, bir CISC mimarisini montajda programlamak genellikle bir RISC mimarisinden daha kolaydır çünkü neredeyse üst düzey bir dil gibidir!


5

Kısa cevap

  1. 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.

  2. 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.

  3. 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.

  4. 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.


3

Öğrenciler için bir basitleştirme.

Her önemsiz işlemci ardışık düzenlenmiştir. Bir uçta bir ön getirme ünitesi kürekleme talimatları , ortada gerçek iş yapan bir dizi yürütme birimi ve kayıt veya belleğe yazma tamamlandıktan sonra tamamlanan talimatları bildirmekten sorumlu bir sorun birimi vardır. Birden fazla yürütme birimi (örneğin, bir tamsayı ALU, bir kayan nokta ALU ve vektör birimi) varsa, saat döngüsü başına birden fazla talimat vermek (bazen "emekli" olarak adlandırılır) mümkün olabilir. CPU, döngü başına nasıl birden fazla talimat verebilir? bu konuda daha fazla ayrıntıya giriyor.

Dediğiniz gibi, önbellek kaçırma gecikmesi varsa ne olur? Intel Hyperthreading buna yeni bir çözümdür: iki lot CPU durum kaydı, bir sürü kontrol mantığı ve sorun birimi. Bir sanal CPU durur durmaz diğerinin durumuna geçilir. (bu brüt bir aşırı basitleştirmenin kendisidir)

Bunun sonucu, modern CPU kılavuzlarının çok daha kesin talimat zamanlamaları vermesidir ve örneğin , gerçek zamanlı olarak videonun bunu yapamaması gereken bir donanımdan çıkarmaya çalışıyorsanız, döngü doğru zamanlama kodu yazmak çok daha zordur .

("Bir CISC talimatının saat / talimat döngülerinde ne kadar zaman alır?" Özel cevabı "üreticinin referans kılavuzuna bakın ve talimat başına zamanlamaları olacaktır")


0

Diğer adamlar çok iyi malzemeler yazdılar, bu yüzden cevabımı kısa tutacağım: Eski günlerde (1980'ler burada), günün 8 bit işlemcileri (6800, 6502, Z80, 6809 ve diğerleri) dikkate alındı. CISC. Bazı talimatlar 2 saat biçiminde çalıştırılabilir, ancak bunlar bir işlemci durum kaydında bayrak bitlerini ayarlamak / temizlemek gibi basit talimatlardır. Diğer talimatların yürütülmesi 2-6 ve hatta 9 saat döngüsüne kadar sürebilir. Bu işlemciler oldukça güçlü talimatlara sahipti, Z80, hafızadaki bir dizi bayta aynı değeri yazacak, tek bir komutta büyük bir bloğu etkili bir şekilde temizleyecek, sadece birkaç kayıt oluşturacak ve LDIR komutu (yük, artış ve tekrar).

6502 işlemcinin (bellekten) 56 talimatı vardı, ancak güçlü bir talimat seti oluşturan 13 adresleme modu vardı.

RISC uzun bir süre geldi ve farklı bir yaklaşım benimsedi, hepsi tek bir saat döngüsünde yürütülen bir avuç talimat var. Programlar daha uzun olma ve daha fazla bellek işgal etme eğilimindedir, çünkü yürüttükleri işlemlerde talimatlar basit olduğundan daha fazlasına ihtiyacınız vardır.

Bir RISC mimarisinde ilk denemeyi doğru bir şekilde hatırlarsam, ya transputer mı yoksa Acorn Risc işlemci mi?


Muhtemelen ilk boru hattılı RISC tipi mimari, Seymour Cray tarafından tasarlanan CDC 6600 idi. RISC terimi yaygın kullanıma girmeden birkaç on yıl önceydi. MIPS, ARM ve diğer birkaç RISC mikroişlemci tasarımı, 1980'lerin ortalarında çıkan bu yongaları kullanan ilk ticari donanım ile 1980-1985 dönemine kadar uzanmaktadır.
EndişeliOfTunbridgeWells

Bireysel alıcı çipleri oldukça hızlıydı, ancak normalde bir RISC çipi ile ilişkilendirilen mimarinin aynısı değildi. en.wikipedia.org/wiki/Transputer#Architecture
ConcernedOfTunbridgeWells

Antistatik bir durumda birkaç tarihsel vericim var, tarihsel bir mikroişlemci koleksiyonunun sadece bir parçası. Onları hiç kullanmadım, o günlerde onları denemek çok eğlenceli olurdu.
Dean

@ConcernedOfTunbridgeWells CDC 6600 komut setine bir göz attım. Tasarım, RISC'nin bazı prensiplerini somutlaştırıyor (ve öngörüyor) gibi gözükse de, kayan nokta bölme talimatının yürütülmesi 29 döngü sürer! Ve bir bölünme talimatının dahil edilmesi tipik RISC ilkelerine aykırıdır, ancak çok ilginç yorum için teşekkürler!
crgrace

Ana RISC-ish öznitelikleri, ardışık düzen alma / kod çözme / yürütme mekanizması ve yük deposu mimarisi idi (yani adresi hesaplamak için örtük bellek erişimlerine sahip adresleme modları yok). Aslında, bazı RISC komut setleri (örn. IBM POWER) aslında oldukça büyüktür, ancak tutarlı yürütme sürelerini sağlamak için yükleme / depolama yaklaşımını kullanmaya devam eder.
ConcernedOfTunbridgeWells
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.