Neden bir büyük işlemci çekirdeği yapmıyorsunuz? [kapalı]


25

Neden CPU üreticileri çok çekirdekli cips yapıyor anlamıyorum. Birden fazla çekirdeğin ölçeklendirilmesi korkunçtur, bu oldukça uygulamaya özeldir ve birçok çekirdeğin üzerinde harika çalışan belirli bir program veya kodu işaretleyebileceğinizden eminim, ancak çoğu zaman ölçeklendirme çöptür. Silikon kalıp boşluğu ve enerji kaybı.

Örneğin, oyunlar neredeyse hiç bir zaman dört çekirdekten fazla kullanmazlar. Ansys veya Fluent gibi bilim ve mühendislik simülasyonları, bilgisayarın çalıştığı çekirdek sayısına göre fiyatlandırıldığından, daha fazla çekirdeğiniz olduğu için daha fazla ödeme yaparsınız; iş istasyonları ... bu para ve enerji kaybıdır. Kış için 1500 W ısıtıcı satın almak daha iyidir, çok daha ucuzdur.

Neden sadece büyük bir çekirdekli bir işlemci yapmıyorlar?

Sanırım sekiz çekirdekli bir işlemcinin bir çekirdekli eşdeğerini yaparlarsa, bir çekirdeğin IPC'de% 800 artışa sahip olacağını, bu nedenle yalnızca birden fazla çekirdek için optimize edilmiş olanları değil, tüm programlarda tam performansı elde edebileceğinizi düşünüyorum. Daha fazla IPC her yerde performansı artırıyor, performansı artırmanın güvenilir ve basit yolu. Birden fazla çekirdek yalnızca sınırlı sayıda programda performansı artırır ve ölçeklendirme korkunç ve güvenilmezdir.


Yorumlar uzun tartışmalar için değildir; bu konuşma sohbete taşındı . Ulaşılan sonuçlar, soru ve / veya cevaplarda tekrar düzenlenmelidir.
Dave Tweed

Bu makale ilginizi çekebilir: gotw.ca/publications/concurrency-ddj.htm
lvella

“ama 16 çekirdeğin ardından daha fazla çekirdeğin yararı gerçekten de zayıflıyor” Belli ki ne hakkında konuştuğunu bilmiyorsun. İnan bana, on binlerce CPU üzerinde çalışan işlemler üzerinde çalıştım. Soruna daha fazla çekirdek atmanın iyi çalıştığı "utanç verici şekilde paralelleştirilebilir" olarak adlandırılan bir sorun sınıfı var.
Aron,

Yanıtlar:


93

Sorun, CPU üreticilerinin, tek bir CPU çekirdeğini sonuç vermeden daha güçlü hale getirmek için daha fazla transistör ekleyebileceği varsayımından kaynaklanmaktadır.

Bir CPU'nun daha fazlasını yapmasını sağlamak için, daha fazla ne yapılması gerektiğini planlamanız gerekir. Gerçekten üç seçenek var:

  1. Çekirdeğin daha yüksek bir saat frekansında çalışmasını sağlayın - Bununla ilgili sorun şu anda yapabileceklerimizin sınırlarını aşmamız.

    Güç kullanımı ve dolayısıyla termal dağılım frekansla artar - frekansı iki katına çıkarırsanız, güç dağıtımını nominal olarak iki katına çıkarırsınız. Gerilimi artırırsanız, güç tüketimi voltajın karesiyle artar.

    Ara bağlantı ve transistörler ayrıca dünyanın ideal olmayan doğası nedeniyle yayılma gecikmelerine sahiptir . Sadece transistör sayısını artıramazsınız ve aynı saat frekansında çalışabilmeyi bekleyemezsiniz.

    Ayrıca RAM başta olmak üzere harici donanım ile sınırlıdır. CPU'yu daha hızlı hale getirmek için, daha hızlı çalıştırarak veya veri yolu genişliğini artırarak bellek bant genişliğini arttırmanız gerekir.


  1. Daha karmaşık talimatlar ekleyin - Daha hızlı çalışmak yerine daha zengin bir talimat seti ekleyebiliriz - şifreleme vb. Ortak işlemler silikonda sertleştirilebilir. Yazılımda hesaplamak için pek çok saat döngüsü almak yerine, bunun yerine donanım hızımızı artırıyoruz.

    Bu zaten Karmaşık Komut Seti (CISC) işlemcilerinde yapılıyor. SSE2, SSE3 gibi şeyleri görün. Bugün tek bir CPU çekirdeği, aynı saat frekansında çalıştırılsa bile, 10 yıl öncesinden bile bir CPU çekirdeğinden çok daha güçlü.

    Sorun, daha karmaşık talimatlar ekledikçe, daha fazla karmaşıklık ekler ve çipin daha büyük olmasını sağlar. Doğrudan bir sonuç olarak CPU yavaşlar - ulaşılabilir saat frekansları yayılma gecikmeleri arttıkça düşer.

    Bu karmaşık talimatlar basit görevlerde size yardımcı olmuyor. Her olası kullanım durumunu sertleştiremezsiniz, bu nedenle kaçınılmaz olarak çalıştırdığınız yazılımın büyük bölümleri yeni talimatlardan yararlanamayacak ve sonuçta ortaya çıkan saat hızının azaltılmasıyla zarar görecektir.

    Aynı anda daha fazla veri işlemek için veri yolu genişliklerini de büyütebilirsiniz, ancak yine de bu işlemci CPU'yu büyütür ve daha büyük veri yollarından elde edilen verim ile saat hızı düşmesi arasında bir çarpışmaya girersiniz. Yalnızca küçük verileriniz varsa (örneğin, 32 bit tam sayılar), 256 bit CPU olması gerçekten size yardımcı olmaz.


  1. İşlemciyi daha paralel hale getirin - Bir şeyi daha hızlı yapmaya çalışmak yerine, aynı anda birden çok şey yapın. Yaptığınız görev, bir kerede birkaç şey üzerinde çalışmasına izin veriyorsa, o zaman ya komut başına birden fazla hesaplama yapabilen tek bir CPU (Tek Yönlü Çoklu Veri (SIMD)) ya da her birinin tek işlem yapabilen birden fazla CPU'su olmasını istersiniz. hesaplama.

    Bu, çok çekirdekli işlemciler için temel sürücülerden biri. Çalışan birden fazla programınız varsa veya tek programınızı birden fazla göreve bölebilirseniz, birden fazla CPU çekirdeğine sahip olmak aynı anda daha fazla şey yapmanıza izin verir.

    Bireysel CPU çekirdeği etkin bir şekilde ayrı bloklar (önbellekleri ve bellek arayüzleri) olduğundan, her bir çekirdek, eşdeğer tekli monolitik çekirdekten daha küçüktür. Çekirdek daha küçük olduğundan, yayılma gecikmeleri azalır ve her bir çekirdeği daha hızlı çalıştırabilirsiniz.

    Tek bir programın birden fazla çekirdeğe sahip olmasından faydalanıp faydalanmayacağına gelince, bu tamamen o programın ne yaptığı ve nasıl yazıldığı ile ilgilidir.


Yorumlar uzun tartışmalar için değildir; bu konuşma sohbete taşındı . Ulaşılan sonuçlar, soru ve / veya cevaplarda tekrar düzenlenmelidir.
Dave Tweed

