Neden hala GPU'lar yerine CPU kullanıyoruz?


373

Bana öyle geliyor ki, bugünlerde GPU'da çok fazla hesaplama yapıldı. Açıkçası grafikler orada yapılır, ancak CUDA ve benzerleri kullanılarak AI, karma algoritmalar (düşün bitcoins) ve diğerleri de GPU'da yapılır. Neden sadece CPU'dan kurtulup GPU'yu kendi başımıza kullanamıyoruz? GPU'yu CPU'dan çok daha hızlı yapan şey nedir?


3
Hangi cevapların doğru bilgi içerdiğini nasıl bilebilirim? Diğerleri yukarı / aşağı oy verene kadar beklemeli miyim? Sanırım bir yanıtı kabul etmekte çok acelem var: O
ell

14
Şu anda bazı "yanlış bilgi" içermeyen bazı cevaplar var. Harika tasarlanan StackExchange'in etkin piyasa mekanizması sayesinde kademeli olarak yukarıdan yukarıya yükseliyorlar ;-) Bir cevabı kabul etmeden önce biraz daha beklemenizi öneririm. Görünüşe göre çok ihtiyatlı bir şekilde yapıyorsun. Bu arada, bu iyi bir soru. Belli gözüküyor olabilir ama hiç değil. Sorduğun için teşekkürler!
Ellie Kesselman

124
"Boeing 747 daha hızlı ve daha yakıt verimli ise, neden hala araba kullanıyoruz?"
vartec

7
Hayır, çünkü CISC'ye karşı RISC değil. Hafifçe gizlenmiş diğer bilgisayar bilimi temellerinden biridir. O var "biz I / O işlemcileri üzerine merkezi işlemciden iş yükünü sebebi ne olabilir?" .
JdeBP

5
@vartec: Otobüsler ve taksiler arasında biraz daha iyi bir benzetme olabileceğini düşünüyorum. Aynı yerden aynı yere gitmek isteyen kırk kişi varsa, otobüs çok daha verimli olacaktır. İstenilen kökenleri ve varış yerleri geniş çapta dağılmış kırk kişi varsa, tek bir taksici bile bir otobüs kadar iyi olabilir ve otobüsün maliyeti için bir kişinin taksilerden biri olabilir.
supercat

Yanıtlar:


388

TL; DR cevabı: GPU'lar CPU'lardan çok daha fazla işlemci çekirdeğine sahiptir, ancak her GPU çekirdeği bir CPU çekirdeğinden çok daha yavaş çalıştığından ve modern işletim sistemleri için gereken özelliklere sahip olmadığından, işlemlerin çoğunu her gün gerçekleştirmek için uygun değillerdir. bilgi işlem. Video işleme ve fizik simülasyonları gibi hesaplama-yoğun işlemler için çok uygundurlar.


GPGPU hala nispeten yeni bir kavramdır. GPU'lar başlangıçta yalnızca grafik oluşturmak için kullanıldı; Teknoloji geliştikçe, GPU'larda CPU'lara kıyasla çok sayıda çekirdek, GPU'lar için hesaplama yetenekleri geliştirilerek, bu veriler ne olursa olsun, birçok paralel veri akışını aynı anda işleyebilmeleri için kullanıldı. GPU'lar yüzlerce hatta binlerce akış işlemcisine sahip olabilirken, her biri bir CPU çekirdeğinden daha yavaş çalışır ve daha az özelliğe sahiptir ( Tamamlanıyor olsalar ve bir CPU'nun çalıştırabileceği herhangi bir programı çalıştırmak için programlanabilirler). GPU'larda eksik olan özellikler, modern bir işletim sistemini uygulamak için gereken kesintileri ve sanal belleği içerir.

Başka bir deyişle, CPU ve GPU'lar, farklı görevlere daha uygun olmalarını sağlayan önemli ölçüde farklı mimarilere sahiptir. Bir GPU, çok sayıda veri akışında büyük miktarlarda veri işleyebilir, bunlar üzerinde nispeten basit işlemler gerçekleştirebilir, ancak tek veya birkaç veri akışı üzerinde ağır veya karmaşık işlemler için uygun değildir. Bir CPU, çekirdek bazında (saniye başına komutlar açısından) çok daha hızlıdır ve tek veya birkaç veri akışı üzerinde karmaşık işlemleri daha kolay gerçekleştirebilir, ancak birçok akışı aynı anda verimli bir şekilde işleyemez.

