Birden fazla CPU / çekirdek aynı RAM'e aynı anda erişebilir mi?


16

Bu olacağını tahmin ediyorum:

  1. İki çekirdek RAM'de aynı adrese erişmeye çalışırsa , birinin diğerinin RAM'e erişmesini beklemesi gerekir . İkinci kendi ilgili ulaşmak bu yüzden her bir çekirdeğin aynı adrese erişim çalışacaktı o zaman, yine bu RAM önbelleğe sahip olabilir , aynı anda önbellekleri .

  2. İki çekirdek aynı RAM'deki farklı adreslere erişmeye çalışırsa , birinin diğerinin RAM'e erişmesini beklemesi gerekir .

Başka bir deyişle, RAM yoğun programlama görevleri için, çoklu işlemin, çekirdekte birden çok kez RAM'de aynı adresten okumayı içermediği sürece çok yardımcı olmayacağını hayal ediyorum.

Peki, birden fazla CPU / çekirdek aynı RAM'e aynı anda erişebilir mi, yoksa doğru dediğim gibi mi?


Bahsettiğiniz donanım seviyesiyle konuşamıyorum, ancak koç yoğun görevlerin kullanımı bölerek çoklu işlemlerle yardımcı olabileceğini söyleyebilirim; yani, işleme koyulması gereken ram'da 500mb veriye sahipseniz, bu veri / ram'ı 250mb bir proc'a ve 250mb'yi diğerine verin ve olası iş hacminizi etkili bir şekilde iki katına çıkardınız (ram bant genişliği kısıtlamalarına dayanmaz). Donanımın bunu yapıp yapamayacağı dışında, aynı ram adresine erişen birden fazla işlemciye sahip olmak gerçekten kötü bir fikirdir ve çoğu çok-proc kod titizlikle bundan kaçınmaya çalışır.
Jimmy Hoffa

1
@JimmyHoffa Ancak RAM bant genişliği kısıtlamaları tam olarak bahsettiği şeydir (varsayım, görevin belleğe bağlı olduğu varsayımıdır).

@Jimmy Aynı RAM adresinden okumaya çalışan iki işlemciyle ilgili herhangi bir sorun görmüyorum. Sadece aynı anda yazmaya çalışırlarsa bir sorun görürdüm.
Kayıp Hobbit

1
özellikle birlikte çalıştığım çok çekirdekli işlemci, çekirdekler yerel önbelleklerinin ötesinde bir şey "bilmiyordu"; paylaşılan önbellek ile senkronize edilmesi gereken şeyler, belirtilen sayıda işlemci döngüsünde bunlara şeffaf bir şekilde yapılıyordu; Bunu hesaba katmaya istekli programcı nop, montaj kodunda gerekli miktarda s'yi manuel olarak ekledi
gnat

2
Kısa yanıt: sistem veri yolu mimarinize, önbellek tutarlılık protokolüne, DDR denetleyicinizdeki bağlantı noktalarının sayısına ve DDR denetleyici sayısına bağlıdır. Uzun yanıt sisteminizin veri sayfasındadır.
SK-logic

Yanıtlar:


11

Özet: Bellek erişimi yeterliyse, tek bir çekirdeğin bellek veri yolunu doyurması genellikle mümkündür.

Makinenizin bellek bant genişliğini belirlerseniz, tek iş parçacıklı bir işlemin bunu gerçekten başarabildiğini ve etkin değilse bant genişliği kullanımının işlemci sayısı ile nasıl ölçeklendiğini görebilmelisiniz.


Ayrıntılar kullandığınız mimariye bağlı olacaktır. Modern SMP ve SDRAM gibi bir şey varsayarsak:

  1. İki çekirdek RAM'de aynı adrese erişmeye çalıştıysa ...

    birkaç yoldan gidebilir:

    • ikisi de aynı anda okumak istiyor:

      • aynı yongadaki iki çekirdek muhtemelen bir düzeyde (2 veya 3) bir ara önbellek paylaşacaktır, bu nedenle okuma yalnızca bir kez yapılacaktır. Modern bir mimaride, her çekirdek, önbellek hattı hazır olana kadar bir veya daha fazla boru hattından µ-op'ları yürütmeye devam edebilir
      • farklı yongalardaki iki çekirdek bir önbelleği paylaşmayabilir, ancak yine de otobüse erişimi koordine etmelidir: ideal olarak, hangi çip okuma yapmadıysa , cevabı snoop eder
    • eğer ikisi de yazmak istiyorsa:

      • aynı çip üzerindeki iki çekirdek sadece aynı önbelleğe yazıyor olacak ve bunun RAM'e yalnızca bir kez temizlenmesi gerekiyor. Aslında, bellek her önbellek satırından okunup RAM'e yazılacağından, farklı ancak yeterince yakın adreslerde yazma işlemleri RAM'e tek bir yazma olarak birleştirilebilir

      • farklı yongalardaki iki çekirdeğin bir çatışması vardır ve önbellek satırının chip1 tarafından RAM'e geri yazılması, chip2'nin önbelleğine getirilmesi, değiştirilmesi ve daha sonra tekrar yazılması gerekir (yazma / getirmenin gözetleme ile birleştirilip birleştirilemeyeceği hakkında bir fikir yoktur)

  2. İki çekirdek farklı adreslere erişmeye çalıştıysa ...

    Bir İçin Tek erişimi, CAS gecikme aracı iki operasyon potansiyel olarak otobüs boşta olsaydı daha (uzun ya da belki sadece küçük) artık almak üzere ayrılabilecek edilebilir.