Halen ele alınmamış olan yorumlarda ortaya çıkan noktalardan biri, CPU'ların saat başına birden çok talimat çalıştırarak paralel olabileceğidir (Superscalar). Bu SIMD ve frekansa diktir; saat başına talimat (IPC), zaman başına fiili verimdeki üçüncü faktördür. Etkileşimli kullanımlı iş yükleri için tüm modern CPU'lar en az 2 genişliktedir.
Peter Cordes


37

Diğer cevaplara ek olarak, başka bir unsur daha var: çip verimi . Modern bir işlemcinin içinde birkaç milyar transistör vardır, bu transistörlerin her birinin tüm yonganın düzgün çalışması için mükemmel çalışması gerekir.

Çok çekirdekli işlemciler yaparak, transistör gruplarını temiz bir şekilde bölümleyebilirsiniz. Çekirdeklerden birinde bir kusur varsa, o çekirdeği devre dışı bırakabilir ve yongayı, çalışan çekirdek sayısına göre indirimli bir fiyatla satabilirsiniz. Aynı şekilde, onaylanmış bileşenlerden SMP sistemindeki sistemleri de monte edebilirsiniz.

Neredeyse satın aldığınız her CPU için, bu işlemci hattı için en üst seviye bir premium model haline getirilmeye başlandı. Neyin sonunda, o çipin hangi kısımlarının yanlış çalıştığına ve devre dışı bırakıldığına bağlıdır. Intel herhangi bir i3 işlemcisi yapmaz: hepsi hatalı, çünkü ürün hatlarını ayıran tüm özellikler devre dışı bırakıldı, çünkü test edilemedi. Bununla birlikte, halen çalışmakta olan kısımları hala yararlıdır ve daha ucuza satılabilir. Kötü olan her şey anahtarlık bibloları olur.

Ve kusurlar nadir değildir. Mükemmel bir şekilde bu milyarlarca transistör oluşturmak kolay bir iş değil. Belirli bir çipin bölümlerini seçici olarak kullanma fırsatınız yoksa, sonucun fiyatı artacaktır, çok hızlı.

Tek bir über işlemci ile, üretim çok daha fazla israf işlemine yol açan üretim ya hep ya hiçdir. Bilimsel veya askeri amaçlı görüntü sensörleri gibi, büyük bir sensöre ihtiyaç duyduğunuz ve hepsinin çalışması gereken bazı cihazlar için bu cihazların maliyetleri yalnızca devlet düzeyinde bütçelerin karşılayabileceği kadar büyüktür.


4
Verim artarsa ​​/ pazarın talep ettiklerinden daha fazla çalışan çip üretiyorsa, üreticiler fiyat yapısını yüksek yapmak için fiyat yapısını ayarlamak yerine genellikle çekirdeklerin / önbelleklerin bir kısmından kaynaştırmaya başlar ve / veya bunları daha düşük SKU’da çekmeye başlarlar. cipsler nispeten daha ucuzdur. GPU'lar / grafik kartlarıyla, bazı yazılımlarda ürün yazılımı kesilmiş engelli gölgelendirici ünitelerinin kilidini açabilir, şanslı olup olmadığınızı ve bunların sadece pazar bölümlemesi için devre dışı bırakıldığı bir kartı bulduğunuzu, gerçek hataların olmadığını görebilirsiniz.
Peter Cordes

4
Intel, cipslerinden bazıları için çift çekirdekli kalıplar üretti. Tüm ULV (ultra düşük voltaj) mobil SKU'ları çift çekirdekliyken, yeterince kusurlu dört çekirdekli değildi ve daha küçük kalıp alanı (özellikle kesilmiş bir iGPU ile) gofret başına daha fazla çalışan çift çekirdekli yonga veriyor dört çekirdekli erimekten ziyade ölür. tr.wikichip.org/wiki/intel/microarchitectures/… , Sandybridge 131 mm² kalıp boyutunda çift çekirdekli + GT1 grafikleri, 149 mm² çift çekirdekli + GT2 grafikleri + 216 mm² dörtlü + GT2 kalıplarının çekimlerini yaptı. Önbellek vb. Kusurlara hala yer var
Peter Cordes

FMA ünitesinin bir kısmındaki (bazı) kusurlar büyük olasılıkla birleştirme ve Celeron veya Pentium yongası olarak satma yoluyla ele alınabilir (AVX yok, bu nedenle sadece 128-bit vektörler.) Modern Skylake veya Coffee Lake Pentium yongalarında bile AVX yok . SIMD FMA birimleri bir çekirdeğin iyi bir kısmını oluşturur (ve tamsayı mul ve tamsayı kaydırma da dahil olmak üzere FP matematiği dışındaki pek çok SIMD işlemcisi çalıştırır), 2x 256-bit FMA birimleriyle eşleştirilebilsem şaşırmam Hangi 2 parça hala çalışıyorsa onu kullanarak 2x 128-bit. Skylake Xeon ile, AVX512 FMA veriminde azalma olan SKU'lar bile var (sadece 1 çalışan 512 bit FMA)
Peter Cordes 0

@PeterCordes Eğer verim o kadar iyi olursa, satıcılar kusur oranları çekirdekleri devre dışı bırakabilecekleri ve / veya yongaların altında kalabilecekleri seviyeye gelinceye kadar daha yüksek yoğunluklu ve / veya daha hızlı saat hızı (ve dolayısıyla daha yüksek hata oranı) tasarımları ortaya koyacaktır. indirimden satmak için ..
Monty Harder

@MontyHarder: Bu doğru, ancak validasyon zaman ve paraya mal oldu ve mevcut üretim hatları bir süre için mevcut tasarımları yapmaya devam edecek. Ancak evet, bahsettiğiniz şeylerin bazı Intel örnekleri Haswell Refresh ve temelde mimari değişiklik ve 14nm süreçlerinde küçük iyileştirmeler olmadan çeşitli Skylake geliştirmeleridir. (Bazen yeni iGPU ile). örneğin Kaby Gölü, daha sonra Kahve Gölü vb.
Peter Cordes

26

Veri bağımlılığı

Bir çipi "daha geniş" yaparak saat başına daha fazla talimat eklemek oldukça kolaydır - bu "SIMD" yaklaşımı olmuştur. Sorun, bunun çoğu durumda kullanılmasına yardımcı olmamasıdır.

Bağımsız ve bağımlı olarak kabaca iki tür iş yükü vardır. Bağımsız bir iş yükünün bir örneği "A1, A2, A3 ... ve B1, B2, ... vb. İki sayı dizisi verilebilir, (A1 + B1) ve (A2 + B2) vb. Bu tür bir iş yükü bilgisayar grafikleri, ses işleme, makine öğrenimi ve benzerlerinde görülür. Bunların çoğu, özellikle işlemek için tasarlanmış GPU'lara verilmiştir.

Bağımlı bir iş yükü "Given A, 5 ekleyin ve tabloya bakın. Sonucu alın ve 16 ekleyin. Bunu farklı bir tabloda arayın." Olabilir.

Bağımsız iş yükünün avantajı, birçok farklı parçaya bölünebilmesidir, böylece daha fazla transistör bu konuda yardımcı olur. Bağımlı iş yükleri için bu hiç bir işe yaramaz - daha fazla transistör yalnızca yavaşlatabilir . Eğer bellekten bir değer elde etmek zorunda kalırsanız, bu hız için bir felakettir. Anakart üzerinden, alt ışık hızında hareket eden bir sinyal gönderilmelidir, DRAM bir sıra şarj etmeli ve sonucu beklemeli, sonra geri göndermelidir. Bu onlarca nanosaniye alır. Daha sonra basit bir hesaplama yaptıktan sonra bir sonrakine göndermelisin.

