Bir işlemci frekansından daha fazla IPS'yi nasıl yürütebilir? [çiftleme]


14

Bu kafamı saran bir şey değildi. Hemen hemen her modern işlemci, frekansından saniyede daha fazla talimat yürütebilir.

Düşük sınıf işlemcilerin neden frekansından daha az IPS çalıştırabildiğini anlayabiliyorum. Örneğin, ATmega328 16 MHZ'de yaklaşık 16 MIPS yürütür (veya en azından bana söylenen budur) ve Z80 4 MHz'de 0,5 MIPS yürütür. Ancak Pentium 4 Extreme, 9,2 GIPS'den fazlasını yalnızca 3,2 GHz'de çalıştırabilir. Bu, saat döngüsü başına yaklaşık üç talimattır!

Bu nasıl yapılır ve neden AVR mikrodenetleyicileri gibi daha küçük işlemcilerde uygulanmaz ?

ATmega328 hariç tüm bilgilerimi buradan buldum .


3
Pipelineing, süper skaler mimari, sıra dışı yürütme, eşzamanlı çoklu kullanım, çok çekirdekli, vektör uzantısı (SSE, ..., AVX), önbellekleme ve benzeri gibi vızıltı kelimeleri için Wikipedia'ya göz atın. Tüm TÜFE değeri 1.0'dan düşük olabilir.
Paebbels

7
MIPS için değil, Pentium 4 için 9 GIPS demek istediniz değil mi?
Calimo

5
Kendi kendini tanıma: Bir CPU, döngü başına nasıl birden fazla talimat verebilir? Elektrik Mühendisliği Yığın Borsası'nda sorulmuştur (cevabım kabul edildi ve belki de çok yüksek oranda onaylandı).
Paul A. Clayton

Her zaman merak ettim, eğer düşündüğüm kadar yüksekse bir şeye oy vermemeliyim? Ya da bir gönderinin çabasının ve kalitesinin bir ödülü hak ettiğini düşünürsem daima vekalet etsin?
Peter Cordes

@PeterCordes Farklı oylama felsefeleri var. Bazıları "yararlı" iddiası tek kriterdir, diğerleri göreceli liyakat (cevaplar için) düşünür . Ben mutlak oy sayımı ("güzel", "iyi", "büyük" sonrası rozetleri bu tür ima gerekir) ve göreceli oy sayımı (sıralamaya cevap yardımcı olur) dikkate eğilimindedir. Şaşırtıcı bir şekilde Meta.SE'nin bu konuda fazla bir şey yok gibi görünüyor ve " Nasıl oy vermeliyim? " Diye bir cevabı bile yok!
Paul A. Clayton

Yanıtlar:


23

Bu, modern işlemcilerin özelliklerinin bir kombinasyonundan kaynaklanmaktadır.

Yüksek bir IPS'ye katkıda bulunan ilk şey, modern işlemcilerin bağımsız olarak çalışabilen birden fazla yürütme birimine sahip olmasıdır. Aşağıdaki görüntüde ( Wikipedia'dan ödünç alınmıştır : Intel Core Mikromimarisi ), altta tüm talimatları aynı anda uygulayabilen sekiz yürütme birimi (sarı renkte gösterilmiştir) olduğunu görebilirsiniz. Bu birimlerin hepsi aynı türden yönergeleri güvence altına alamaz, ancak en az 5'i ALU işlemi gerçekleştirebilir ve üç adet SSE özellikli birim vardır.

resim açıklamasını buraya girin

Uzun ile birleştiren talimat boru hattı verimli yığın talimatları (talimatları yürütmek için bu birimler için hazırlamasına olabilir bozuk gerekirse) modern işlemci herhangi bir zamanda anında talimatlar çok sayıda olabileceğini anlamına gelir.

Her talimatın yürütülmesi birkaç saat döngü sürebilir, ancak bunların yürütülmesini etkili bir şekilde paralel hale getirebiliyorsanız, işlemci karmaşıklığı ve termal çıktı pahasına kendinize büyük miktarda IPS sağlayabilirsiniz.

Bu büyük boru hatlarını talimatlarla dolu tutmak için talimatlar ve verilerle doldurulabilen büyük bir önbellek gerekir. Bu kalıbın boyutuna ve ayrıca işlemcinin ürettiği ısı miktarına katkıda bulunur.

Bunun daha küçük işlemcilerde yapılmamasının nedeni, işlem çekirdeği çevresinde gerekli olan kontrol mantığı miktarını, ayrıca gereken alan miktarını ve üretilen ısıyı önemli ölçüde arttırmasıdır. Küçük, düşük güçlü, son derece duyarlı bir işlemci istiyorsanız, gerçek fonksiyonel çekirdekleri çevreleyen çok fazla "ekstra" malzeme olmadan kısa bir boru hattı istersiniz. Bu nedenle, genellikle önbelleği en aza indirir, talimatları işlemek için gereken her bir birim türünden yalnızca biriyle sınırlar ve her parçanın karmaşıklığını azaltırlar.

