Çok çekirdekli işlemcide yapılması gereken bir şey var mı?


45

Programımızın ne kadar çok dostu olduğunu düşünürken ekibim, tek çekirdekli bir işlemcide kesinlikle yapılamayacak bir şey olup olmadığını düşündü . Grafik işlemenin büyük ölçüde paralel işlem gerektirdiğini belirttim, ancak DOOM gibi işlemlerin GPU'suz tek çekirdekli işlemcilerde yapıldığını iddia ediyorlar.

Çok çekirdekli bir işlemcide yapılması gereken herhangi bir şey var mı ?

Gelişme ve koşma için sonsuz zamanın olduğunu varsayalım.


8
Aşağıdaki cevaplar büyük ölçüde “hayır” gibi görünmekle birlikte, tarihsel olarak bazı görevleri yerine getiren bir işlemci olmadan çalışamadığı sistemler vardır. Bildiğim güçlü bir örnek, 67MHz ARM9 CPU ve 33MHz ARM7 CPU içeren Nintendo DS'dir (GBA oyunları oynarken geriye uyumluluk için de kullanılır). DS oyunları, ARM7 ses ve Wi-Fi iletişimini oynar, çünkü ARM9 doğrudan ses çipine ses beslemeye devam ederken ekrana bir şey yazamaz ve çizemez. Bu nedenle, jmite “hangi kısıtlamaların altında olduğunu” söylediği gibi, hız eksikliği çoklu işlemcileri talep edebilir.
Slipp D. Thompson

10
İşimde düşük gecikmeli ses işleme yapmak için çok çekirdekli Xeon'lar ve Xenomai gerçek zamanlı Linux uzantıları kullanıyoruz. Üç aşamalı bir ses işleme hattımız var ve her aşama kendi döngüsünün ~% 70'ini kullanan kendi özel çekirdeğini elde ediyor. Gerçek zamanlı olmayan görevler dördüncü çekirdeği kullanmaya başlar ve ilk üçte kalanlar ne olursa olsun geri kalır. Bu, yalnızca tek çekirdekli bir işlemcide mümkün olacaktır; eğer bu çekirdekli, mevcut 4 çekirdekli işlemcideki çekirdekten 3+ kat daha hızlı olsaydı; Mevcut CPU'nun 2GHz'de çalıştığı göz önüne alındığında, elde edilmesi zor olabilir.
Jeremy Friesner

19
Tek çekirdekli bir işlemcideki yazılım, çok çekirdekli bir işlemciyi taklit edebilir. Fark neredeyse tamamen hızdır.
user253751

24
Çok çekirdekli bir sistemde yapılması gereken bir şey, çok iş parçacıklı yazılımı test etmektir. Çünkü bazı kusurlar (neredeyse) hiçbir zaman tek çekirdekli bir sistemde gerçekleşmeyecektir. Bunun bir cevap olarak nitelendirildiğinden emin değilim ...
nikie

13
@nikie Tek çekirdekli bir sistem bellek sıralamasını taklit edebilir ve önbellekleri de taklit edebilir - ancak bunun son derece verimsiz olacağını (10 × yavaşlama gibi)
Nayuki

Yanıtlar:


47

Çalışma süresini umursamıyorsanız, çok çekirdekli bir makinede yapabileceğiniz her şeyi, tek çekirdekli bir makinede yapabilirsiniz. Çok çekirdekli bir makine, bazı hesaplama türlerini hızlandırmanın bir yoludur.

TnTn