Sonuç olarak, GPU'lar, kelime işlemciler gibi birçok yaygın tüketici uygulaması da dahil olmak üzere, önemli ölçüde fayda sağlamayan veya paralelleştirilemeyen görevleri yerine getirmek için uygun değildir. Ayrıca, GPU'lar temelde farklı bir mimari kullanır; Birinin çalışması için özel olarak bir GPU için bir program programlaması gerekir ve GPU'ları programlamak için önemli ölçüde farklı teknikler gerekir. Bu farklı teknikler arasında yeni programlama dilleri, mevcut dillerdeki değişiklikler ve birçok akış işlemcisi tarafından gerçekleştirilecek paralel bir işlem olarak bir hesaplamanın ifade edilmesine daha uygun olan yeni programlama paradigmaları bulunur. GPU'ları programlamak için gerekli teknikler hakkında daha fazla bilgi için, akış işleme ve paralel hesaplama hakkındaki Wikipedia makalelerine bakın .

Modern GPU'lar, vektör işlemlerini ve kayan nokta aritmetik işlemlerini yapabilir, en son kartları çift duyarlıklı kayan nokta sayılarını değiştirebilir. CUDA ve OpenCL gibi çerçeveler, programların GPU'lara yazılmasını sağlar ve GPU'ların doğası, onları bir dizi özel GPU bilgi işlem kartının küçük bir kişi için uygun bir yedek olabilir. kümeyi NVIDIA Tesla Personal Supercomputers'taki gibi hesaplayın . Folding @ home ile deneyimli modern GPU'lara sahip tüketiciler, bunları GPU müşterilerine katkıda bulunmak için kullanabilir , bunlar protein katlama simülasyonlarını çok yüksek hızlarda yapabilir ve projeye daha fazla çalışmaya katkıda bulunabilir ( SSS bölümünü okuduğunuzdan emin olun)öncelikle, özellikle GPU'larla ilgili olanlar). GPU ayrıca, PhysX kullanarak video oyunlarında daha iyi fizik simülasyonu sağlayabilir, video kodlama ve kod çözmeyi hızlandırabilir ve diğer hesaplama yoğun görevleri gerçekleştirebilir. GPU'ların gerçekleştirmek için en uygun olduğu bu tür görevlerdir.

AMD, geleneksel x86 CPU çekirdeğini GPU'larla birleştiren Hızlandırılmış İşlem Birimi (APU) adlı bir işlemci tasarımına öncülük ediyor . Bu yaklaşım, anakart entegre grafik çözümlerinden çok daha üstün grafiksel performans sağlar (daha pahalı ayrık GPU'lar için uygun olmasa da) ve ayrı bir GPU'ya gerek olmadan iyi multimedya performansına sahip kompakt, düşük maliyetli bir sistem sağlar. En yeni Intel işlemciler de yonga üzerinde tümleşik grafikler sunarken, rekabetçi entegre GPU performansı şu anda Intel Iris Pro Graphics ile birkaç yonga ile sınırlı. Teknoloji ilerlemeye devam ettikçe, bu ayrı ayrı parçaların artan bir yakınsama derecesini göreceğiz. AMD öngörüyorCPU ve GPU’nun bir olduğu ve aynı görevde sorunsuzca çalışabileceği bir gelecek .

Bununla birlikte, PC işletim sistemleri ve uygulamaları tarafından gerçekleştirilen birçok görev CPU'lar için hala daha uygundur ve bir GPU kullanarak bir programı hızlandırmak için çok çalışmaya ihtiyaç vardır. Mevcut yazılımların çoğu x86 mimarisini kullandığından ve GPU'lar farklı programlama teknikleri gerektirdiğinden ve işletim sistemleri için gerekli birçok önemli özelliğe sahip olmadığından, günlük hesaplama için CPU'dan GPU'ya genel bir geçiş çok zordur.


