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?
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?
Yanıtlar:
Bellek gecikmesi, bilgisayar mimarisi araştırmalarında çalışılan temel problemlerden biridir.
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.)
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.
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.
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.
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.