Ana bellek almayı beklerken işlemci ne yapar?


26

L1 ve l2 önbellek isteklerinin bir eksikliğe yol açtığını varsayarsak, işlemci ana belleğe erişilinceye kadar durur mu?

Başka bir konuya geçme fikrini duydum, eğer öyleyse oyalanmış ipliği uyandırmak için ne kullanılır?


4
Hangi araştırmayı yaptın? Bu kesinlikle mevcut olan bir bilgidir. Uzmanlara cevap vermeyi bırakacağım, ancak bir iş parçacığı anahtarının yapılacak faydalı bir şey olduğunu sanmıyorum. Genel olarak, bir CPU üzerindeki bağlamı değiştirmek birçok bellek erişimine neden olur (ve bu nedenle muhtemelen önbellek özleri). İşlemin yeniden sıralanması (boru hattının kullanılması) gibi bazı önlemler var, ancak durdurmanın başka seçeneği yok gibi görünüyor.
Raphael

@Raphael Sadece bilgisayar mimarisi kitapları okudum, Steve Furber'in ARM Sistem Üzerine Mimarisi, muhtemelen okuduğum en kapsamlı kitapçıktı. Ancak Bilgisayar Mimarisi: Nicel Bir Yaklaşım okumaya başladım. İplik değiştirme, OOE ve sıra dışı bellek işlemleri gibi durmalardan kaçınma tekniklerini tartışıyor, ancak modern tasarımların inceliklerini hakkında pek fazla bilgi vermese de, eski ders kitaplarının çoğunda olduğu gibi eski mimarileri de kapsar veya bu şeylerin nasıl olduğu konusunda belirsiz önerilerde bulunur birlikte uygulandı ve birlikte çalışıyor.
102948239408

Sorumu genişleterek, önbelleklerin ufacık gecikmelere sahip oldukları ve yanıtlarında belirleyici oldukları görülüyor, ancak en kötü durum senaryosunda fiziksel adres almak için sayfa tablosu yürüyüşü olması durumunda, bazıları ILP tarafından çıkartılan aynı iş parçacığından binlerce komut tamamlanabilir. İşlemcide başka bir iş parçacığı zamanlayabileceğine karar vermek için hangi donanım etkileşimlerinin meydana geldiği ve bu iş parçacığını uyandırmak için hangi iletişimin kullanılacağına karar verilmesi. Dahası, eğer OoOE, dişler arasında geçiş yaparken tam sonuç kuyruğuyla başa çıkmak için bir teknik varsa?
102948239408

1
Sorunuzdan, modern işlemcilerin ayrıntılarıyla ilgilendiğiniz belli değil. Sadece bu muhtemelen offtopik değil, aynı zamanda özel bilgi olabilir. Kavramlarla size yardımcı olabiliriz; bunlar muhtemelen yıllar içinde uygulamalardan daha az değişti. Sorunuza gelince, lütfen bildiklerinizi bir araya getirin ve belirli, kavramsal (veya referans isteği) bir soru formüle edin.
Raphael

1
Genel kavramlar hakkında cevap verdim, ancak yorumlarınıza bakılırsa, daha ileri değerlendirmelerden sonra olabilirsiniz. Ancak, daha gelişmiş cevaplar istiyorsanız, sorunuzu belirli mimarilere ve teknik türlerine daha belirgin hale getirmeniz gerekir.
Gilles 'SO- kötülük' dur

Yanıtlar:


28

Bellek gecikmesi, bilgisayar mimarisi araştırmalarında çalışılan temel problemlerden biridir.

Spekülatif Uygulama