39
Bu cevap gibi, bence asıl sebep, bunun gibi paralel mimarilerle ilgilenmek için iyi bir ana akım programlama dili olmamasıdır. Onlarca yıldır çok iş parçacıklı programlamayı ilerletmek için uğraştık ve insanlar hala çok iş parçacığı "kötülük" diyor. Buna rağmen, çok çekirdekli işlemciler ve GPU'lar bir gerçektir ve bununla başa çıkmak için yeni programlama paradigmaları bulmalıyız.
Soren

Intel'in , esasen üzerinde çok sayıda x86 çekirdeği bulunan bir yonga olan Larrabee mimarisi (çok uzun zamandır) üzerinde çalıştığını belirtmek gerekir.
Chris S,

Donanım nedenlerini tartışmak ve APU'ları tartışmak ve bunu nasıl değiştireceklerini tartışmak için harika bir cevap. Ancak, @Soren yazılım tarafında çok iyi bir nokta verir. Gerçekte, donanım sorunlarının, yazılım sorunlarının ve CPU'ların çalışması ve bir şeyin işe yaradığı bilindiğinde, insanların yerini alması zor.
Nich Del,

3
"Bunun gibi paralel mimarilerle ilgilenmek için iyi bir ana akım programlama dili yok." - Haskell, OCaml, Scheme, F #, Erlang ve hemen hemen tüm diğer işlevsel programlama dilleri okuyuculu olarak çok iyi çalışıyor. Bahsettiğim her şey ana akım.
BlueRaja - Danny Pflughoeft

1
@BlueRaja - bu dillerin farkındayız, ana akış tanımınız benimkinden farklı olmalı :-)
Soren

252

GPU'yu CPU'dan çok daha hızlı yapan şey nedir?

GPU, CPU'dan daha hızlı değil . İşlemci ve GPU, farklı kazançlarla iki farklı amaç için tasarlanmıştır, bu nedenle farklı performans özelliklerine sahiptirler. Bazı görevler CPU'da daha hızlıdır, diğer işler ise GPU'da daha hızlı hesaplanır. CPU, küçük bir veri kümesine karmaşık manipülasyonlar yaparken, GPU büyük bir veri kümesine basit manipülasyonlar yaparken mükemmeldir.

GPU, tek bir komutun hepsi aynı işlemi uygulayan büyük bir veri bloğu (SIMD / Tek Yönelik Çoklu Veri) üzerinde çalışacak şekilde tasarlanmış, özel amaçlı bir CPU'dur. Veri bloklarında çalışmak, her seferinde tek bir hücreyle çalışmaktan kesinlikle daha verimlidir çünkü talimatların kodunu çözmek için çok daha düşük bir ek yük vardır, ancak büyük bloklarda çalışmak, daha fazla paralel çalışma birimi olduğu anlamına gelir, bu nedenle çok daha fazla transistör kullanır Tek bir GPU talimatı uygulamak (fiziksel boyut kısıtlamasına neden olmak, daha fazla enerji kullanmak ve daha fazla ısı üretmek).

CPU, tek bir veriyi tek bir veri üzerinde olabildiğince çabuk yürütmek için tasarlanmıştır. Sadece tek bir referans noktası ile çalışması gerektiğinden, tek bir talimatın uygulanması için gereken transistörlerin sayısı çok daha azdır, böylece bir CPU daha büyük bir komut setine, daha karmaşık bir ALU'ya, daha iyi bir dal kestirimine, daha iyi sanallaştırmaya sahip olabilir. mimarisi ve daha sofistike bir önbellek / boru hattı şemaları. Öğretim çevrimleri de daha hızlı.

Biz hala CPU kullanıyorsanız nedeni budur değil bir OS yapması gereken görevlerin tür yani kararlar nedeniyle x86 işlemci mimarisi kralıdır ve Windows x86 için yazılmıştır çünkü, hala CPU kullanıyorsanız nedeni budur, bir CPU mimarisinde daha verimli çalışır. Bir işletim sisteminin 100'lerce farklı veri türüne bakması ve hepsinin birbirine bağlı olduğu çeşitli kararlar vermesi gerekir; bu tür bir iş, en azından bir SIMD mimarisine kolayca paralel değildir.

