“Döngü Başına Talimat” nedir?


23

İşlemcilerin nasıl çalıştığı hakkında biraz daha fazla şey öğrendim, ancak döngü başına talimatlarla ilgili doğru bir cevap bulamadım.

Örneğin, dört çekirdekli bir işlemcinin döngü başına dört komut çalıştırabileceği izlenimindeydim, bu yüzden 2GHz'de çalışan dört çekirdekli bir işlemci saniyede 8 milyar işlem yapacaktı. Bu böyle mi?

Bazı şeyleri aşırı basitleştirdiğine eminim, ancak kendimi düzeltmek için kullanabileceğim bir rehber veya başka bir şey varsa, kesinlikle fikirlere açığım.


Hayır, durum böyle değil. Modern x86 CPU'lar ideal koşullar altında her bir döngü için çekirdek başına üç talimat sürebilirken, bazı talimatlar onlarca döngü gerektirebilir.
David Schwartz

Yanıtlar:


22

Bakmanız gereken anahtar kelimeler, muhtemelen CISC , RISC ve süperskalar mimarisidir .

CISC

Bir CISC mimarisinde (x86, 68000, VAX) bir komut güçlüdür, ancak işlenmesi için birden fazla döngü gerekir. Eski mimarilerde döngü sayısı sabitlendi, günümüzde talimat başına döngü sayısı genellikle çeşitli faktörlere (önbellek isabet / kayıp, dal tahmini vb.) Bağlıdır. Orada tablolar o şeyleri bakmak için. Genellikle, belirli şartlar altında belirli bir talimatın ne kadar zaman aldığını ölçmek için de kolaylıklar vardır ( performans sayaçlarına bakınız ).

Intel'in ayrıntılarıyla ilgileniyorsanız, Intel 64 ve IA-32 Optimizasyon Referans Kılavuzu çok iyi bir okumadır.

RISC

RISC (ARM, PowerPC, SPARC) mimarisi, genellikle çok basit bir komutun sadece birkaç (genellikle sadece bir) döngü aldığı anlamına gelir.

Süperscalar

Ancak CISC veya RISC'den bağımsız olarak, süperskalar mimarisi var. CPU bir talimatı birbiri ardına işlemiyor ama aynı anda birçok montaj üzerinde çalışıyor, bir montaj hattı gibi.

Sonuç şudur: Eğer programınızın her talimatı için döngüleri basitçe arar ve sonra hepsini eklerseniz, en üste bir sayı çıkar. Tek bir çekirdekli RISC işlemciniz olduğunu varsayalım. Tek bir talimatın işlenme süresi hiçbir zaman bir devrin zamanından daha az olamaz, ancak genel işlem hacmi her döngü için birkaç talimat olabilir.


9
Bana göre, "montaj hattı" analojisi süperskalar bir mimari değil, sadece basit bir boru hattı önermektedir. Superscalar, işlem hacmini iyileştirmek için CPU donanım parçalarının (örneğin, bir darboğaz olan boru hattının bir aşaması) çoğaltılmasını içerir.
sblair

2
Kısalık için ekliyorum: RISC = azaltılmış komut seti; CISC = karmaşık komut seti. İyi açıklama, Ludwig'in önbellek isabet / kayıp oranını göstermesi ve (nihayetinde) TLB'yi göstermesi için. Mikroişlemci mimarisini açıklamak kolay değil, özellikle hepsini tek bir (oldukça kompakt) direğe sıkıştırmak kolay değil! :)
osij2is

1
Duyduğuma göre, bu günlerde CPU'lar zamanlarının çoğunu ana bellekten gelmek için iş başında bekleyerek geçiriyorlar. En azından, neden bir CPU'da daha fazla yürütme çekirdeği bulunmadığını sorduğumda aldığım yanıt buydu.
surfasb

32

Düşünmekten hoşlandığım şey çamaşırhane benzetmesi. İşlemci talimatları çamaşır yükü gibidir. Her yük için hem yıkayıcıyı hem de kurutucuyu kullanmanız gerekir. Diyelim ki her birinin koşması 30 dakika sürüyor. Bu saat döngüsüdür. Eski CPU'lar yıkayıcıyı çalıştırır, ardından kurutucuyu çalıştırır, her çamaşır yıkamasını tamamlamak için her zaman 60 dakika (2 döngü) alır.

Boru hattı : Her ikisini aynı anda kullandığınızda bir boru hattı vardır - bir yükü yıkarsınız, sonra kururken bir sonraki yükü yıkarsınız. İlk yükün tamamlanması 2 devir alır, ancak ikinci yük 1 döngüden sonra biter. Bu nedenle çoğu yük, ilk yük dışında sadece 1 devire ihtiyaç duyar.

Superscalar: Tüm çamaşırları çamaşırhaneye götür. 2 pul alın ve ikisini de yükleyin. Tamamlandıklarında 2 kurutucu bulun ve ikisini de kullanın. Şimdi 2 yükü 60 dakikada yıkayıp kurulayabilirsiniz. Bu 2 döngüde 2 yük. Her yük hala 2 döngü alıyor, ancak şimdi daha fazlasını yapabilirsiniz. Ortalama süre artık her döngü için 1 yük.

Borulu Süperskalar: İlk 2 yükü yıkayın, daha sonra bunlar kurutulurken yıkayıcıları sonraki 2 yüke yükleyin. Şimdi, ilk 2 yük hala 2 döngü alıyor ve ardından bir sonraki 2 döngü bir sonraki döngüden sonra bitiyor. Böylece, çoğu zaman, her döngüde 2 yükü tamamlarsınız.