3
Bunun kesinlikle doğru olduğundan tamamen emin değilim. Bellek tutarlılığı hatalarının tek bir çekirdekte üretilebileceğini sanmıyorum (Evet, biri çok çekirdekli bir sistemde unicore'de öykünebilir, ancak böyle bir indirme işlemi bir tür hiledir.) (Belki bir VLIW içinde ops hareket ettirerek reg. Takas işleminin bir eşdeğeri, garantili || ism? Den faydalanmaya eşdeğerdir) Tek bir iş parçacıklı çekirdekte bile entropiyi çok iş parçacıklı zamanlama değişkenliğinden çıkarmanın mümkün olabileceğini düşünüyorum. entropi, birim zaman başına daha küçük olacaktır (bu aslında diğer farklar gibi sadece bir performans sorunudur).
Paul A. Clayton

6
@ PaulA.Clayton Bellek tutarlılığı hataları genellikle istenmeyen bir durumdur ve iyi yazılmış bir yazılım bunları göstermemelidir. Ancak, gerçekten yapmak istersen, onları tek bir CPU'da taklit edebilirsin. (Her ne kadar yavaş olabilir)
user253751

4
nn

11
"Tek çekirdekli makine, zaman dilimleme / zaman paylaşımını kullanarak çok çekirdekli bir makineyi taklit edebilir." Ve gerçekten de "modern" İşletim Sisteminin başlangıcından beri yaptıklarım.
Monica

1
@ PaulA. Sadece önleyici çoklu görevlere ihtiyacınız var. Tabii ki, bu genellikle modern işletim sistemlerinde açıkça istenmedikçe aynı yazılabilir hafızayı paylaşan işlemlere sahip olmamalarının nedenidir.
Patrick M,

58

Soru şudur: Hangi kısıtlamalar altında?

Elbette, "bu problemi X donanımında belirtilen sürede çözebilir miyiz" sorusunu sorarsak, cevabın hayır olacağı kesindir.

Ancak bu “geleceğe yönelik” bir cevap değildir: geçmişte tek bir çekirdekte yeterince hızlı bir şekilde yapılamayan şeyler muhtemelen şimdi olabilir ve gelecekteki donanımın ne yapabileceğini tahmin edemeyiz.

Hesaplanabilirlik açısından, tek bantlı bir Turing Makinesinin tek veya çok çekirdekli bir bilgisayarla aynı fonksiyonları tamamlayabildiğini biliyoruz, bu nedenle, çalışma zamanı bir yana, çok çekirdekli bir bilgisayarın çözebileceği bir problem yoktur. tek çekirdekli olamaz.

Grafikleri gibi bir şey, GPU üzerinde anlamıyla her şeyin açısından olabilir Yeteri kadar beklersen için istekli olup olmadığını ... CPU üzerinde yapılması.


3
@JanDvorak Aslında bunun GPU tarafından hiç yapılmadığını söyleyebilirim;)
TomTom

15
Zaman bir kısıtlama değilse, tüm hesaplamaları elle, kalemle ve kağıtla yapabilirsiniz.
mathreadler

2
@ mathreadler Evet, çünkü beyin Turing Tamamlandı. Physics Stackexchange konusunda uzun süredir tartışılan bir şey .
JBentley

4
Aslında, VGA üreten @JanDvorak oldukça basit ve bu projenin gösterdiği gibi 16 MHz'lik bir mikro denetleyicide yazılımda yapılabilir: pyroelectro.com/tutorials/arduino_basic_vga
axello

3
@ mathreadler Bu aslında ilk göründüğünden daha karmaşık bir soru. Kısa bir cevap "evet" olabilir çünkü özel bir makine, herhangi bir turing aleti gerektirmeden bir bilgisayar yapabilir. Daha uzun bir cevap "hayır" olabilir çünkü bir turing makinesi inşa etme kabiliyeti, birinin durum makinesinin geri kalanını kurduğu "başlatma" durumunda olan daha büyük bir turing makinesine sahip olduğu anlamına gelebilir. Tam cevap daha da karmaşık, çünkü asla bir Turing Complete cihazı yapmadık. Makineler için soyut fikirler geliştirdik ...
Cort Ammon

17

Diğer cevapların da belirttiği gibi, tek bir CPU zaman dilimleyerek ve her sanal CPU rolünü oynayarak her zaman birden fazla CPU'yu taklit edebilir. Bu öykünme kesinlikle doğru cevapları hesaplayacaktır.

Gerçek dünyada, yürütme zamanı önemli olabilir. Vasat bir kare hızı ile bir yıldız görsel deneyim arasındaki fark anlamına gelebilir. Veya ticarette kar ve zarar arasındaki fark.