Gelecekte, göreceğimiz şey CPU ile GPU mimarisi arasında bir yakınsama olması, CPU'nun veri blokları üzerinde çalışabilme kabiliyeti kazanması, örneğin SSE. Ayrıca, üretim teknolojisi geliştikçe ve talaşlar küçüldükçe, GPU daha karmaşık talimatlar uygulayabilir.


23
Bu muhtemelen buradaki en iyi cevap. İki paradigma arasındaki temel farklılıkları anlamak önemlidir. GPU'ların CPU'ları devralması için, bugünün iş yüklerini göz önünde bulundurarak, temel olarak bir GPU'nun bir CPU'ya dönüşmesi gerektiği anlamına gelir. Ve böylece soru cevaptır.
surfasb

2
Bunun için +1 en iyi cevap. Hem bu hem de kabul edilen cevap doğru, ama bu çok daha net bir şekilde açıklıyor.

Bu konudaki hiç kimsenin GPU'ya veri gönderme ek yükünden bahsetmediğine şaşırdım - PCI-Express veri yolları üzerindeki sınırlı bant genişliği GPU'daki bazı paralel işlemlerin CPU'da gerçekleştirildiğinden çok daha yavaş gerçekleşmesine neden oluyor. Bir FFT'nin boyutunun değiştirilmesinin, veri gönderme, bir içerik oluşturma, sonuçların geri okunması nedeniyle GPU ve CPU üzerinde performansta önemli bir fark yarattığı basit bir durum görülebilir: stackoverflow.com/a/8687732/303612 İşlemcilerde önbelleklerde daha küçük işlemler yapılabilir ve bellek bant genişliği mevcut PCI-E mimarisinden oldukça üstündür
Dr. Andrew Burnett-Thompson

1
@ Dr.AndrewBurnett-Thompson: çünkü bu soru ile alakasız. Şu anda, GPU yardımcı bir işlem birimi olarak kabul edilmektedir, bu yüzden verileri GPU'dan / GPU'ya taşımak gerekli ve pahalıdır. GPU’yu birinci sınıf işlem birimi olarak kabul edersek, ana bellek ile GPU belleği arasında marşal veri gerekmez.
Yalan Ryan

1
İyimser değil, ek yükü sıfır bant genişliği değil. Bir GPU mimarisi ile işlemci tüm göstermek çalışıyorsa, taşınması gerektiğinde bir şey yok, GPU belleği olan ana bellek. İlk olarak konuşulacak bir genel gider yok çünkü transfer yok. Bu, varsayımsal değildir, bu arada AMD'nin APU'ları, CPU ve GPU arasında sıfır kopyalamaya izin veren birleşik ana belleğe sahip HSA (heterojen sistem mimarisi) kullanır.
Yalan Ryan

75

GPU’lar yetersiz:

  1. Sanal bellek (!!!)
  2. Bellek dışındaki aygıtları adresleme araçları (örneğin klavyeler, yazıcılar, ikincil depolama vb.)
  3. Kesmeler

Modern bir işletim sistemi gibi bir şeyi uygulayabilmek için bunlara ihtiyacınız var.

Ayrıca (nispeten) çift duyarlıklı aritmetikte yavaşlar (tek hassasiyetli aritmetik performanslarına göre) * ve çok daha büyük (silikon büyüklüğü bakımından). Daha eski GPU mimarileri, çoğu genel amaçlı programlama için gerekli olan dolaylı çağrıları (işlev işaretçileriyle) ve bunu daha yavaş yapan mimarileri desteklemez. Son olarak, (diğer cevapların da belirttiği gibi), paralelleştirilemeyen görevler için GPU'lar, aynı iş yükü verilen CPU'lara kıyasla kaybedilir.

EDIT : Lütfen bu cevabın 2011 yılında yazıldığını unutmayın - GPU teknolojisi sürekli değişen bir alandır. Bunu okurken bağlı olarak işler çok farklı olabilir: P

* Bazı GPU'lar, NVidia'nın Quadro veya Tesla hatları (Fermi üretimi veya daha yenisi) veya AMD'nin FirePro satırı (GCN üretimi veya daha yenisi) gibi çift duyarlıklı aritmetikte yavaş değildir. Ancak bunlar çoğu tüketicinin makinesinde değil.