Sıra dışı talimat sorunuyla spekülatif yürütme, genellikle L1 önbellek vuruşu sırasında gecikmeyi doldurmak için yapılacak faydalı işi bulabilir, ancak genellikle 10 veya 20 döngüden sonra işe yarar. Uzun süreli bir gecikme süresinde yapılabilecek iş miktarını artırmak için birkaç girişimde bulunuldu. Bir fikir değer tahmini yapmaya çalışmaktı (Lipasti, Wilkerson ve Shen, (ASPLOS-VII): 138-147, 1996). Bu fikir, akademik mimari araştırma çevrelerinde bir süredir çok moda oldu ancak pratikte çalışmaz gibi görünüyor. Tarihin çöp tenekesinden değer tahminini korumaya yönelik son gaz girişimi, doğrudan yürütme oldu.(Mutlu, Stark, Wilkerson ve Patt (HPCA-9): 129, 2003). Runahead uygulamasında değer tahminlerinin yanlış olacağını kabul edersiniz, ancak yine de spekülatif şekilde uygulayın ve daha sonra L2 önbelleği olacak olan şey için en azından bazı ön hazırlıklara başlayacağınız teorisine dayanarak tahminlere göre tüm çalışmaları atarsınız. özlüyor. Bu runahead o kadar enerji boşa harcıyor ki buna değmez.

Sanayide biraz çekişme yaratabilecek olan bu damardaki son bir yaklaşım, son derece uzun yeniden sipariş tamponları yaratmayı içerir. Talimatlar şube tahminine göre spekülatif olarak gerçekleştirilir, ancak değer tahmini yapılmaz. Bunun yerine, uzun gecikmeli bir yüke bağlı olan tüm talimatlar özledim ve yeniden sipariş arabelleğinde bekleyin. Ancak, yeniden sipariş arabelleği çok büyük olduğundan , şube öngörücüsü düzgün bir iş yapıyorsa, yönergeleri almaya devam edebilirsiniz, bazen daha sonra komut akışında faydalı iş bulabileceksiniz. Bu alanda etkili bir araştırma makalesi Sürekli Akış Boru Hatları idi.(Srinivasan, Rajwar, Akkary, Gandhi ve Upton (ASPLOS-XI): 107-119, 2004). (Yazarların hepsinin Intel’den olmasına rağmen, fikrin AMD’de daha etkili olacağına inanıyorum.)

Multi-Threading

Gecikme toleransı için birden fazla iş parçacığının kullanılması, sektörde çok daha büyük bir başarı ile çok daha uzun bir geçmişe sahiptir. Tüm başarılı sürümler çoklu okuma için donanım desteği kullanır. Bunun en basit (ve en başarılı) versiyonu genellikle FGMT ( ince taneli çoklu iş parçacığı ) veya iç içe geçmiş çoklu iş parçacığı olarak adlandırılır . Her donanım çekirdeği birden fazla iş parçacığı içeriğini destekler (bir içerik , esas olarak, işaretçi işaretçisi ve herhangi bir kapalı bayrak kaydı gibi kayıtlar da dahil olmak üzere kayıt durumudur). İnce taneli çoklu kullanım işlemci, her bir iplik işlenir içinde-sipariş. İşlemci, uzun gecikmeli yüklerde hangi dişlilerin durduğunu ve sonraki komutları için hazır olduklarını takip eder ve her çevrimi yapmak üzere hangi hazır parçayı çalıştıracağını seçmek için her döngüde basit bir FIFO zamanlama stratejisi kullanır. Bunun büyük bir örneği, Burton Smith'in HEP ​​işlemcileriydi (Burton Smith, aynı zamanda ince taneli çok iş parçacıklı bir işlemci olan Tera süperbilgisayarını kurmaya devam etti). Fakat fikir, 1960'larda daha da geriye gider, sanırım.

FGMT özellikle iş akışlarının akışında etkilidir. Tüm modern GPU'lar (grafik işlem birimleri), her çekirdeğin FGMT olduğu çok çekirdeklidir ve konsept, diğer bilgi işlem alanlarında da yaygın olarak kullanılmaktadır. Sun's T1 aynı zamanda çok çekirdekli FMGT idi ve Intel'in Xeon Phi'si (genellikle hala "MIC" olarak adlandırılan ve "Larabee" olarak adlandırılan işlemci).