Bir çok işlemcinin bir işlemciden çok daha hızlı olduğu bir patolojik durum , işlemin bir veri boru hattı olduğu, bağlam anahtarlamanın pahalı olduğu ve her boru hattı aşaması için makine kodunun bir CPU önbelleğine zorlukla sığdığı durumdur.

Bazı sayılarla göstereyim. 4 işlem aşamasına sahip bir veri hattınıza (3D render vb.) Sahip olduğunuzu, her aşamada 256 KiB program koduna sahip olduğunuzu ve uygun bir şekilde 256 KiB L2 önbelleğe sahip 4 CPU'nuz olduğunu varsayalım. Bu işlemi tek bir CPU'da çalıştırmayı denerseniz, 4 görev arasında geçiş yapmak pahalı olacak ve ağır önbellek kayıpları söz konusu olacaktır. Öte yandan, 4 çekirdekli bir sistemde çalıştırırsanız, hesaplama potansiyel olarak çok düzgün olabilir, önbellek eksiklikleri minimumdur ve bağlam anahtarları mevcut değildir. (Yan not olarak, bu, belirli uygulamaları belirli çekirdeklere sabitleme kavramıyla ilgilidir - örneğin yalnızca bir çekirdekte işletim sistemi işlemleri veya TCP / IP kullanımı, vb.)


7

Tek bir CPU ile gerçekten zararlı veri yarışları geliştirmek çok daha zor. Yani, tek bir CPU'yu bölerseniz kelimeler arasında yırtılmayı bırakabilirsiniz, ancak istediğinizi yapan tek bir iplik dizilişinin olmadığı egzotik senaryolar oluşturabilir misiniz?

Tamam, belki de sinsi hatalar yapmak, çoklu kod geliştirmelerinin geçerli bir kullanımı olarak sayılmaz. Görünen o ki, mutli çekirdeğin, tek çekirdeğin zaman veremediği şekilde yapabileceği fazla bir şey yok. Sebep basittir. Bu kötü veri yarışlarından kaçınmaya çalışırsanız, kodunuzda senkronizasyon noktalarına sahip olmanız gerekir. Kodunuzu, çıkışları hesaplayıp üretmeden önce, girişlerin tamamlanmış ve senkronize edilmesi gereken bir hesaplama kafesi olarak modelliyorsanız, bir sonraki işlem bloğunu hesaplayarak, tek bir işlemcinin kafes boyunca çalışabileceğini görmek kolaydır. .

Aslında, eğer algoritmanızın bir Turing makinesi tarafından çözülebileceğini gösterebilirseniz (ki hemen hemen umursadığımız her algoritma), algoritmanın sadece bir tek çekirdekli CPU ile değil, aslında bir makine için çok uzun bir bant parçası olan durum makinesi!

SATRANÇ yarış dedektörü aslında yarış durumları bulmak için bu yararlanır. Tekli olarak tutulan her şeyi çalıştırır ve bir testin bir yarış olayı nedeniyle bir başarısızlıkla sonuçlanan vakaları bulmaya çalışırken, dişler arasındaki olası tüm harmanlamaları araştırır. CHESS , çok iş parçacıklı herhangi bir uygulamayı tek bir çekirdekte çalıştırabileceğiniz gerçeğine bağlıdır .

Çok çekirdekli ihtiyacınız olan durumlar , donanımın sınırlarını genişletmeye başladığınızda belirir. Açık olan şey, zaman kısıtlamalarınız olduğunda. Gerçek zamanlı zaman kısıtlamaları olan bazı problemler tek çekirdekli yapmak imkansızdır çünkü tek çekirdeğin saatini yeterince hızlı süremezler. İşlemcilerin 4GHz'e çıkmasının ve daha sonra biraz durması, daha düşük hızlarda daha fazla çekirdek tercih etmesinin bir nedeni var.

Bu zamanlama kısıtlamasının daha egzotik bir versiyonu zor gerçek zaman sistemlerindedir. Bazı zor gerçek zamanlı sistemlerde, kesintilerin servisi o kadar talepkar ki, gerçekte çekirdekler arasındaki kesintileri bölmenize ya da zamanlama sınırlamalarına maruz kalmanıza izin veren çok çekirdekli bir CPU seçmeniz gerekiyor.