@Cicada: Bunun için bir referans var mı? Her durumda, bu doğru olsa bile, en son donanım bile bu durumda iyi performans göstermeyecektir. (örneğin, bir CPU - ve güç tüketimi Dezavantajı üzerinde çok fazla üstün bir avantajı olmazdı)
Billy ONeal

3
Evet, Fermi cihazları dediğiniz gibi (CUDA 4.0 ve sm_20 ile), dolaylı atlamaları (ve dolayısıyla C ++ sanal yöntemlerini, miras vb.) Destekler.
Angry Marul

544 GigaFLOPS , 300 $ 'lık 2 yaşındaki bir GPU’dan yavaş mı?
Ben Voigt

2
@Ben: Sadece veri-paralel uygulamalarda bu tür bir performans elde edersiniz. Genel sıralı işlemler, tamamen farklı bir kod adıdır. (Bu sadece o çip üzerindeki 1600 çekirdeğin paralel çalışması, aslında aynı talimatı tekrar tekrar çalıştırması ... ve gerçek performanstan ziyade teorik olarak yapılmasına rağmen)
Billy ONeal

@Billy: Ancak bu, belirli bir algoritma sınıfındaki yavaşlıktır, çift duyarlıklı aritmetikteki yavaşlık değil (iddia ettiğiniz şey). (Ve CPU'lar da genellikle kalite testi gerçekleştiremezler)
Ben Voigt

37

Bir CPU süper hızlı çalışan bir işçi gibidir. Bir GPU hızlı giden bir grup klon işçisine benziyor ancak hepsinin aynı şeyi aynı anda yapması gerekiyor (bazı klonların isterseniz boşta oturması dışında)

Hangi geliştirici arkadaşınız, bir süper hızlı adam ya da gerçekten hızlı olmayan 100 hızlı klonun hangisini tercih edersiniz, ama hepsinin aynı anda aynı işlemleri yapması gerekir mi?

Bazı hareketler için, klonlar oldukça iyidir, örneğin zemini süpürür - her biri bir kısmını süpürür.

Bazı eylemler için klonlar kokuyor, örneğin haftalık rapor yazıyor - tüm klonlar ancak biri boş dururken bir klon raporu yazıyor (aksi halde aynı raporun sadece 100 kopyasını alıyorsunuz).


4
İkisini de alabilir miyim?
Kevin Panko

22
@Kevin: Evet, ama bir bilgisayar gerekiyordu hem bir CPU ve bir GPU! Keşke böyle bir şey olsaydı!
Joachim Sauer

3
Harika analoji. Bunu hatırlayacağım.
Mayo

23

Çünkü GPU'lar bir kerede çok sayıda küçük şey yapmak için ve CPU'lar bir kerede bir şey yapmak için tasarlanmıştır. Eğer işleminiz karma bir şekilde paralel bir şekilde yapılabilirse, GPU daha hızlı bir şekilde büyüklüktedir, aksi halde olmaz.

CPU'nuz, GPU'nuzdan çok daha hızlı bir hastayı hesaplayabilir - ancak CPU'nuzun yapması için harcadığı zaman, GPU'nuz yüzlerce hashte bir parça olabilir. GPU'lar aynı anda birçok şeyi yapmak için tasarlanmıştır ve CPU'lar bir seferde bir şeyi yapmak için tasarlanmıştır, fakat çok hızlıdır.

Sorun, CPU'ların ve GPU'ların çok farklı sorunlara karşı çok farklı çözümler üretmesidir, biraz örtüşme vardır, ancak genellikle etki alanında bulunan, etki alanında kalır. İşlemciyi bir GPU ile değiştiremiyoruz çünkü CPU orada oturuyor ve işi GPU'dan çok daha iyi yapıyor, çünkü GPU işi yapmak için tasarlanmamış ve bir CPU.

Küçük bir not, eğer CPU'yu kazımak ve sadece bir GPU'su mümkün olsaydı, yeniden adlandırmamız gerektiğini düşünmüyor musunuz? :)


Sanırım çoğu modern CPU, aynı anda 2, 4 veya 8 şey yapacak şekilde tasarlandı.
danielcg