Güç yönetimi

Yedek çekirdekler çoğu zaman kapatılır. Aslında, işlemcilerin oldukça çok üzerinde, sen olamaz sistem bunları kapatmak veya bunları sizin için hızı aşağıya böylece, tüm tutuşma şey olmadan zamanın tüm çekirdekleri çalıştırın.

Yazılımı yeniden yazmak, ileriye dönük tek yoldur

Donanım, bağımlı iş yüklerini otomatik olarak bağımsız iş yüklerine dönüştüremez. Yazılım da olamaz. Ancak, pek çok çekirdekten yararlanmak için sistemlerini yeniden tasarlamaya hazırlanan bir programcı olabilir.


2
"Tüm çekirdeği aynı anda çalıştıramaz" için gereken alıntı. Tek çekirdekli maksimum turbo saat hızını CPU'nun "gerçek" saat hızı olarak düşünmüyorsanız. Klasik anlamda (güç duvarına çarpmadan önce ve saat hızı kritik yol yayılma gecikmeleriyle sınırlandı), evet bu doğru, ama modern dünyada herkesin yaşayabileceği şey gibi temel saat hızına bakmak daha mantıklı geliyor. aktif çalışan ağır iş yüklerini çeker. Bundan daha büyük olan her şey, sos / termik limitlerin izin verdiği ölçüde, fırsatçı olarak kullanabilirsiniz. (örneğin, Intel'in Turbo).
Peter Cordes

1
Ancak, güç açısından, tek bir çekirdeğin maksimum saati bile, yayılma gecikmelerinden ziyade termik moreso ile sınırlıdır (muhtemelen boru hattı aşama sınırları seçilse de, hedef maksimum turboda bu sınıra yakınsınız). Ve voltaj da bir değişkendir: daha kötü güç ancak daha kısa kapı gecikmeleri. Her neyse, tek çekirdekli max turboyu tüm çekirdeği "çalıştırabileceğiniz" bir şey olarak düşünmek mantıklı değil, çünkü bu limit zaten güçten geliyor.
Peter Cordes

Orijinal sorunun bağlamı kesinlikle tek çekirdekli maksimum hız hakkında soruyordu ve birçok pratik amaç için (ve önbellek kaçırıyor) kullanıcının algılanan hızı için gerçek sınırlayıcı faktördür.
pjc50

Evet, yapabilsek 8 çekirdekli işlemci yerine 8x tek iş parçacığı performansı alırdık. (SMT ile bağlamsal değiştirme yükü olmadan doğal olarak ayrı iş yüklerini çalıştırmasına izin vermek için. Cevabımı görün. :) Varsayımsal bir süper geniş çekirdek, iş yükü bir sürü durgunluğa neden olmak yerine, daha fazla durma yerine muhtemelen daha hızlı bir şekilde saat alabilecektir. SIMD FMA ünitelerindeki transistörler her saat açılıp kapanıyor. (Güç yolluk içinde , tek bir çekirdek aynı zamanda yüksek saatler erime olmayan anahtarıdır en.wikipedia.org/wiki/Dark_silicon ). Yani tek bir geniş çekirdeğe sahip olmak bunu farklı yapmaz.
Peter Cordes

Mevcut CPU'larda gördüğümüz tek iş parçacıklı performansın, en kötü durumdaki bir iş yüküyle bile aynı anda tüm çekirdeklerde sürdürebilecekleri bir saat hızıyla sınırlı olmasından daha iyi bir noktaya sahip olsanız da. Turbo, özellikle dizüstü yongaları gibi düşük TDP parçaları için anahtardır ( Neden CPU'm HPC'de en yüksek performansı koruyamıyor ): genellikle yüksek güçlü fakat düşük çekirdekli masaüstü yongaların aksine, temel ve maksimum turbo arasındaki büyük oran örneğin, i7-6700k Skylake 4GHz baz, 4.2GHz tek çekirdekli turbo'dur (overclock yapmadan; 95W TDP ile daha yüksek).
Peter Cordes

20

Zamanda geriye gitmek, işlemciler o kadar hızlı koşmak mümkün değildi. Sonuç olarak, daha fazla işlem yapmak istiyorsanız, daha fazla işlemciye ihtiyacınız vardı. Bu bir matematik işlemcisiyle olabilir veya aynı işlemciden daha fazlası ile olabilir. Bunun en iyi örneği, 80'lerin Inmos Transputer'ıdır ve bunlar, birbirine takılı birden fazla işlemci ile toplu olarak paralel işleme için özel olarak tasarlanmıştır. Bütün konsept, işlemci gücünü arttırmak için işlemci eklemekten daha iyi bir yol olmadığı varsayımına dayanıyordu.

Sorun şu ki, bu varsayımın (geçici olarak) yanlış olması. Bir işlemcinin daha fazla hesaplama yapmasını sağlayarak daha fazla işlem gücü elde edebilirsiniz. Intel ve AMD, saat hızlarını daha da yükseltmenin yollarını buldular ve dediğiniz gibi, her şeyi bir işlemcide tutmanın çok daha kolay. Sonuç, 2000'li yılların ortasına kadar hızlı tek çekirdekli işlemcinin pazara sahip olmasıydı. Inmos 90'ların başında bir ölümle öldü ve bütün deneyimleri onlarla birlikte öldü.

İyi zamanlar olsa sona ermişti. Saatin hızları GHz'e ulaştığında, gerçekten daha ileriye gitmek için bir kapsam yoktu. Ve tekrar tekrar çoklu çekirdeğe gittik. Gerçekten daha hızlı elde edemezseniz, cevap daha fazla çekirdek olacaktır. Söylediğiniz gibi, bu çekirdekleri etkin bir şekilde kullanmak her zaman kolay değildir. Bugünlerde çok daha iyiyiz, ama yine de onu Transputer'ın yaptığı kadar kolay hale getirmenin bir yolunu buluyoruz.

Tabii ki, iyileştirme için başka seçenekler de var - bunun yerine daha verimli olabilirsiniz. SIMD ve benzeri komut setleri, aynı sayıda saat işareti için daha fazla işlem yapılmasını sağlar. DDR, verilerinizi işlemciye daha hızlı bir şekilde verir. Hepsi yardımcı olur. Fakat bu işleme gelince, 80'lere ve tekrar çekirdeklere döndük.


Yorumlar uzun tartışmalar için değildir; bu konuşma sohbete taşındı . Ulaşılan sonuçlar, soru ve / veya cevaplarda tekrar düzenlenmelidir.
Dave Tweed

20

İyi bir soru veya ilginç bir cevabı olan en az bir tane. Bu cevabın bir kısmı, CPU'ların çoklu çekirdekler yerine genişlikte verimli bir şekilde ölçeklenebilecekleri bir dünya görüntüler . Lisans / fiyat modelleri farklı olurdu!

