Bilgisayarlar gerçekte taşıma-gözü ekleyiciler kullanıyor mu?


12

Üniversite CS derslerinde Kogge-Stone, Lander-Fischer, vb. Gibi ileriye dönük katkı maddeleri taşıma hakkında birçok ayrıntı vardır. Bunlar "endüstride yaygın" olarak tanımlanmaktadır. Ancak, son zamanlarda aslında herhangi bir yerde özel olarak kullanıldıklarına dair herhangi bir kanıt bulamıyorum (belki de Manchester taşıma zincirinin dışında). Google araması yalnızca dergi sayfalarını ve akademik araştırmaları döndürür. En fazla varsayımsal uygulamalar verilir.

Sorum şu, taşıma-gözetleme ekleyicilerinin kullanıldığı belirli yerler / uygulamalar var mı? Yoksa gerçek dünyayla ilgisi yok mu?


1
Yüksek performanslı işlemcilerin döngü süreleri ve tek döngülü ek gecikme süreleri, dalgalanma taşıma özelliğini kullanmadığını kesinlikle gösterir (ancak bu, taşıma seçimine izin verir). Intel'in 22nm işlemi için bile, 300 bitin altında 64 bit ile dalgalanmak mümkün olmayabilir.
Paul A. Clayton

@ PaulA.Clayton Ben izlenim taşıma veya dekoder benzeri toplayıcılar kullanılan birkaç veri sayfalarına bakarak izlenimi alıyorum.
qwr

Yanıtlar:


16

Bu çok karmaşık bir cevabı olan basit bir sorudur.

Öncelikle, biraz arka plan.

Gerçek dünya VLSI tasarımı, sürekli değişen dengeler sunan son derece teknik bir alandır. Bir devrenin bir cevabı hesaplamak için aldığı süre nadiren tek önemli faktördür. Güç çekişi ve fiziksel alanın yanı sıra, tasarladığınız devrelerin aslında analog olduğunu gösteren bir dizi faktör var (örn. Tel direnci, parazit kapasitans). Tüm bunlar gerçek bir devrede önemlidir ve hangi tasarımın seçildiğini etkileyebilir.

İkinci olarak, bir projenin tüm yaşam döngüsünü göz önünde bulundurmalısınız. VLSI gerçekleştirmesi için uygun bir toplayıcı FPGA gerçekleştirmesi için uygun olmayabilir. Tasarım bir FPGA üzerinde test edilen bir aşamadan geçecekse ... resmi elde edersiniz.

Üçüncüsü, her toplayıcı eşit değildir. Tipik bir CPU'da, etrafında farklı görevler yapan çok sayıda toplayıcı vardır; muhtemelen birkaç tamsayı ALU, kayan nokta mantis toplayıcısı, adres hesaplaması yapan bir toplayıcı, dal hedeflerini hesaplayan bir toplayıcı vb. vardır. Bu, modern çarpma birimlerinde bulduğunuz taşıma tasarruflu toplayıcıları saymaz. Her birinin kendine özgü özellikleri ve kısıtlamaları vardır.

Örneğin, dal hedef hesaplaması, tam bir kelimeye küçük bir sabit eklenmesini içerir; bu, iki tam kelimeyi bir araya getiren farklı bir toplayıcı tasarımı önerir. Benzer şekilde, kayan nokta ilavesi, bir döngüden daha az zaman alabilecek bir ilave sonrası yuvarlama adımı gerektirir, bu nedenle eklemeyi bitirmek için döngünün geri kalanını çalamamanızın bir nedeni yoktur.

Son olarak ve belki de en önemlisi, büyük oyuncular (örn. Intel, AMD, NVIDIA), bir kağıt ve / veya patent alabileceklerini düşünmedikçe, bariz nedenlerle düşük seviyeli uygulama ayrıntıları hakkında oldukça sıkı bir şekilde dururlar. O zaman bile, tersine mühendislik olmadan gerçekte ne yaptıklarından emin olamazsınız.

Bunu söyledikten sonra bildiğimiz birkaç şey var.

Farkına varmanız gereken en önemli şey, taşıma-gözetleme yöntemlerinin yapı taşları olduğu ve kendi başlarına yöntem olmadığıdır. Burada bir benzetme olabilir.

Algoritma sınıfları hakkında düşünürseniz, muhtemelen hızlı sıralama, birleştirme sıralaması, ekleme sıralaması gibi bir dizi sıralama algoritması öğrendiniz. Gerçek dünyada, sıralama bir performans darboğazı ise, iyi bir mühendis bunları "gerçek" bir türün inşa edilebileceği ilkel yapı taşları olarak düşünür.

Örneğin, GNU C ++ standart kitaplığındaki sıralama algoritması, aralıklar yeterince küçük olduğunda ekleme sıralama kullanarak hızlı sıralama kullanır. Ancak, birkaç geçişten sonra hızlı sıralama bölümlemenin patolojik davranışlara çarptığı görülüyorsa, yığın sıralamasına geri döner. Bu, endüstriyel güçte bir sıralama yapmak için üç farklı sıralama algoritmasıdır.