@ danielcg25: Ve çoğu modern GPU aynı anda 256, 512, 1024 şey yapacak şekilde tasarlanmıştır (GTX 680, 1536 CUDA çekirdeğine sahiptir). Her bir CPU çekirdeği kavramsal olarak ayrı bir varlıktır, ancak bu bir GPU için doğru değildir.
Phoshi

@ danielcg25: Farkındayım, ancak cevabı temel olarak (kasıtlı da olsa) yanlış anlayan bir yorum, eğer biri konuyu bilmeden okuyorsa, zararlı olabilir. Bu anlamda “eşek olmak”, SE: sinyal oranını düşürdüğü için pek takdir edilmez.
Phoshi

Sadece biraz bilgi veriyordum. Günümüzde çoğu bilgisayar aslında aynı anda 2-8 şeyi işleme kapasitesine sahip. Bazı işlemciler bundan daha fazlasını yapabilir. Hala aynı anda 100'lerce şey yapan GPU'lara yaklaşmıyor.
danielcg

@ danielcg25: Farklı bir işlem türü olsa da, sorunun ne olduğu ile ilgili. Her bir CPU çekirdeği, kendi veri parçaları ve kendi süreçleriyle çalışan etkili bir şekilde ayrıdır. Her bir CPU çekirdeği birbirinden farklı, ayrı bir görev gerçekleştirir ve doğrusal olarak yukarı doğru ölçeklendirilmezler - bir sekiz çekirdekli dört çekirdekli çekirdeğin iki çekirdekli çekirdeğin iki katı kadar kullanışlı olmadığı kadar. GPU çekirdeği, aynı işi farklı veri parçaları için yapar ve doğrusal olarak ölçeklenir. Çok çekirdekli işlemcilerin olduğu açık, ancak bu aynı şey değil .
Phoshi

14

CPU'da neden GPU mimarisi kullanmadığımızı gerçekten soruyor musunuz ?

GPU sadece bir grafik kartının uzmanlaşmış bir işlemcisidir. Genel amaçlı CPU sadece paralel ve kayan nokta uygulamalarında aynı seviyede olmadığından GPU olmayan grafik hesaplamalarını ödünç veriyoruz.

Aslında farklı (daha fazla GPU-ish) CPU mimarisi kullanıyoruz. Örneğin, Niagara işlemciler çok görevlidir. SPARC T3 , 512 eşzamanlı iş parçacığı çalıştıracak.


Neden bir aşağı oy?
jkj

3
Sanırım son satır, yanlış olduğu gibi. Aslında, yalnızca bir x86-yalnızca ana işletim sistemi düşünebilirim; ve hatta bir tanesi şu anda ticari olarak teklif edilmeyen alfa ve ARM işlemcilere aktarıldı.
Javier,

Tamam. Ana işletim sistemi hakkındaki fikrimin son bölümü kaldırıldı, yeni mimarilerde değişimi engelledi. Cevap kapsamında olmayabilir.
jkj

11

Burada korkunç bir şekilde yanılmış olabilirim ve konuyla ilgili otoriteden çok az veya hiç bir şeyden bahsetmiyorum, ama işte:

  • Her GPU yürütme biriminin ("çekirdek") CPU'ya kıyasla çok sınırlı bir adres alanına sahip olduğuna inanıyorum.

  • GPU yürütme birimleri, verimli bir şekilde dallanma ile ilgilenemez.

  • GPU yürütme birimleri, donanım kesintilerini CPU'ların yaptığı gibi desteklemez.

GPU yürütme birimlerinin nasıl olması gerektiğini her zaman düşündüm, Playstation 3 "SPEs" gibi bir şey, bir veri bloğu verilmesi, bir dizi sıralı işlem yürütmesi ve ardından başka bir bloğun tükürülmesi isteniyordu. veri, durulayın, tekrarlayın. Ana "CPE" kadar adreslenebilir belleğe sahip değiller ama fikir, her "SPE" yi belirli, sıralı bir göreve adamak. Bir birimin çıkışı, başka bir birimin girişini besleyebilir.

Yürütme birimleri, verileri "analiz etmeye" ve bu verinin ne olduğuna bağlı olarak bir sürü karar vermeye çalışıyorlarsa iyi çalışmazlar.