Gerisi neden yapamadıklarını açıklar. Özet:

  • Çok çekirdekli ölçeğin maliyeti doğrusal olarak yakın
  • 1 çekirdeğin süperskalar boru hattını genişletmenin maliyeti ~ dörtlü olarak ölçeklenir Bu, yine de bir noktaya kadar yeterli kaba kuvvetle yapılabilir. Tek iş parçacıklı performans etkileşimli kullanım için çok önemlidir (bu nedenle, sadece çıkış için değil, uçtan uca gecikme önemlidir), bu nedenle mevcut büyük çekirdekli üst düzey CPU'lar bu fiyatı öder. örn. Skylake (4 genişliğinde), Ryzen (5 veya 6 genişliğinde) ve Apple A12 (büyük çekirdeklerde 7 genişliğinde, küçük enerji verimli göbeklerde 3 genişliğinde)
  • Ciddi azalan IPC , ILP'yi bulmak için sıra dışı uygulamalarda bile boru hattını 3 veya 4 genişliğin ötesine genişletmekten geri döner . Şube özleri ve önbellek özleri zordur ve hala tüm boru hattını oyalar.
  • Frekanstan bahsetmediniz, sadece IPC, ancak ölçeklendirme frekansı da zor. Daha yüksek frekans daha yüksek voltaj gerektirir, bu nedenle güç kesilmiş frekanslı ölçekler : ^1doğrudan frekanstan ve ^2voltajdan. (Kondansatör depolanan enerji V ^ 2 ile ölçeklenir ve kaçak akımın ötesindeki dinamik gücün çoğu FET geçitlerinin + tellerin kapasitif yüklerine pompalama yükünden gelir.)

    Performans = frekans süreleri IPC. (Aynı mimari içerisinde. Daha geniş SIMD, aynı işi daha az talimatla yapmanıza olanak tanır ve bazı ISA'lar diğerlerinden daha yoğundur, örneğin MIPS, aynı işi yapmak için genellikle x86 veya AArch64'ten daha fazla talimat alır.)

Maliyetler kalıp alanında (üretim maliyeti) ve / veya güçtedir (dolaylı olarak soğutmanın zor olması nedeniyle frekansı sınırlar). Ayrıca, Watt başına daha düşük güç ve performans, özellikle mobil (pil) ve sunucular (güç yoğunluğu / soğutma maliyetleri / elektrik maliyetleri) için kendi başına bir hedeftir.

Soket başına çok çekirdekli bir şey olmadan önce, üretilebilecek tek bir CPU ile elde edilebileceğinden daha fazla verim yapmak istediğiniz üst düzey kullanımlar için çok soketli sistemleriniz vardı, bu yüzden bunlar sadece SMP sistemleriydi. (Sunucular, yüksek kaliteli iş istasyonları).

Tek çekirdekli kadar verimli siz istediniz ölçek olsaydı, biz soket başına 1 fiziksel çekirdekli sistemlere sahip olur ve SMT (örn HyperThreading) onları çoklu mantıksal çekirdek olarak hareket izin vermek. Tipik masaüstü / dizüstü bilgisayarlar yalnızca 1 fiziksel çekirdeğe sahip olacaktı ve daha fazla çekirdekle doğrusal ölçeklenmeyen şeyleri paralelleştirmek için mücadele etmeyeceğiz. örneğin make -j4, çok soketli sunuculardan yararlanmak ve / veya masaüstünde G / Ç gecikmesini gizlemek için. (Ya da boru hattı genişliği kolayca ölçeklenirse IPC olmasaydı, belki de hala çok paralellik yapmaya çalışırdık, bu yüzden daha fazla SMT ipliği kullanmak zorunda kaldık.) İşletim sistemi çekirdeğinizin, CPU yolu olmadığı sürece, tüm mantıksal çekirdeklerde çalışmasına ihtiyaç duyacaktı. SMT'yi işletim sistemine çok farklı buluyordu, bu yüzden paralel programlama algoritmaları ve kilitlemeye hala ihtiyaç duyuluyordu.


Donald Knuth 2008 röportajında ​​söyledi

Çok çekirdekli mimariye yönelik mevcut eğilim ile kişisel mutsuzluğum hakkında biraz alev alabilirim. Bana göre, donanım tasarımcılarının fikirleri tükeniyor ve az da olsa daha hızlı çalışan makineler vererek , Moore Yasasının gelecekteki ölümü suçunu yazılım yazarlarına aktarmaya çalışıyor gibi görünüyorlar. temel kriterler!

Evet, gerçek programlarda 8 kat fazla işlem hacmine sahip mucize tek çekirdekli işlemcilere sahip olsaydık, muhtemelen hala onları kullanıyorduk. İki soketli sistemlerde yalnızca daha fazla iş hacmi için daha fazla ödeme yapmaya değdiğinde (tek iş parçacıklı performans değil).

Birden fazla CPU, birden fazla program çalışırken bağlam değiştirme maliyetlerini düşürür (aralarında hızlı geçiş yapmak yerine gerçekten paralel olarak çalışmasını sağlayarak); Böyle bir CPU'nun gerektireceği devasa sıra dışı makinelerin kesintiye uğramasına neden olan ön-işlemcili çoklu görev muhtemelen şimdi olduğundan daha fazla acı verirdi.

Fiziksel olarak tek çekirdekli (çekirdekler arasında birbirine bağlı olmayan basit bir önbellek hiyerarşisi için) olacaktı, ancak SMT'yi (örneğin Intel'in HyperThreading) desteklemesi için yazılım, iş akış kaynakları için dinamik olarak rekabet eden 8 mantıksal çekirdek olarak kullanabildi. Veya sadece 1 iş parçacığı çalışıyor / durmuyorsa, tam yararı olur.

Böylece, aslında daha kolay / doğal olduğunda (örneğin, aynı anda çalışan ayrı işlemler) veya bu canavara ait IPC'yi maksimize etmeyi önleyen bağımlılık zincirleri ile kolayca paralel hale getirilmiş problemler için birden fazla iplik kullanırsınız.

Fakat ne yazık ki Knuth'un çok çekirdekli işlemcilerin bu noktada bir şey olmayı bırakacağını düşünmesi arzulu.


Tek iş parçacığı performans ölçeklendirme

Sanırım 8 çekirdekli bir işlemciye 1 çekirdek eşdeğeri yaparlarsa, bir çekirdeğin IPC'de% 800 artış sağlayacağı için tüm programlarda tam performans elde edersiniz, sadece birden fazla çekirdek için optimize edilmiş olanları değil.

Evet bu doğru. Eğer böyle bir CPU kurmak mümkün olsaydı, çok şaşırtıcı olurdu. Ancak , aynı yarı iletken üretim sürecinde (yani, transistörlerin aynı kalite / verimlilikte) tam anlamıyla imkansız olduğunu düşünüyorum . Çekirdekleri birbirine yapıştırmak için mantıktan tasarruf etseniz ve çekirdek başına özel önbellek için çok fazla alana ihtiyaç duymayacak olsanız bile, 8 çekirdekli bir CPU ile aynı güç bütçesinde ve kalıp alanında kesinlikle mümkün değil.

Frekans artışlarına izin verseniz bile (asıl ölçüt saniyede çalışmak, saat başına çalışmak değildir), 2 kat daha hızlı bir CPU yapmak bile çok zor olacaktır.

Böyle bir CPU'yu inşa etmek için aynı güç ve kalıp alanı bütçesinin yakınında herhangi bir yerde (bu nedenle üretim maliyeti) mümkün olsaydı, evet işlemci satıcıları onları bu şekilde inşa ederdi.