Çoklu çekirdekler: Çamaşırlarınızın yarısını annenize verin, ayrıca 2 çamaşır makinesi ve 2 kurutma makinesi var. İkiniz birlikte çalışırken, iki kat daha fazlasını yapabilirsiniz. Bu süperskalara benzer, ancak biraz farklıdır. Tüm çamaşırları kendiniz için ve makinenizden kendinize taşımanız yerine, sizinle aynı anda yapabilir.

Bu harika, daha hızlı makineler oluşturmak zorunda kalmadan, aynı süre içinde öncekinden sekiz kat daha fazla çamaşır yıkama yapabiliriz . (Saat hızını ikiye katlayın: Çalışması sadece 15 dakika süren çamaşır makineleri.)

Şimdi, işlerin nasıl ters gittiğinden bahsedelim:

Boru hattı köpüğü: Yıkamada çıkmayan bir leke var, bu yüzden tekrar yıkamaya karar veriyorsunuz. Şimdi kurutucu orada oturuyor ve bir şeyler yapmasını bekliyor.

Önbellek Bayan: Kirli çamaşırları veren kamyon trafikte sıkışmış. Şimdi 2 rondela ve 2 kurutucunuz var, fakat beklemeniz gerekecek bir işiniz yok.

İşlerin ne sıklıkla yanlış gittiğine bağlı olarak, her döngüde her zaman 4 yük elde edemeyiz, bu nedenle yapılan işin gerçek miktarı değişebilir.

Şube Tahmini: Peki, daha sonra bunları lekelemeniz durumunda temiz giysilerinizde çamaşır yıkamayı başlatırsınız, böylece zaten temiz olurlar ... tamam, analojinin parçalandığı yer ...


Güzel benzetme. Onu çalacağım.
dmckee

6
Ve hiper-diş sürmek, aynı çamaşırhanede yıkama yapan birkaç kişinin olması gibi.
Ronald Pottol

1
Şube Tahmini: gelecek hafta içinde ihtiyaç duyacağınızı düşündüğünüz çamaşırları yıkamaktasınız
Akash

2
Hyperthreading: başkalarının çamaşırlarını kabul etmeye başlar ve sahip olduğunuz çamaşır makinesi sayısını bildirirsiniz (1). Kısa süre sonra, çamaşır makinenizin yıkadığınız pantolondan daha fazlasına yer açtığını fark edin, sadece bir çift pantolon değil, daha küçük bir şey. Demek biraz da çorap giydin. Şimdi 2 çamaşır makinesinin reklamını yapıyorsunuz ve insanların her zaman daha küçük parçalarla "delikleri doldurmak" için çamaşırlarınızı bırakacağını umuyorsunuz. Tam ony kotu bir kot pantolonla geldiğinde ve 1 çift çorap da eşyalarını düşürdüğünde, her zamanki gibi yavaş.
Florenz Kley

@Akash Henüz durumda leke olmayan çamaşırları yıkıyor musun?
Kevin Panko

3

Tam olarak değil. Bahsettiğiniz döngü saat döngüsü ve çoğu modern işlemci boru hattından bu yana, 1 komutun yürütülmesi için birkaç saat döngüsü alıyor. (Bu iyi bir şeydir çünkü diğer talimatların 1. talimat bitmeden önce bile uygulanmaya başlayabilmesine izin verir.) En ideal koşul varsayalım, muhtemelen 8 milyar IPC civarında olacaktır, ancak her şey bağımlılıklar, boru hattındaki kabarcıklar gibi olur. , şubeler vb. her zaman işe yaramaz.

Üzgünüz, bu doğru bir cevap için çok karmaşık. Jon Stokes bunu açıklamakta başarılı oluyor. bu makale .


2

Her bir komutun çevrim zamanını arayabildiği (hatta ezberleyebileceği) ve belirli bir kod bitiminin bitmesi için kaç saat alacağını bildiği günler, yüksek kaliteli cipsler için uzun zamandır mikro-kontrol). Modern, genel amaçlı bir CPU çekirdeği, birden fazla boru hattında birkaç farklı yürütme ünitesinin birden fazla kopyasına sahip olabilir, kendi mantığına sahip çok aşamalı bir bellek önbelleğine erişebilir, ayrıca şube tahmini ve spekülatif yürütme kabiliyetine sahip olabilir. Tek bir kalıpta birden fazla çekirdeğe sahip olmak, önbellek tutarlılık mantığında ve diğer karmaşıklıklarda sürüklenir.

Bu nedenle kısa cevap: daha fazla çekirdek, işlerin yapılması için daha fazla kapasite anlamına gelir, ancak iyi ve tahmin edilebilir bir şekilde değil .


1

Ludwig, CISC ve RISC arasındaki farkı açıkladı, ancak RISC komutlarının basit ve hızlı olmasına rağmen bireysel olarak çok az şey yaptıklarını ve bu yüzden CISC işlemcideki tek bir talimatla aynı şeyi yapmak için birkaçını birbirine bağlamanız gerektiğini belirtmeyi unuttum. Sonuç olarak, bazı RISC talimatları daha hızlı olacak, diğerleri olmayacak.


0

Döngüler, çekirdek bir kavramdan daha fazlasıdır. Her bir çekirdeğin paralel olarak kendi döngüleri vardır.

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.