Bu "veri blokları", bir oyunun durum tablosundaki köşelerin bir listesi, bir diskteki MPEG verisi vb. Gibi bir akışın parçası olabilir.

Bir şey bu "akış" modeline uymuyorsa, o zaman verimli bir şekilde paralellize edilemeyecek bir göreve sahipsiniz ve GPU mutlaka bunun için en iyi çözüm değildir. Bunun iyi bir örneği, klavye, joystick veya ağ girişi gibi şeyleri temel alarak "harici olayı" işlemektir. Bu modele uymayan pek çok şey yok, ama her zaman birkaçı olacak.


Şube tahmin optimizasyonu hakkında iyi bir nokta - Bunu hiç düşünmedim, ama haklısın.
Jimmy Breck-McKye

6

Bu saat hızı veya amacı ile ilgili bir şey değil . Her ikisi de olmasa da her ikisi de eşit derecede başarır; ancak bazıları, bazı işler için diğerlerine göre biraz daha uygundur.

Bir yaşandı çok aptalca çekirdek veya çok akıllı çekirdeklerinin küçük bir grup olması çok daha iyi olup olmadığı hakkında eski bir tartışma. Bu 80'lerin içine kolayca geri döner.

Bir CPU içinde yapılabilecek birçok hesaplama vardır. Daha akıllı çekirdekler aynı anda birçok farklı hesaplama yapabilir (türler çok çekirdekli ancak bu kadar karmaşık değildir; bkz. Öğretim düzeyinde paralellik ). Akıllı bir çekirdek aynı anda birkaç hesaplama yapabilir (toplama, çıkarma, çarpma, bölme, hafıza işlemi) ancak aynı anda yalnızca bir tane yapabilir; bu nedenle, fiziksel olarak daha büyüktür (ve bu nedenle çok daha pahalıdır), daha küçük çekirdekli çekirdeklerdir.

Aptal bir çekirdek çok daha küçüktür ve bu nedenle tek bir yongaya daha fazla eklenebilir, ancak aynı anda çok fazla hesaplama yapamaz. Aptal çekirdeklerle birkaç akıllı çekirdek arasında iyi bir denge var.

Çok çekirdekli mimariler grafiklerle iyi çalışır, çünkü hesaplamalar yüzlerce çekirdeğin üzerine kolayca bölünebilir, ancak aynı zamanda kodun kalitesine ve diğer kodun bir hesaplamanın sonucuna dayanıp dayanmadığına da bağlıdır.

Bu göründüğünden çok daha karmaşık bir sorudur. Daha fazla bilgi için, CPU tasarımı ile ilgili bu makaleyi okuyun:

Modern Mikroişlemciler - 90 Dakika kılavuzu

http://www.lighterra.com/papers/modernmicroprocessors/


lütfen kötü dilbilgisi ve genel olarak yukarıda kullanılan alt-par yazı stiline izin verin, kahve içmedim. oldukça karmaşık bir konsepttir ve içerilen bağlantı, daha fazlasını anlamak için nereye gitmeniz gerektiğidir. benim kötü bir açıklama değil
Silverfire

1
Senin için düzelttim ve bir bağlantı da ekledim.
bwDraco

5

Bir sözdizimsel noktasını ele geçirmek istiyorum: CPU ve GPU terimleri mimari isimler değil işlevsel isimlerdir.

Bir bilgisayar ana işlemcisi olarak bir GPU kullanıyor olsaydı, mimari ve tasarımdan bağımsız olarak bir "merkezi işlem birimi" (CPU) olurdu.


4