Başka bir liste öğesi, çekirdeklerden biri DMA aktarımını başlattığında, diğer çekirdek hedef alanda pok yaparken.
ott--

7

Peki, birden fazla CPU / çekirdek aynı RAM'e aynı anda erişebilir mi, yoksa doğru dediğim gibi mi?

Her biri kendine has özelliklere sahip birçok farklı makine mimarisi var. Çoklu İşlem Tek Veri için bir çok işlemcili makine kategorisine MISD denir ve bu tür makineler aynı anda birden fazla işlemciye aynı verileri sağlamak üzere tasarlanmıştır. SIMD mimarileri (Tek Yönlü Çoklu Veri) olarak bilinen ilgili bir makine sınıfı çok daha yaygındır ve aynı anda aynı belleğe erişim sağlar, ancak bellek veri yerine talimatlar içerir. Hem MIMD hem de SIMD'de "erişim" okuma erişimi anlamına gelir - iki ünite aynı yere aynı anda yazmaya çalışırsa karşılaşacağınız sorunu hayal edebilirsiniz!


3

Yanıtların çoğu yazılım ve / veya donanım modelinin yanından yaklaşsa da, en temiz yol fiziksel RAM yongalarının nasıl çalıştığını düşünmektir. (Önbellek, işlemci ve bellek arasında bulunur ve sadece aynı adres veriyolunu kullanır ve işlemi işlemci için tamamen şeffaftır.) RAM yongalarının, gelen bellek hücresinin adresini alan tek bir adres kod çözücüsü vardır. adres yolu (ve benzer şekilde bir veri yolu, içeri veya dışarı). Mevcut bellekler "tek işlemci yaklaşımı" ile oluşturulmuştur, yani bir işlemci bir veri yolu üzerinden bir bellek yongasına bağlanmıştır. Diğer bir deyişle, bu "von Neumann darboğaz" dır, çünkü her bir talimatın belleğe en az bir kez başvurması gerekir. Bu nedenle, bir kabloda (veya kablolarda, diğer bir deyişle veri yolunda) aynı anda yalnızca bir sinyal olabilir, böylece RAM yongası bir seferde bir hücre adresi alabilir. İki çekirdeğin adres veriyoluna aynı adresi verdiğinden emin olana kadar, iki farklı veri yolu sürücüsünün (çekirdek gibi) eşzamanlı veri yolu erişimi fiziksel olarak mümkün değildir. (Ve eğer aynıysa, gereksizdir).

Gerisi donanım ivmesi. Tutarlılık veriyolu, önbellek, SIMD erişimi, vb. Bahsedilen hızlandırıcılar, adres veri yolunu özel olarak kullanma mücadelesini kapsayabilir ve programlama modellerinin sorunuzla ilgisi yoktur. Ayrıca, eşzamanlı erişimin "özel adres alanı" soyutlamasına da aykırı olacağını unutmayın.

Yani, sorularınız için: ne aynı ne de farklı adreslerle aynı anda doğrudan RAM erişimi mümkün değildir. Önbellek kullanımı bu gerçeği kapsayabilir ve bazı durumlarda görünüşte aynı anda erişime izin verebilir. Bu, önbellek düzeyine ve yapının yanı sıra verilerinizin uzamsal ve zamansal konumuna bağlıdır. Ve evet, haklısınız: gelişmiş RAM erişimi olmadan çoklu (çekirdek) işleme, RAM yoğun uygulamalar için fazla yardımcı olmaz.

Daha iyi anlamak için: Doğrudan Bellek Erişiminin nasıl çalıştığını hatırlayın. Hem CPU hem de DMA cihazı veri yoluna adres koyabilir, bu nedenle veriyolunun eşzamanlı kullanımından birbirini dışlaması gerekir.


1

Fiziksel RAM'i umursamazsınız, uygulamada sanal bellek ve adres alanı ( işlemlerin veya iş parçacıklarının (aynı işlemin tüm iş parçacıkları ortak bir adres alanını paylaşır)) adres alanına daha fazla önem verirsiniz .

Tabii ki çok çekirdekli bir işletim sistemi çekirdeği kodluyorsanız, RAM ve önbellek tutarlılığını çok önemsersiniz.

Çoğu çok çekirdekli işlemcinin bir çeşit önbellek tutarlılık mekanizması vardır. Ayrıntılar işlemciye özeldir. İşlemci CPU önbellekleri kullandığından , bazen işlemcinin birkaç çekirdeği aynı bellek konumuna aynı anda erişiyormuş gibi davranır.

C11 veya C ++ 11 gibi son endüstriyel dil standartları bazı (çok iş parçacıklı) bellek modeline sahiptir .


0

Modern CPU'lar maksimum veri aktarım bant genişliği elde etmek için fiziksel olarak harici bellek cihazlarına bağlıdır. Bu, yüksek aktarım hızlarını sürdürmek için gerekli olan sinyal bütünlüğü gerekliliklerinden (iz uzunluğu, sonlandırma, saat eğimi vb.) Kaynaklanmaktadır. Örneğin, çok işlemcili bir anakartta, her işlemcinin özel bir DIMM yuvası seti vardır. Hangi yazılım programcılarının düşünebileceğinden bağımsız olarak, bir CPU başka bir CPU'nun harici bellek verilerine erişemez. İşletim sistemi çekirdeği, Hipervizör, veri düzlemi çekirdeği veya başka bir düzeyde olsun, sistemin bellek yönetim yazılımı CPUlar arası bellek veri aktarımını yönetir.


1
bu yazıyı okumak oldukça zor (metnin duvarı). Sakıncası var düzenleyebilir daha iyi bir şekle ing?
gnat
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.