2010-01-26 14 views
10

cache-coherentnon-uniform memory access (NUMA), yani her işlemci için ayrı bir RAM ile ayrı "northbridges" içeren bir çok işlemci kartım varsa, herhangi bir derleyici, verileri yerel iş parçacıkları üzerinde çalışan işlemlerin çoğunlukla alındığı şekilde farklı bellek sistemlerinde otomatik olarak nasıl dağıtılacağını bilir iş parçacığı ile ilişkili RAM'in verileri iş parçacığı üzerinde çalışıyor?gcc, icc veya Microsoft'un C/C++ derleyicisi NUMA hakkında bir şeyleri destekliyor mu?

İşlemciye 1 GB eklendiğinde 1, işlemci 1'e 1 GB eklenmiş bir kurulumum var, ve c. 4 işlemciye kadar. coherent memory space'da, 1. işlemcideki RAM için fiziksel bellek 0 ila 1GB-1 adresleridir. İkinci işlemci için 1GB ila 2GB-1, vb.

Herhangi bir derleyici, ya da belki de malloc, belirli bir çekirdek üzerindeki bir işlem tarafından o çekirdekle ilişkili fiziksel RAM'e tahsis edilen yeni belleği ilişkilendirir mi?

+0

Faiz dışı, pano üreticisi kimdir? –

+0

Bu gibi bir soruyu sordum, ancak asıl sorunum 1 ölçeğin bir dizi çekirdeği ve farklı bellek bölgeleri için çipin farklı bölümlerindeki çekirdekler için bellek erişiminin maliyeti. –

cevap

7

Linux çekirdeği NUMA bilir ve güncel CPU yerel belleğinden süreç sayfalarını vermeye çalışacaktır:

+5

... ve aslında çekirdekte * yapılması gerekenler * çünkü genel kullanıcı alanı süreçleri, doğrusal adreslerinin fiziksel adresleri nasıl eşleştirdiğini kontrol etmiyorlar çünkü sayfa tablolarını kontrol etmiyorlar. – caf

5

numa farkında bellek ayırma derleme zamanında yapılmazsa (kaynak U. Drepper, "What Every Programmer Should Know About Memory".). Bunun gibi varsayımlar yapmak, taşınabilirlik için kötü olurdu.

Linux'ta bu bir çekirdek işlevidir, ancak bunu çalışma zamanında numactl veya set_mempolicy veya libnuma ile denetleyebilirsiniz.

İlgili konular