Modern Mikroişlemcilere Bakın 90 Dakika Rehber!

Spesifik olarak Daha Fazla Çekirdek veya Daha Geniş Çekirdek? Bu cevabı anlamak için gerekli arka plan için; sıralı sıralı CPU'ların nasıl çalıştığıyla basit bir şekilde başlar, daha sonra süperskalar (saat başına çoklu komut). Sonra P4 döneminin etrafındaki güç duvarına nasıl çarptığımızı, kolay frekans ölçeklendirmenin sona erdiğini, çoğunlukla sadece IPC'yi bıraktığını ve daha küçük transistörlerde bile ileriye giden yol olarak talimat başına daha fazla iş yapıldığını (örn. SIMD) açıkladığını açıklıyor.

Bir boru hattının genişletilmesi (saat başına maksimum talimat) tipik olarak genişlik karesi kadar maliyeti ölçeklendirir . Bu maliyet, daha geniş paralel bağımlılık kontrolü (tehlike tespiti) ve çalışmaya hazır talimatları bulmak için daha geniş bir sıra dışı zamanlayıcı için kalıp alanında ve / veya güçte ölçülür. Ve daha başka talimatlar çalıştırmak istiyorsanız, kayıt dosyanızdaki ve önbellekteki okuma / yazma bağlantı noktaları nop. Özellikle, FMA veya bir araya getirme ekli gibi 3 giriş talimatınız varsa (2 kayıt + bayrak).

CPU'ları genişletmek için azalan IPC iadeleri de var ; En iş yükü çok daha geniş bir çekirdek yapım küçük ölçekli / CPU yararlanmak için kısa menzilli İLP (komut seviyesi paralellik) sınırlı değildir IPC zaten sınırlı olup olmadığını daha genişliğinden daha IPC (saat başına talimatları) geliştirmek bağımlılık zincirleri, şube özlüyor, önbellek özlüyor, ya da diğer tezgahlara göre çekirdek. Bağımsız yinelemeli kontrolsüz döngülerde hız kazanacağınızdan emin olun, ancak çoğu zaman harcadığı kod bu değildir. Karşılaştırma / dallanma talimatları, "tipik" kod olan IIRC'deki talimat karışımının% 20'sini oluşturur. (Çeşitli veri kümeleri için% 15 - 25 arasında rakamlar okuduğumu düşünüyorum.)

Ayrıca, tüm bağımlı talimatları durduran bir önbellek özeti (ve ardından ROB kapasitesine ulaşıldığında her şey) daha geniş bir CPU için daha pahalı olur. (Daha fazla yürütme ünitesini boşta bırakma fırsatı;

IPC'yi 8 katına çıkarmak için, şube tahmin doğruluğunda ve önbellek vuruş oranlarında en az 8 kat iyileştirmeye ihtiyacımız var . Ancak önbellek isabet oranları, çoğu iş yükü için belirli bir noktadan sonra önbellek kapasitesiyle iyi ölçeklenmez. HW ön ayarlaması akıllıdır, ancak o kadar da akıllı olamaz . Ve 8x IPC'de, dal belirleyicilerinin döngü başına 8 kat daha fazla tahmin üretmesinin yanı sıra daha doğru olmaları gerekir.


Sıra dışı yürütme işlemcileri oluşturmak için mevcut teknikler yalnızca kısa mesafelerde ILP'yi bulabilir . Örneğin, Skylake'in ROB boyutu 224 kaynaşık alanlı etki alanı, yürütülmemiş işlerin zamanlayıcısı 97 kaynaşık etki alanıdır. Zamanlayıcı boyutunun ILP'nin çok uzun sürmesi durumunda 2 uzun komut zincirinden çıkarılmasında sınırlayıcı bir faktör olduğu bir durum için uzunlukların artması için , iki uzun bağımlılık zincirine sahip bir halka üzerindeki etkinin anlaşılması bölümüne bakınız . Ve / veya bu daha genel ve tanıtım cevabını görün ).

Dolayısıyla, iki ayrı uzun döngü arasında ILP'yi bulmak, donanımla yapabileceğimiz bir şey değildir. Döngü füzyonu için dinamik ikili yeniden derleme bazı durumlarda mümkün olabilir, ancak Transmeta Crusoe yoluna gitmedikleri sürece işlemcilerin yapabileceği bir şey yoktur. (farklı bir iç ISA'nın üstüne x86 öykünme katmanı; bu durumda VLIW). Ancak uop önbellekleri ve güçlü kod çözücüleri olan standart modern x86 tasarımları çoğu kod için kolay değildir.

Ve x86'nın dışında, hala kullanımda olan tüm ISA'ların kodunu çözmek nispeten kolaydır, bu nedenle uzun mesafeli optimizasyonlardan başka dinamik bir yeniden derleme için motivasyon yoktur. TL: DR: donanıma daha fazla ILP getirebilecek sihirli derleyiciler için umut, Itanium IA-64 için işe yaramadı ve seri bir yürütme modeline sahip mevcut herhangi bir ISA için süper geniş bir CPU için çalışma olasılığı düşük.


Süper geniş bir CPU'nuz olsaydı, SMT'yi desteklemesini kesinlikle isterdiniz, böylece birden çok düşük ILP iş parçacığı çalıştırarak yapılacak işle beslenmesini sağlayabilirsiniz.