Fikri eşzamanlı çoklu (Tullsen, Eggers'in ve Levy, (ISCA-22): 392-403, 1995) spekülatif yürütme donanım çoklu iş parçacığı birleştirir. İşlemcide birden fazla iş parçacığı içeriği var, ancak her iş parçacığı spekülatif ve sıra dışı çalıştırılıyor. Daha sofistike bir programlayıcı daha sonra yararlı işe yaraması muhtemel olan iplikten almak için çeşitli buluşsal yöntemleri kullanabilir ( Malik, Agarwal, Dhar ve Frank, (HPCA-14: 50-61), 2008 ). Belli bir büyük yarıiletken şirketi , eş zamanlı çoklu okuma için hiper-diş terimini kullanmaya başladı ve bu isim bugünlerde en yaygın kullanılan isim olarak görünüyor.

Düşük seviyeli mikro mimari endişeler

Yorumlarınızı okuduktan sonra, işlemci ve bellek arasında devam eden sinyale de ilgi duyduğunuzu fark ettim. Modern önbellekler genellikle birden fazla bayanın aynı anda olağanüstü olmasını sağlar. Buna Kilitlenmeyen önbellek adı verilir (Kroft, (ISCA-8): 81-87, 1981). (Ancak, makalenin çevrimiçi olarak bulunması zor ve okunması biraz zor. Kısa cevap: çok fazla kitap tutma var ama bununla başa çıkıyorsunuz. Donanım kitap tutma yapısına MSHR (bilgi eksik / durum tutan kayıt defteri adı verilir) 1984 yılında verdiği yazıya Kroft adını verdi.


Gerçekten kapsamlı cevaplar sayesinde, kilitlenmeyen önbelleğe bakmaya çalışacağım. Kötü ifade edilen sorum, işlemcilerin ana bellek erişimi sırasında işlemcilerin yük ve mağazalarla devam ettiğini ve bunu yapmak için hangi mikro mimari tekniklerin kullanıldığını doğrulamaya çalışıyordu.
102948239408

+1, 1. Round-robin çizelgeleme kullanılmazsa, gerçekten varil işlemi var mı? Wikipedia FGMT ile eşanlamlı hale getirir. ("Varil işlemci" yuvarlama robinine atlamayı kabul etmeyi kabul edebilirim, ancak analoji eksik bir çıta (cf. hazır değil ipli) olarak kırar, bir varilin çevresini daraltmaz. ? CDC 6600 için nadir belki periferik işlemci onlar bir döngü israf -çünkü ancak basitleştirmek donanım yapar) SoEMT 2. bir söz Itanium Hyper-Threading ve IBM'in Northstar vd gibi özellikle soru verilen uygun görünüyor...
Paul A. Clayton,

@ 102948239408, google için google'da olabilecek başka bir şey "özledim altında vur" ve "özledim altında özledim" gibi terimlerdir (diğer seçenek "özledim altında durma" dır, ancak denedim ve işe yarar bir şey döndürmüyor gibi görünüyor.) Bunlar şu anda (bazı) mimarlar tarafından önbelleğin izin verebileceği farklı seçenekler için kullanılan terimler.
Dolaşan Mantık

@ PaulA.Clayton, terminoloji kesinlikle benim güçlü takımım değil. Varil işlemenin yuvarlak-robin anlamına gelmesi gerektiği konusunda size katılıyorum. Ancak şu anlama gelen başka bir terim düşünemiyorum: bir grup sıralı iş parçacığının döngüden serpiştirilmesi (bu GPU'ların, Xeon Phi ve Sun T1'in yaptığı şeydir). FGMT mi? FGMT’yi her zaman SMT’yi de dahil olarak düşündüm (yani, dişlerin sıralı olarak yürütülmesi gerektiğini belirtmiyor) ama belki de FGMT bu durumda “namlu işlemciden” daha iyidir?
Wandering Logic,

Wikipedia'nın Barrel işlemci makalesinde şunlar yazıyor: "aynı zamanda" birleştirilmiş "veya" ince taneli "geçici çok iş parçacıklı" olarak da bilinir, bu nedenle IMT ve FGMT en azından tanınan terimlerdir. Sanırım "ince taneli" kelimesini "serpiştirilmiş" den daha çok okudum, fakat serpiştirilmiş nadir değil. Genellikle FG kullandım (bana "taneli" demek, SMT'nin sağladığından daha fazla ayırma anlamına gelir); FG serpiştirmenin SoEMT'ye uygulayabileceği avantajına sahiptir. Bunun sadece sırıtarak (dişlerimle) ve dayanmak zorunda kalacağım "namlu işlemcisinin" kullanımındaki bir değişiklik olduğunu düşünüyorum.
Paul A. Clayton

16

Kısa cevap: hiçbir şey, işlemci durur.

Çok fazla olasılık yok. Farklı bir göreve geçmek iki nedenden ötürü bir seçenek değildir. Bu pahalı bir işlemdir ve mevcut görev ve diğer görev önbellekteki alan için rekabet ettiğinden, diğer göreve geçmek ana bellek erişimini gerektirebilir ve böylece orijinal göreve geri dönebilir. Dahası, bunun işletim sistemini içermesi gerekecekti, bu yüzden işlemcinin bir çeşit kesinti veya tuzağı tetiklemesi gerekecekti - aslında işlemci bir çekirdek koduna geçecekti.

İşlemci dururken, zamanlayıcı çalışmaya devam eder, böylece bir zamanlayıcı kesintisi olabilir veya diğer çevre birimlerinden bir kesme olabilir. Bu nedenle, bir içerik anahtarının bir ana bellek erişimi sırasında önbellek erişiminden daha fazla gerçekleşmesi daha muhtemeldir, ancak yalnızca daha uzun sürdüğü için.

Bununla birlikte, modern bilgisayarlar işlemcide boşa harcanan zamanı azaltmak için ana belleği bekleyen işlemcileri içerir. Durma gerçekleşir, ancak yalnızca önlenemediğinde.

Tekniklerden biri spekülatif alımlardır : işlemci hangi bellek konumuna erişileceğini tahmin etmeye çalışır ve vaktinden önce önbelleğe almasını sağlar. Örneğin, bir bellek bloğu üzerindeki döngüler yaygındır; bu nedenle, 0x12340000, 0x12340010 ve 0x12340020 bellek adresleri için önbellek hatları yüklenmişse, satırı 0x12340030 için yüklemek iyi bir fikir olabilir. Derleyici, yalnızca ana bellekten önbelleğe bir işlemci kaydına veri aktarmaları dışında, yükler gibi önceden alma yönergeleri oluşturarak yardımcı olabilir .

Diğer bir teknik spekülatif uygulamadır . İşlemci, yükleme yapılmadan önce bir sonraki talimatı vermeye başlar. Bu , talimatların pipeline edilmesi nedeniyle doğal olarak gerçekleşir . Yalnızca yüklü değere bağlı olmayan talimatlar bu şekilde uygulanabilir: işlemci bir bağımlılık analizi yapmalıdır. Koşullu talimatlar için (örneğin r1 yükü; eğer r1 branch 0 ise dal), işlemciler değerin ne olacağını tahmin etmek için dal tahmin sezgiselini kullanır . Bir yük sonrası spekülatif uygulamanın, yükün iptal edilmesine neden olması durumunda geri sarılması gerekebilir.

Itanium gibi bazı mimariler , talimatların varsayılan olarak yeniden sıralanmasına olanak sağlayarak talimatların uygun bir sırada yürütülmesini kolaylaştırır: birbiri ardına semantik olarak yürütülen bir dizi temel komut dizisi yerine, programlar çok uzun komut kelimelerinden oluşur : tek bir komut içerir. İşlemcinin farklı bileşenleriyle paralel olarak gerçekleştirilecek birçok işlem.

Başka bir iş parçacığına geçmek , high-end x86 işlemcilerinde bulunan hiper - işlemede olur . Bu bir donanım tasarım tekniğidir: her işlemci çekirdeği iki ayrı kayıt bankası içerir (her biri bir görev bağlamına karşılık gelir), ancak tek bir diğer eleman örneği içerir, böylece iki bağımsız çalıştırma iş parçacığını destekleyebilir, bir zaman. Bir iplik dururken, diğer iplik ilerler. Yazılımın bakış açısına göre iki bağımsız işlemci var; sadece bu işlemciler kaputun altında birçok bileşeni paylaşıyor olabilir.

Değiştirme, bellek önbellek hiyerarşisinde bir seviye dahadır: ana bellek, takas alanı için önbellek olarak görülebilir. Değiştirme ile, mekanizmalar ve performans oranları farklıdır. Bir görevin takas işleminden yüklenmesi için veri gerekiyorsa, load komutu bir sayfayı RAM'e tahsis etmek ve içeriğini diskten yüklemek için çekirdek kodunu çalıştıran bir tuzağı tetikler. Bu olurken, çekirdek başka bir göreve geçmeye karar verebilir.


Birinci ve ikinci-son paragrafa zıt olarak, "püf noktası" hiper-iş parçacığında hiçbir gerçek bağlam anahtarının olması gerekmiyor, değil mi? CPU aynı anda iki bağlamı da tamamen koruyor.
Raphael

1
@Raphael Right: Yazılım söz konusu olduğunda, performans dışında her şey için iki CPU vardır.
Gilles 'SO- kötülük' dur

Hiper iş parçacıklı bir işlemcide birçok yarı bağımsız yürütme birimi vardır (tam sayı ve kayan nokta ekleri, çarpanlar, vb.) Ve her iki bağlamın da aynı yürütme birimlerini aynı anda kullanabileceğini düşünüyorum - bu konuda% 100 emin değil.
Russell Borogove

Bile olmayan hiper CPU'lar olabileceğinden Evet @RussellBorogove, bunu söz etmedi birden ALU / FPU / ... ve tersine ayrı çekirdekler bazen paylaşmak FPU vs.
Gilles 'SO dur olma kötülük'

5

Bu sorunun cevabı söz konusu mimariye göre değişecektir. Pek çok CPU dururken (ARM, x86 hiper iş parçacığı olmadan vb.) İş parçacığı değiştirmek çok uzun sürdüğü için, her mimar tarafından uygulanan yaklaşım bu değildir. Bazı mimarilerde, bir CPU'da programlanan her iş parçacığının kendi bağımsız kayıt dosyası vardır; bu nedenle işlemci, bellek erişiminde beklemeyen bir iş parçacığından işleri yürütebilir. Anladığım kadarıyla, bu, x86 hiper-okumanın ne yaptığını (sadece 2 iş parçacığı kullanarak), sınırlı bir ölçüde, ancak GPGPU’da çok daha yaygınmimariler. Özel CUDA örneğinde, en az onlarca, yüzlerce olmasa da, iplik çözgüleri genellikle belirli bir işlemciye herhangi bir zamanda, her bir iş parçacığı (yüzlerce ya da binlerce) kendi kayıt defterine sahipken yüklenir. Bu, belirli bir iş parçacığı bir bellek erişimi yayınladığında mimarinin bir sonraki döngüdeki başka bir iş parçacığından bir talimat yürütmesini sağlar. Bu nedenle, yeterli sayıda iş parçacığı yüklendiği sürece, işlemci çekirdeği hiçbir zaman bellek erişimi için boşta kalmaz. Daha fazla bilgi için Performans Kuralları ve Bellek Hiyerarşisine bakın.

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.