Mimari alanda, bir işlemciyi "merkezi", diğerini "grafik" yapan sihirli bir bölme çizgisinin olmadığını akılda tutmak önemlidir. (Pekala, bazı GPU'lar tamamen genel olamayacak kadar sakat kalmış olabilirler, ancak bunlar burada konuştuğumuz kişiler değil.)

Buradaki ayrım, tahtaya nasıl yerleştirildikleri ve onlara hangi görevlerin verildiğidir. Elbette, ana veri aktarıcı için bir genel amaçlı işlemciler (veya genel amaçlı işlemciler kümesi) ve bunlardan en iyi şekilde yararlanabilmeleri için özel, paralelleştirilmiş, derinlemesine boru kaplı bir ünite kullanıyoruz.

GPU'ların işlerini çok hızlı yapmalarını sağlamak için kullanılan sahte numaraların çoğu, daha hızlı ve daha iyi CPU'lar yapmaya çalışan insanlar tarafından geliştirildi. Sonuç olarak, Word ve Excel ve Netscape ve insanların bilgisayarlarını kullandığı birçok şey, sadece grafiklere özel cipslerin sunduğu özelliklerden tam anlamıyla faydalanmakla kalmıyor, hatta bu mimarilerde daha yavaş çalışıyorlar çünkü dallar çok pahalı (çok pahalı) ve yavaş) boru hattı temizler.


1
Boru hattının ek yükünün, üst sıradaki cevapların eksik olduğu temel bir ayrıntı olduğunu düşünüyorum.
Steve,

2

GPU olmanın asıl amacı CPU'yu o zamanlar yaptığı pahalı grafik hesaplamalarından kurtarmaktı.
Onları tekrar tek bir işlemcide birleştirerek, herkesin başladığı yere geri dönecektik.


Evet, bir adım ileri, iki adım geri.
Randolf Richardson

2

Basit bir nedenden ötürü: çoğu uygulama çok parçacıklı / vectorized değildir.

Grafik kartları, en azından konsepte çok fazla dokunarak dayanıyor.

Tek bir motorla bir araba, tekerlek başına daha küçük bir motorla bir araba karşılaştırın. İkinci araçla, sistem programlaması açısından dikkate alınmamış olan tüm motorlara kumanda etmeniz gerekir.

Yine de AMD fusion ile, işlem gücünden nasıl faydalanmamız gerektiğini değiştirecek: ya bir vektör için ya bir diş için hızlı.


2

Hala CPU kullanıyor olmamızın nedeni, hem CPU'ların hem de GPU'ların benzersiz avantajlarına sahip olmalarıdır. 'CPU-GPU tartışmasından' CPU-GPU işbirliğine dayalı hesaplama'dan 'uzaklaşmaya dair kesin ve kapsamlı bir tartışma sağlayan ACM Hesaplama Anketleri 2015'te kabul edilen aşağıdaki makaleme bakın.

CPU-GPU Heterojen Hesaplama Teknikleri Araştırması


1

Basitçe söylemek gerekirse GPU arabadaki römorkla karşılaştırılabilir. Genelde gövde, gerçekten büyük bir şey satın alırlarsa, durumlar dışındaki insanların çoğunluğu için yeterlidir. O zaman treylere ihtiyaçları olabilir. GPU ile aynı, genellikle görevlerin çoğunu gerçekleştirecek sıradan bir CPUya sahip olmak yeterlidir. Ancak birçok konuda yoğun hesaplamalara ihtiyacınız varsa, o zaman GPU’ya ihtiyacınız olabilir.


1

gpus iyi akış işlemcilerdir. Akış işlemeyi, uzun bir sayı dizisini sırayla çarpmak olarak düşünebilirsiniz. cpus ayrıca akış işleme yeteneklerine de sahiptir (SIMD uzantıları olarak adlandırılır) ancak tüm programlama mantığını akış işleme olarak uygulayamazsınız ve derleyiciler mümkün olduğunda basit komutların kullanımını saklayan btyecode oluşturma seçeneğine sahiptir.

her şey bir sayı dizisi değildir. resimler ve videolar belki ses de olabilir (burada opencl kodlayıcılar var). böylece gpus resimleri, videoları ve benzeri şeyleri işleyebilir, kodlayabilir ve kodunu çözebilir. Bunun bir dezavantajı, oyunlarda her şeyi gpus'a aktaramayacağınızdır, çünkü kekemelik yaratacaktır, gpus grafiklerle meşgul ve oyun oynarken darboğaz olması gerekiyordu. optimum çözüm, bir PC'deki tüm bileşenleri tamamen kullanmak olacaktır. Bu nedenle, örneğin, nvidia'nın physx motoru varsayılan olarak, gpu tamamen kullanıldığında cpu üzerinde hesaplamalar yapar.

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.