Skylake şu anda 4 uop genişliğinde (ve saatte 2 ila 3 uop gerçek bir IPC elde etmekte, hatta yüksek verimli kodda 4'e yakın olsa da), varsayımsal 8x daha geniş bir CPU 32 genişlikte olacaktır!

Bunu, bu yürütme kaynaklarını dinamik olarak paylaşan 8 veya 16 mantıksal CPU'ya ayırabilmek harika olurdu: duraksamayan dişliler tüm ön uç bant genişliğini ve arka uç verimini elde eder.

Ancak 8 ayrı çekirdekle, bir iplik durduğunda yürütme birimlerini beslemek için başka hiçbir şey yoktur; diğer konular fayda sağlamıyor.

İnfaz çoğu zaman patlaktır: yüklenen bir önbellek boşalmasını bekler, sonra paralel olarak birçok talimat geldiğinde bu sonucu kullanabilir. Süper geniş bir CPU ile bu patlama daha hızlı ilerleyebilir ve aslında SMT'ye yardımcı olabilir.


Fakat büyülü süper geniş CPU'larımız olamaz.

Dolayısıyla, verim kazanmak için, bunun yerine donanıma donanım düzeyinde paralellik biçiminde göstermek zorundayız . Genelde derleyiciler çok büyük döngüler gibi basit durumlar dışında ne zaman / nasıl diş kullanılacağını bilmek konusunda mükemmel değildir. (OpenMP veya gcc'ler -ftree-parallelize-loops). İşbirliği arası iletişimin pahalı olması ve iş parçacığı başlangıcı için aynı zamanda, verimli bir şekilde paralel işlerin verimli bir şekilde yapılması için kodun yeniden çalışılması hala insanın akıllılığını gerektirir.

TLP, HW'nin yararlanabileceği tek bir yürütme iş parçacığı içindeki ince taneli ILP'den farklı olarak kaba taneli paralelliktir.


Etkileşimli iş yüklerini hedefleyen CPU'lar (Intel / AMD x86 ve Apple / ARM AArch64 high-end core'lar gibi) kesinlikle IPC ölçeklemesinin azalan getirilerine itiyor, çünkü sadece iş parçacığı için gecikme söz konusu olduğunda , tek iş parçacıklı performans hala çok değerli büyük ölçüde paralel problemler.

Bir oyunun 8 kopyasının 15 fps'de paralel olarak çalıştırılabilmesi, her birinin 45 fps'de bir kopyasını çalıştırabilmekten çok daha az değerlidir. İşlemci satıcıları bunu bilir ve bu nedenle modern işlemciler, önemli bir güç ve kalıp alanına mal olmasına rağmen, sıra dışı çalıştırmayı kullanır. (Ancak GPU'lar iş yükleri zaten büyük ölçüde paralel olduğu için değil).

Intel'in çok çekirdekli Xeon Phi donanımı (Knight's Landing / Knight's Mill) ilginç bir yarı yol noktasıdır: AVT512 SIMD talimatlarıyla beslenen 2 genişliğindeki çekirdeği sayıları azaltmak için beslemek için çok sınırlı sıra dışı uygulama ve SMT. Çekirdekler, Intel'in düşük güçlü Silvermont mimarisine dayanıyor. (Sıra dışı çalıştırma, ancak büyük çekirdekli Sandybridge ailesinden çok daha küçük olan küçük bir yeniden düzenleme penceresi ve daha dar bir boru hattıyla.)


Btw, tüm bu simd için diktir. Her bir talimat için daha fazla iş yapılması her zaman yardımcı olur, eğer probleminiz mümkün ise.


Fiyatlandırma modelleri

Yazılım fiyatlandırma modelleri, şu anki donanım ortamına dayanmaktadır.

Çekirdek başına lisans modelleri, çok çekirdekli işlemcilerin ortaya çıkmasıyla daha yaygınlaştı (ve tek soketli masaüstü bilgisayarlarla bile alakalı). Ondan önce, sadece sunucular ve büyük iş istasyonları ile ilgiliydi.

Yazılımın en yüksek hızda çalışması için birden fazla çekirdeğe ihtiyacı olmasaydı, onu daha fazla işlem yapamayan insanlara daha ucuza satmanın bir yolu olmazdı çünkü daha zayıf bir CPU'da çalıştırdılar. Belki de yazılım / donanım ekosistemi "SMT kanalları" üzerindeki kontrolleri geliştirmediyse, bu mantıksal çekirdekte çalışan kod için maksimum yürütme genişliğini konfigüre etmenize izin verir. (Yine, CPU'ların birden fazla ayrı çekirdek yerine boru hattı genişliğinde ölçeklendiği bir dünya hayal etmek.)


2
"iş parçacığı başlatma pahalı" - bu zor bir gerçek değil; bu ortak modern İşletim Sistemlerinin bir eseridir.
MSalters

1
@ MSalters Gerçekten de, bazı araştırma projeleri bu yaklaşımı bırakmanın ne kadar harika olacağını araştırdı. Aynı şekilde "yeniden kodlamada insanın akıllılığı" ile paralel hale getirilmesi doğal olarak daha kolay olan kod yazma yolları vardır, sadece son birkaç on yılda çok popüler olmadılar. Nerede edilir kullanılan, genellikle çok düşük maliyetle büyük yatay ölçeklendirme görebilirsiniz; Aslında, birçok uygulamada yatay ölçeklendirmenin dikeyden çok daha ucuz olmaya başladığı noktaya kadar. Bu, yalnızca geliştiricilere seçim yapmamanız gerektiği anlamına gelir - koşullar zorlarsa iyi çalışır: D
Luaan

11

Bir benzetme çizeyim:

Bir daktiloda yazarak bir maymunuz varsa ve daha fazla yazmaya çalışmak istiyorsanız, maymun kahvesini, dersleri yazabilir ve belki de daha hızlı çalışmasını sağlamak için tehdit oluşturabilirsiniz, ancak maymunun çalışacağı bir nokta vardır. maksimum kapasitede yazıyor olmak.

Bu yüzden daha fazla yazı yazmak istiyorsanız, daha fazla maymun almanız gerekir.


Analojiyi daha da genişletmek için, her maymun için ayrı ayrı bir daktilo gerekir (her çekirdeğin ihtiyaç duyacağı veri yolunu temsil eder), her maymuna muz koymanın bir yolunu ve dışkılarını toplayacak bir şey (güç dağılımı ve ısıya benzer) dağıtma) ve On İki Gecede maymunların aynı geçişi yazmaya çalışmadıklarından emin olmanın bir yoluna ihtiyacınız var (iş yükünü işlemciler arasında doğru şekilde bölmeye benzer). Ancak bunların hepsi, bir maymunun daha fazla yazmaya başlamasından daha fazla kazanç için daha az iş.


7

Çok fazla yazılımın (x) çekirdeğinden fazlasını kullanmadığına dikkat çekiyorsunuz. Ancak bu tamamen bu yazılımın tasarımcıları tarafından uygulanan bir sınırlamadır. Birden fazla çekirdeğe sahip olan ev bilgisayarları hala yeni (ish) ve çok iş parçacıklı yazılım tasarlamak da geleneksel API'ler ve dillerle daha zor.

Bilgisayarınız ayrıca sadece bu 1 programı çalıştırmıyor. Daha az aktif çekirdeğe konabilen bir sürü başka şey yapıyor, böylece birincil yazılımınız onlar tarafından kesintiye uğramaz.

Şu anda 8 çekirdeğin verimine uygun tek bir çekirdeğin hızını artırmak mümkün değil. Yeni mimariden daha fazla hızın gelmesi muhtemel.

Daha fazla çekirdek yaygın olarak kullanılabildiğinden ve API'ler bu varsayımla tasarlandığından, programcılar daha fazla çekirdek kullanmaya başlayacaktır. Çok iş parçacıklı tasarımların yapılmasını kolaylaştırmak için çalışmalar devam etmektedir. Bu soruyu birkaç yıl içinde sorsanız, muhtemelen "Oyunlarım genelde 32 çekirdeği kullanıyor, peki neden CPU'm 256'sı var?"


3
1 ile çoklu çekirdek arasındaki fark, yazılımın avantajlarından yararlanabilmesi açısından çok büyük . Çoğu algoritma ve program seridir. mesela Donald Knuth söylediği HW tasarımcıları gibi multi-core işlemciler bakmak olduğunu " bize makineleri vererek yazılım yazarlara Moore Yasasının geleceği ölümü için suçu geçiş yapmaya çalışan bu hızlı sadece birkaç anahtar kriterler üzerinde iş! "
Peter Cordes