Veri otobüslerinde başka bir sınır daha ortaya çıkmaktadır. Blue Gene / P'yi örnek olarak alın. Belirli bir Blue Gene / P süper bilgisayarı olan JUGENE, 144 terabayt belleğe sahiptir. Onlar sadece tüm bu hafızaya erişebilecek tek CPU bilgisayarları yapmazlar.


1
Re, Onlar sadece [bu kadar] belleğe erişebilecek tek CPU bilgisayarları yapmazlar. "Yapma", "yapamaz" ile aynı değildir. Sen olabilir tasarım ve 144 terabayt veya ana belleğine sahip bir tek işlemcili kurmak. İnsanların yapmamasının tek nedeni, azalan getirilerden kaynaklanıyor: Tek işlemcili bir tasarıma daha fazla bellek eklemenin artımlı, pratik değeri bir noktada en yüksek noktaya ulaşıyor ve sonra artan boyut sabit kalırken bellek boyutu büyüdükçe düşüyor .
Solomon Yavaş

@jameslarge Bu cümlenin gerçek hayattaki pratik donanımı tartışırken cevabımın bir parçası olarak ortaya çıkması ve teorik kapasiteleri tartışan cevabın ilk 2 / 3'ünde neden ortaya çıkmamasının nedeni budur.
Cort Ammon

“Yapma” ya da “Yapamam”, bodrumumdaki iki sistem tarafından gösterilmektedir. Bu kadar belleği fiziksel olarak donanım yapılandırmalarına ekleyebilirsem, CPU'ları her bayta "erişebilir". Ama yapamam, bu yüzden "yapamaz". CPU'ların yetenekleri pratikliğin ötesindedir.
user2338816