Bunlar olabilir gibi daha büyük işlemci gibi karmaşık gibi küçük işlemci yapmak ve benzer bir performans elde, ama sonra güç çizmek ve soğutma gereksinimleri katlanarak artacaktır.


Özel yürütme birimlerinin ve birden fazlasının olduğunu asla bilmiyordum. Ama yine de, bir süperskalar Arduino'ya sahip olmak güzel olurdu. Daha fazla verim anlamına geliyorsa güç ve soğutma gereksinimlerini önemsemem. Cevap için teşekkürler.
Jaca

1
Süperskalar bir işlemci istiyorsanız, bir tane kullanın. Ancak Arduinos, süperskalar işlemcilerin güç ve soğutma gereksinimlerini (ve maliyetini ve karmaşıklığını) düşünen insanlar için bir yer işgal eder.
David Schwartz

4

Hayal etmek zor değil. Binlerce transistörü değiştirmek için tek bir döngü yeterlidir. Talimatlar paralel olarak sıralandığı sürece, hepsini gerçekleştirmek için bir döngü yeterli olabilir.

Kendimi açıklamaya çalışmaktan daha iyi, işte iyi bir başlangıç ​​noktası .


3

Mokubai'nin cevabından biraz daha temel almak için:

Superscalar CPU'lar, talimatlar arasındaki veri (ve diğer) bağımlılıklar için talimat akışını analiz eder. Birbirine bağlı olmayan talimatlar paralel olarak çalışabilir.

Tipik x86 masaüstü işlemciler her saat döngüsünde 16 veya 32B talimat alır. Intel, Core2'den bu yana her döngüde 4 talimat verebilir. (Veya 5, makro kaynaştırabilecek bir karşılaştırma ve dal varsa).

Pratikte CPU'ların, çalıştırdıkları koddan yaptıkları kadar komut düzeyinde paralellik çıkarma görevi hakkında nasıl ilerlediklerine ilişkin bağlantılar ve ayrıntılar için Mobukai'nin güzel cevabına bakın.

Ayrıca , kaputun altında ne olduğuna dair derin bir açıklama için http://www.realworldtech.com/sandy-bridge/ ve diğer CPU mimarileri için benzer makalelere bakın .


-2

Önceki cevaplar, bir kişinin işlemcinin "yönerge" tanımı ile nasıl daha fazla yönerge aldığını ve aslında sorgunun amacı olan bir hayal olduğunu gösterir.

Ancak bunun başka bir kaynağı, her "talimatın" aslında işlemci tarafından talimat girişi olarak kabul edilen belirli bir miktarda veri olmasıdır. Kaynağının sayımı işlemcinin talimat olarak gördüğü şeyi sayarsa, aşağıdakiler hiçbir şey eklemez. Ancak kaynağı bir insanın "talimat" dediği şeyin tamamını sayarsa: Her talimatın fiziksel olarak diğer talimatlar kadar uzun olmadığını ekleyin (biri 12 bayt, diğeri 56 bayt, vb.). Dolayısıyla, her döngüde 64 bayt malzeme "bir talimat" (veya 64 bayt'a çarpmadan önce mümkün olduğunca çok sayıda tam talimat) yüklerse ve bu 64 baytta altı talimat varsa, o zaman altı talimat (siz ve ben ) bu döngüde tamamlanacaktır.

Birçok çok temel talimat ("mantıklı" tanımımız), 8 baytlık talimat uzunluklarına sahip ilk günlerden kalanlar olduğundan ve çok temel talimatlar, tanım gereği, belki de orantısız bir şekilde kullanıldığından, bu daha fazla "talimatın" gerçekleştirilmesi için uzun bir yol olacaktır. sıklık izin veriyor gibi görünüyor.


Bu, CPU'ların gerçekte nasıl çalıştığına biraz yakın, ancak döngü başına birden fazla makine insns'i getirmek, süperskalar bir CPU'nun nasıl çalıştığının sadece bir parçasıdır. (ve ortalama insns uzunlukları x86 için 4 bayta benzer.) Derin boru hatları, şimdi getirilen talimatların 15 döngü boyunca (veya bir önbellek kaçırma tarafından tutulursa çok daha uzun süre çalıştırmayı bitiremeyebileceği anlamına gelir, ancak bağımlı olmayan talimatlar Açıklamanız boru hatlı bir tasarımı hiç tanımlamıyor. Ayrıca farkın 8bit 8086 add al, blile 80386 arasında ne düşündüğünü de net değil add eax, ebx.
Peter Cordes

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.