Maalesef hiç kimse, tek bir geniş / hızlı çekirdeği, tek çekirdekli bir programı, çok çekirdekte çalıştırmak için verimli bir şekilde paralel kod alabileceğimiz en kısa sürede, tek dişli bir program çalıştırmanın bir yolunu bulamadı. Ancak neyse ki CPU tasarımcıları, tek iş parçacıklı performansın hala kritik olduğunu fark ediyor ve her bir çekirdeği, paralel problemlerde saf iş çıktısı için olacaklarından çok daha büyük ve daha güçlü kılıyor. (Bir Skylake (4 genişliğinde) veya Ryzen (5 genişliğinde) ile Xeon Phi (Silvermont + AVX512 tabanlı Knight's Landing / Knight's Değirmeni) çekirdeğini karşılaştırın. (2 genişlik ve sınırlı OoO exec)
Peter Cordes

2
Her neyse, evet, en az 2 çekirdeğe sahip olmak çok görevli bir işletim sistemi için genellikle yararlıdır, ancak mevcut bir CPU kadar hızlı bir şekilde 4x veya 8x olan tek bir çekirdekte ön-işlemcili çoklu görevler çok iyi olurdu. Pek çok etkileşimli kullanım durumları için, aynı güç bütçesiyle bir bütün halinde / mümkün olsaydı daha iyi olurdu. (Çift çekirdekli, çoklu görevler olsa da CPU zamanı istediğinde içerik değiştirme maliyetlerini azaltmaya yardımcı oluyor.)
Peter Cordes

1
Hepsi doğru, ama tarihsel olarak çok çekirdekli daha pahalıydı. Bilimsel uygulamaların dışında paralel algoritmalar tasarlamak için pek çok neden yoktu. Çoğunlukla seri yürütme gerektiren algoritmalarda bile, paralelleştirme için çok yer var. Ancak şu anki nesil IPC mükemmel değildir ve karıştırılması kolaydır. Bu genellikle bulmak ve düzeltmek gerçekten zor olan hatalarla sonuçlanır. Elbette 4 kat daha hızlı bir CPU şaşırtıcı olurdu (ama yine de birden fazla çekirdek isteyeceksin).
hekete

2
Onlar çünkü @PeterCordes Eh, en algoritmalar ve programlar seri olmayan var olmak, ama bu her zaman de yapıldı yoludur çünkü çoğunlukla (bir tutam "iyi bir denge olduğunu"). En korkunç vakalar, aynı programı dört ayrı iş yükünde dört kez çalıştırabileceğiniz ve hiçbir sorun yaşamadan paralel olarak çalıştırabileceğiniz durumlar. Fakat bu başka bir soruna yol açar - CPU sık sık bir tıkanıklık değildir ve genellikle bunun yolunda daha fazla CPU değil, daha iyi algoritmalar kullanmaktır. Bazen bunlar diğer darboğazlara da yardımcı olur (bellek, disk, ağ ...).
Luaan

3

Tarihsel bir bakış açısından en zorlayıcı sebep güç tüketimidir .

Pentium IV'ten sonra, Intel, 4 GHz - 12 GHz aralığında çalışması beklenen, Tejas adlı yeni nesil bir işlemci kodunu takip etmeye çalıştı. Sorun, bu hızda koşmanın canlı olamayacak kadar fazla ısı üretmesiydi.

Tejalar iptal edildikten sonra, Intel, 4 GHz'de kabul edilebilir ısı seviyelerinde çalışan çekirdeklere sahip olmadan önce 10 ila 15 yıl daha aldı.

Teja ve Jayhawk'ı görün .

Intel, Tejas'a paralel olarak birden fazla çekirdek kullanmayı içeren başka bir projeye sahipti. Bu projenin kabul edilebilir bir ısı seviyesi vardı, o yüzden işte böyle oldu. 10 nm üretim işlemleri için 10 yıl daha beklemek yerine, şimdi performansı artırmalarına izin verdi.

Çekirdeklerin kaynak açlığı olmadığı varsayılırsa, o zaman N çekirdek yerine tek bir çekirdekten saniyede aynı sayıda komut almak için, tek çekirdeğin komut hızının N kat daha hızlı olması gerekir. Bir CPU çekirdeğinin dinamik güç dağılımı, çalışma frekansıyla doğrusal olarak orantılıdır. Aynı zamanda çalışma voltajının karesiyle orantılıdır. Düşük frekanslarda çalışmak, düşük işletme voltajlarının kullanılmasına izin verir. Düşük frekanslarda düşük voltaj kullanılması, pratik olarak üretilen ısının çalışma frekansının küpüyle azalması anlamına gelir .

Bunun en uç örneği, yalnızca 20 W güç kullanarak saniyede 2 ^ 18 işlem eşdeğerini gerçekleştirebilen insan beynidir. Bunu sadece birkaç yüz Hz'de paralel çalışan milyarlarca nöron kullanarak başarır.

Ayrıca, genellikle bir bilgisayarda aynı anda çalışan yüzlerce veya binlerce iş parçacığı olduğunu unutmayın. İşletim sistemi her çekirdeğe bir çekirdek üzerinde zaman tahsis eder. Dolayısıyla, bir program tüm çekirdeklerden faydalanmasa bile, yine de yarar sağlar, çünkü diğer programlar başka bir çekirdekte çalışırlarsa CPU zamanından daha az faydalanırlar.

Eğer bir şey varsa, yüksek performanslı pazar FPGA'lar şeklinde daha paralel işlemeye geçiyor. Intel kısa süre önce Altera'yı (ikinci en büyük FPGA üreticisi) aldı ve şimdi üzerinde FPGA donanım hızlandırıcılı panoları satıyor. Yazılım, API çağrısını kullanarak FPGA'yı çalışma zamanında bir görüntüyle yükleyebilir. CPU daha sonra FPGA'ya veri besler ve işin çoğunu yapmasına izin verir. Uygulama türleri genellikle video kodlaması, AI, oluşturma, veritabanı araması vb.


Ayrıca, genellikle bir bilgisayarda aynı anda çalışan yüzlerce veya binlerce iş parçacığı olduğunu unutmayın. Hayır, koşmuyorum . Modern masaüstlerinde birçok iş parçacığı var, ancak neredeyse hepsi belirli bir zamanda G / Ç ya da bir zamanlayıcı için uykuda. örneğin, Linux masaüstümdeki yük ortalaması (son dakikada) şu anda 0.19 görevdir ve herhangi bir anda CPU süresini kullanmaya hazırdır. Bir video kodlaması çalıştırıyor olsaydım, x264 işletim sisteminin birden fazla çekirdek üzerinde zamanlaması için birden fazla iş parçacığı başlatırdı, ancak yalnızca mantıksal çekirdeğim olduğu kadar.
Peter Cordes

Ve BTW, OP (nedense) tamamen frekansı atladı ve saniyede değil IPC'yi (saat döngüsü başına talimatlar) ölçeklendirmeyi istedi. Söyledikleriniz doğru, ancak işlemcileri daha yüksek saatlere değil daha geniş hale getirmeyi teklif ediyorlardı . Ben zaten cevabımda değildim, bu yüzden sıklığı ile güç ölçeklendirmeyi açıklayan cevabınız güzel bir ek, +1.
Peter Cordes

@PeterCordes Bu doğru, tüm iş parçacıklarının bir kerede yürütüldüğünü ima etmek istemedim, tabii ki sırayla. Aydınlattığın için teşekkürler.
user4574

Eh, çoğu zaman, hiç koşmaya hazır olmadıkları için "sırayla" değil. Çoğunlukla uykudalar, genellikle sadece kısa bir hesaplama patlaması için uyanıyorlar; örneğin, işletim sistemi bir tuşa basıldığında veya bir ağ okuduğunda veya bir zamanlayıcı süresi dolduğundan onları uyandırdıktan sonra. Hesaplamalı olarak yoğun bir şey yapmıyorsanız, aynı anda 2'den fazla kişinin uyanık olması nadirdir. Ve eğer öyleyse, yüzlerce iş parçacığı başlatmazsın, bir dizi iş parçacığı başlatırsın ~ = kullanılabilir çekirdeklerin sayısı.
Peter Cordes

2

Sadece tüm bunların nereye gittiğinin resmini çıkarmak için ...

Yapay Sinir Ağları ve AI, o anın en sıcak konularıdır. Bunun bir nedeni, çok sayıda basit çekirdeği paralel olarak verimli bir şekilde kullanabilmektir ve bu nedenle maksimum hesaplama performansına yakın bir değer elde edebilmektedir. Bu gereksinim, doğası gereği kitlesel olarak paraleldir ve çekirdekler arasında fazla iletişim gerektirmeden bir dizi işlemciye oldukça kolay bir şekilde eşlenir. Bu nedenle, GPU'lar AI hızlandırması için ilk goto teknolojisiydi. Şu anda, NN'lerin piyasaya sunulması için video GPU'lardan daha iyi optimize edilmiş fişler görüyoruz. Bir sonraki veya belki de son adım, NN'leri memristor gibi analog teknolojiler kullanarak yapmaktır.

Ve bir yana, bir oyun bilgisayarı gibi bir şeyde, grafik kartında çok çekirdekli Intel veya AMD işlemciden çok daha fazla ham performans var.


2
Re "... kendiliğinden kitlesel paralel" : utanç verici derecede paralel bile mi?
Peter Mortensen

1

Temel olarak, CMOS kayıpları katlanarak (^ 1,5), frekansla orantılıdır ve paralel CPU performansı, CPU sayısıyla orantılı olarak biraz daha azdır.

Bu nedenle, hesaplama gücünün güç dağıtımına oranı, sabit bir güç dağıtımı için CPU'ların miktarı ile kıyaslandığında farklı saat hızlarında çoklu CPU uygulamaları için geliştirilmiştir.

Bundan daha karmaşık, ancak bunlar paralel işlemcilerin dinamik uygulamalarda Watt başına daha iyi patlama yapmasının temelleri. Bir senaryo için optimize edildiğinde her zaman istisnalar olacaktır.

Intel / AMD tipik PC uygulamaları için daha hızlı kılan daha büyük bir CPU boyutu değil, litografik çözünürlük ve düşük eşik seviyesi ve Çekirdek gerilimi ile birlikte gücü azaltan daha düşük geçit kapasitansından küçültülmüş boyuttur.

İyileştirme doğrusal değildir ve 8 çekirdeğin 2 kattan 4 kat daha iyi olduğu anlamına gelmez, ancak bunun yerine getirilmesinin amacı, güç tüketiminin azaltılması, hız ve voltajın azaltılmasıyla talep edilen performans ve verimi artırmak için daha fazla işlem dinamik aralığına sahip olmaktır. aşırı sıcaklık artışı.

Daha bilimsel bir cevap için https://www.sciencedirect.com/topics/computer-science/dynamic-power-consumption


-2

Multicores genellikle multiskalar değildir. Ve multiskalar çekirdekler multicore değildir.

Birkaç megahertzde çalışan çok katlı bir mimariyi bulmak mükemmel olurdu, ancak genel olarak köprüleri tüketici tarafından etkin olmayacaktı, ancak masraflıydı, bu yüzden eğilim yüksek saat hızlarında kısa talimatlardan ziyade daha düşük frekansta çok çekirdekli programlamadır.

Çoklu talimat çekirdeği daha ucuz ve kolay yönetiliyor ve bu yüzden birkaç gigahertz'de multiskalar mimarilere sahip olmak kötü bir fikir.


1
"Süper yıldız" mı demek istiyorsunuz, saat başına çoklu talimatlar? Çok çekirdekli işlemcilerin çoğu süperskalardır. örneğin Ryzen 5 genişliğindedir. Apple'ın en gelişmiş AArch64 cipsleri 6 veya 8 genişliğindedir. 2 genişlikli bir işlemcinin çoğu kodda yararlanabileceği bir sürü düşük asılı meyve var, bu yüzden her çekirdeğin kendi özel önbelleklerine ihtiyaç duyan birden çok çekirdeğe ölçeklendirme yapmadan önce her çekirdeği en az 2 genişlikte oluşturmaya değiyor ( Örneğin, Intel'in Xeon Phi çok çekirdekli bilgi işlem kartlarında çift çekirdekli çekirdek sayısı çok fazladır). Akıllı telefon çekirdekleri için de aynı: küçük çekirdekler en az 2 genişliğindedir. Tek dişli performans önemli!
Peter Cordes,