Bu cevap gibi bir şey düşünüyordum. Tek çekirdekli bir ortamda yarış koşullarının imkansız olacağı (veya zamanın% 100'ünde olduğu) görülüyor. Pratik bir uygulamaya gelince, bir yazılım geliştiricisinin her zaman belirli bir hedef donanımdan geçecek, ancak tek bir çekirdek tarafından çalıştırılan taklit donanımda başarısız olacak bazı tuhaf yarış durumu testini kodlayarak bazı benzersiz kopya koruma formları üretebileceğini teorik olarak biliyorum. . Bu durumda, çok çekirdekli bir sistem tarafından yapılan öykünme muhtemelen bazen geçer, ancak güvenilir değildir.
Dan Henderson

6

Gerçek zamanlı davranışını bozmadan (veya olabildiğince az) tek bir işlem elemanı üzerinde çalışan bir işlemi gözlemlemeniz gerekirse, kıyaslama veya etkinlik günlüğü için olduğu gibi, muhtemelen ayrı bir işlem kaynağına ihtiyacınız olacaktır.


Birden fazla işlemci olmasa da, kesin öykünme gerektiren bir şeyin güzel, özlü bir örneği
Ben Leggiero

Hey, bu senin hesabın mı? Mayby birleştirmek ister misin?
Evil

4

Diğer cevaplar, paralelliğin sınırlı "dağınık eşzamanlılık" olarak görülmesine bağlı kalmaktadır. Bu bazı cevaplar verir: temiz bir à la Turing hesaplama modelinde, birden fazla çekirdek bir avantaj sunmaz; Alacağınız tek avantaj verimliliktir.

Orada işlemleri yürütmek: Bir şey birden işlem birimleri (PUs) tek tek olsa olamayacağını yapabileceği paralel olduğunu, aynı zamanda .

Aynı anda birden fazla program çalıştırıyorsanız, bu çok kullanışlıdır. Ancak, nadiren eşzamanlı yürütmeden daha fazlasına ihtiyaç duymanız nadirdir ve çoğu kullanım verimliliği arttırır. Ama olan bu fark.

Birden fazla kaynaktan gelen veri sensörü verilerini gerçek zamanlı olarak işlemeniz gerektiğini söyleyin . Bu, uygulamanızda tam olarak ne anlama geliyorsa, bir PU, yanıt süresi sınırını ihlal etmeden aynı anda birçok giriş akışını aynı anda gerçekleştirebilir. Bu nedenle , mevcut PU nesliniz için çok fazla sensörünüz olduğunda, birden fazla PU'ya ihtiyacınız vardır .

k

kkk


0

CS pov'dan "çok çekirdekli" teoride "dağıtılmış hesaplama" dan çok farklı değildir. temel kavram “bağımsız hesaplama unsurlarıdır (paralel olarak hesaplanır”). soruyu çok az tekrarlamak (“çok çekirdekli” tam olarak tam olarak teorik bir kavram değildir), başka cevaplarda da belirtildiği gibi, sıralı programlamanın diğer bazı olasılıklara yol açtığıdır. Bir CS pov'dan paralel programlamaya eşdeğerdir, bu, bilgisayar için teorik sistemin, yani bir Turing makinesinin tanımına geri döner, CS performansının teorik analizi, sonuçta paralel ve ardışık ayrımın gerçekten uygulanmadığı TM'ler açısındandır. rağmen multitape TM ile bazı kaba analoji var ).

ancak bu soruyu daha az soyut olarak düşününce, dağınık hesaplama, hata toleransı içeren bazı problemler için gerçekten de üstündür veya muhtemelen neredeyse bile gereklidir . Bu alanda, bağımsız bilişim unsurlarının bir dereceye kadar güvenilmezliğe sahip olduğu durumlarda / nerede alındığında uygulandığı bir kavram vardır (bu, tüm bağlamlar için evrensel olarak uygulanabilir bir varsayım değildir). burada hata toleransının iyileştirildiği veya hatta bağımsız hesaplama öğeleri gerektirdiği birkaç durum vardır .

  • Her bir işlemcinin hesaplama sırasında bağımsız "[x]%" başarısız olma şansına sahip olduğunu düşünün. iletişim yoluyla sistemin genel hata toleransının ayrı ayrı bileşenlerden daha üstün olduğu bir sistem geliştirilebilir. Bu, onlarca yıl önce, örneğin Uzay Mekiği sistemlerinde uygulanmıştır. Son zamanlarda, onu kullanmak için tasarlanan temel protokoller var, örneğin fikir birliği problemini çözen Paxos . Daha aşağıdan aşağıya bir örnek, süper bilgisayarlarını esas olarak hataya dayanıklı algoritmalarla birleştirilmiş, ayrı ayrı güvenilmez öğelerden oluşturmak için birçok özel algoritmaya sahip olan Google.

  • Bitcoin, defterin hesaplanması için dağıtılmış işlemlerden oluşur ve bu yalnızca işlem yükü sorunları nedeniyle değildir. Algoritma, bozuk düğümleri engellemek için dikkatlice tasarlanmıştır. kısacası , sadece paralel performansı maksimize etmekle ilgili olmayan Bizans generallerinin problemini “çözer” / uygular, birbirini "kontrol eden" ve "algoritmik olarak / kriptografik / güvenli bir şekilde" geçersiz hesaplamaları reddetmeyi, yani bir tür "aldatmayı" veya "reddetmeyi, bağımsız varlıkları içerir. yolsuzluk".

  • Paralellik klasik bir analiz, belirli paralel uygulama arızalarına ayrışan yaklaşık 7 "temel" problem kalıbı türünün vardığı sonucuna varmaktadır. bkz Berkeley Bir Görünüm: Paralel Hesaplama Araştırma Manzara

  • Burada, diğer çoğu cevaplarda ele alınan performansla ilgili bazı teorik soruların bir kısmı var. sekanstan paralel olarak "doğal olarak daha hızlı" olan herhangi bir problemin olup olmadığı sorusu, kabaca NC'nin "verimli olarak paralelleştirilebilir" algoritmalar ve P'nin "verimli [sıralı] algoritmalar sınıfı olduğu düşünülen P =? NC problemi olarak da bilinir. "


1
Bu cevabı seviyorum! Örneklerinden çok şey öğrendim: D
Ben Leggiero

Işın kritik olan ortamlarda radyasyon bulunan hata toleransı için +1, büyük harf ve artıklık için -1.
Cees Timmerman
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.