Aynı şey toplayıcı devreler için de geçerlidir. Örneğin, Pentium 4 tamsayı biriminin Kogge-Stone ve Brent-Kung'un bir karışımı olan bir Han-Carlson toplayıcı kullandığı bilinmektedir. (Han-Carlson özellikle ilginçtir, çünkü yayılma gecikmesi ve kalıp alanı arasındaki güç açısından oldukça verimli olan "tatlı bir nokta".

"Saf" taşıma-gözetleme başlıkları hala sentezlenmiş devrelerde (örn. Cadence veya Synopsys'e bir Verilog "+" operatörünü beslerseniz), el tasarımı söz konusu olduğunda, süperskalar çıkışları ile modern üst düzey CPU'lar sıralı yürütme motorları, tamsayı birimleri için biraz farklı bir tasarıma doğru ilerliyor gibi görünmektedir.

Spekülatif toplayıcılar, son derece düşük yayılma gecikmesine sahip olan devrelerdir, ancak sadece bir süre doğru çalışırlar (zamanın% 95'i tipiktir) ve spekülatif toplayıcının doğru sonucu döndürüp döndürmediğini çok az mantıkla söylemek mümkündür. Bu nedenle fikir, bir döngüde spekülatif bir ekleme ve taşıma-ileri okuma ekinin yarısını paralel olarak yapmaktır. Spekülatif toplayıcı doğru cevabı verdiyse, talimat yapılır. Aksi takdirde, boru hattını durdurun ve doğru eklemenin diğer yarısını yapın.

Yavaş yolun iki döngü alacağını bildiğiniz için, tasarımcılar genel kullanım için çok yavaş olsa bile daha fazla alan ve güç tasarruflu bir yöntem kullanabilirler.


6

Evet, birçok bilgisayar taşıma-ileriye yönelik ekleyiciler kullanır. Bazı eski mikroişlemcileri tersine değiştirdim ve bazı örnekler verebilirim.

Intel 8008'deki (ilk 8 bit işlemcileri) ALU, dinamik mantıkla uygulanan büyük bir taşıma-ileri okuma devresi içeriyordu. Bu devre, ALU'nun kendisi kadar kalıp alanı kapladı. Carry lookahead 8008 veri sayfasında gösterilmiştir , şekil 3. ALU için taşıma görünümlü diğer 1970'lerde işlemciler görmedim, bu yüzden 8008 bu konuda biraz sıra dışı.

6502, program sayacı (PC) artırıcısı için ilkel taşıma gözü kullanır. Bilgisayarın alt baytından bir taşıma olup olmadığını algılar ve bunu üst baytı artırmak için kullanır. Bu dalgalanma taşıma potansiyel olarak 16 bit 8 bit azaltır. 6502'nin ALU'su dalgalanma taşımasını kullanır, ancak taşıma mantığı bir invertörü yoldan kesip biraz daha hızlı yapan alternatif bitler için ters çevrilir.

Z-80, PC güncellemeleri, inc / dec talimatları ve bir döngü sayacı için kullanılan 16 bitlik bir artırıcı / azaltıcıya sahiptir. İki bitlik gruplar için taşımaların hesaplanması için bir taşıma-atlama yapısı kullanır. Ek olarak, 0-7, 7-11 ve 12-14 bitlerinden taşıma oluşturmak için bazı taşıma-ileriye bakar. Diğer taşıyıcılar dalgalanma taşıma ile hesaplanır ( ayrıntılar ). Z-80'in ALU'su şaşırtıcı bir şekilde 4 bittir, bu nedenle her 8 bitlik işlem ALU'dan iki geçiş yapar.

8085 ise, 16-bit artışlı / azaltıcı için dalgalanma taşıması kullanıyor. Ancak 6502 gibi, taşıma mantığını alternatif bitlerde ters çevirerek biraz hızlanır.

ARM-1 hiçbir taşıma-lookahead, sadece dalgalanma taşıma ile 32 bit ALU sahiptir. Ayrıca, taşıma işlemini alternatif bitlerde ters çevirme hilesini de kullanır.

Mini bilgisayar dünyasında, birçok işlemci, dahili taşıma ileriye sahip olan iyi bilinen 74181 4 bitlik ALU yongasından inşa edildi. Örnekler arasında Veri Genel Nova, Xerox Alto, VAX-11/780 ve TI-990 bulunur. (Daha uzun Wikipedia listesine bakın .) Bu kullanılan dalgalanmaların bazıları her bir 4 bit çip arasında taşınırken, bazıları tam ileri için 74182 taşıma ileri okuma yongasını kullanır.

Özetlemek gerekirse, farklı mikroişlemciler performans hedeflerine ve kritik yolda hangi işlemlerin olduğuna bağlı olarak çeşitli taşıma teknikleri kullanırlar. ALU, tam taşıma gözü (8008 gibi) kullanabilir veya hatta yarım boyutlu (Z-80 gibi) olabilir. Arttırıcı bir performans problemi olabilir, çünkü 8 bit işlemcide tipik olarak 16 bittir ve dalgalanma gecikmesinin iki katına neden olur. Arttırıcıda dalgalanma taşıma (8085), bir taşıma gözü (6502) veya birkaç taşıma gözü aşaması (Z-80) bulunabilir.

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.