1
Yoksa dl.acm.org/citation.cfm?id=224451 - ILP'yi yüksek seviye bir programın kontrol-akış grafiğinde daha geniş aralıklarla aradıkları hakkında bir araştırma makalesi kullanarak mı demek istediniz? HW ve SW kombinasyonu. Masaüstü bilgisayarlarda ve akıllı telefonlarda kullandığımız ana işlemciler bu şekilde değildir , sıra dışı çalıştırma ile sıradan bir üst üste binerler ve talimatları teker teker uygular gibi davranan seri bir ISA uygularlar.
Peter Cordes

Teşekkürler. afaik, skaler kemerin arkasındaki fikir, bilinen veya önceden tanımlanmış talimatların (AVX örneğinde) arkasındaki ısının ölçülebilirliğidir. <br/> Mevcut mimarilerin hesaplanması ile ısı karşılaştırması hesaplanamaz şekilde tahmin edilemez. bu, zaman / sıcaklık idealini gerçekleştirme yetenekleri hesaplanamadığından, çoklu frekansların büyük frekanslarda çalışabileceği imkansızlığı arttırır. Şimdiye kadar bildiğim buydu. "multiskalar" fiziğini anlamak için vektör makinelerini kazıyorum. durum, xeon / phy'dir, antik cpus'un yaptığı gibi ideal bir termal eğri izler. müşteri deneyimini geliştirmek
machtur

AVX gibi SIMD komut setleri, boru hattının tamamını, sadece yürütme birimlerini genişletmek zorunda kalmadan boru hattı boyunca daha fazla çalışma elde etmenin bir yoludur . Örneğin, Skylake vpaddd ymm0, ymm1, ymm2her biri 8 paketlenmiş 32 bit tamsayı toplama işlemi gerçekleştiren, saat başına 3 komut çalıştırabilir . Bu yüzden saat başına 24 tamsayı ekler ancak sıra dışı çalıştırma makinelerinin "sadece" uçuş sırasındaki 3 talimatı takip etmesi gerekir. Budur kadar 24 çalıştırabilir bir CPU daha sürüme ucuz add eax, edxsaat başına talimatları. SIMD temel olarak boru hattının genişliğine diktir.
Peter Cordes

Skylake, saat döngüsü başına optimizasyon için iyi bir durumdur. Varil sayısız değişkenler, bunlara dahil değilim, çünkü skylakes Xeon orjinal boşalmasını SIMD boru hattına bu şekilde entegre ettiğinden, dahili veri yolu optimizasyonunun ilginç durumlarıdır. Büyük bir çekirdeğin, boşaltma ve hesaplamayı, fenominin AVX için olduğu gibi (bir örnek olarak) birkaç döngü halinde entegre edeceğini varsayıyorum. Hesaplamanın, iç blok operasyonları için gereken güce karşı ileriye entegre olma yolu. gibi çok sayıda kısa talimatlarına oposite olarak GPU benzeri Nehalem'in eklemeler ya benzer çoklu "sanal" çekirdekler
machtur
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.