Dlaczego nadal używamy procesorów zamiast GPU?

373

Wydaje mi się, że w dzisiejszych czasach wiele obliczeń wykonuje się na GPU. Oczywiście grafika jest tam zrobiona, ale przy użyciu CUDA i tym podobnych, AI, algorytmy mieszające (myśl bitcoiny) i inne są również wykonywane na GPU. Dlaczego nie możemy po prostu pozbyć się procesora i samodzielnie korzystać z GPU? Co sprawia, że ​​procesor graficzny jest o wiele szybszy niż procesor?

łokieć
źródło
3
skąd mam wiedzieć, które odpowiedzi zawierają prawidłowe informacje? Czy powinienem czekać na odpowiedź głosujących w górę / w dół? Myślę, że zbyt pochopnie przyjmowałem odpowiedź: O
ell
14
Istnieje kilka ostatnich odpowiedzi @ell, które nie zawierają „dezinformacji”. Stopniowo rosną do góry z większymi głosami dzięki skutecznemu mechanizmowi rynkowemu wspaniale zaprojektowanego StackExchange ;-) Sugeruję, aby poczekać trochę dłużej, zanim zaakceptujesz odpowiedź. Wygląda na to, że bardzo ostrożnie to robicie. Nawiasem mówiąc, to dobre pytanie. Może to wydawać się oczywiste, ale wcale tak nie jest. Dziękujemy za pytanie!
Ellie Kesselman,
124
Coś w rodzaju pytania „Jeśli Boeing 747 jest szybszy i bardziej oszczędny pod względem zużycia paliwa, dlaczego nadal jeździmy samochodami”?
vartec
7
Nie, ponieważ nie jest to RISC kontra CISC. Jest to jedna z innych podstaw informatyki, nieco zamaskowana. To „Dlaczego odciążamy pracę z procesora centralnego na procesory I / O?” .
JdeBP
5
@vartec: Myślę, że nieco lepsza analogia może być między autobusami a taksówkami. Jeśli jest czterdzieści osób, które chcą jechać z tego samego miejsca do tego samego miejsca, autobus będzie znacznie wydajniejszy. Jeśli jest czterdzieści osób, których upragnione pochodzenie i miejsca docelowe są szeroko rozproszone, nawet jedna taksówka może być równie dobra jak autobus, a za cenę autobusu można mieć wiele taksówek.
supercat

Odpowiedzi:

388

Odpowiedź TL; DR: Procesory graficzne mają znacznie więcej rdzeni procesorów niż procesory, ale ponieważ każdy rdzeń GPU działa znacznie wolniej niż rdzeń procesora i nie ma funkcji potrzebnych w nowoczesnych systemach operacyjnych, nie są one odpowiednie do wykonywania większości operacji na co dzień przetwarzanie danych. Najbardziej nadają się do intensywnych obliczeń, takich jak przetwarzanie wideo i symulacje fizyki.


GPGPU to wciąż stosunkowo nowa koncepcja. Procesory graficzne były początkowo używane tylko do renderowania grafiki; wraz z postępem technologii wykorzystano dużą liczbę rdzeni w procesorach graficznych w stosunku do procesorów, opracowując możliwości obliczeniowe dla procesorów graficznych, aby mogły przetwarzać wiele równoległych strumieni danych jednocześnie, bez względu na to, jakie to dane. Chociaż procesory graficzne mogą mieć setki, a nawet tysiące procesorów strumieniowych, każdy z nich działa wolniej niż rdzeń procesora i ma mniej funkcji (nawet jeśli są one kompletne i można je zaprogramować do uruchamiania dowolnego programu, który procesor może uruchomić). Funkcje, których brakuje w procesorach GPU, to przerwania i pamięć wirtualna, które są wymagane do wdrożenia nowoczesnego systemu operacyjnego.

Innymi słowy, procesory i procesory graficzne mają znacząco różne architektury, dzięki czemu lepiej nadają się do różnych zadań. Karta graficzna może obsługiwać duże ilości danych w wielu strumieniach, wykonując na nich stosunkowo proste operacje, ale nie nadaje się do intensywnego lub złożonego przetwarzania jednego lub kilku strumieni danych. Procesor jest znacznie szybszy w przeliczeniu na rdzeń (pod względem instrukcji na sekundę) i może łatwiej wykonywać złożone operacje na jednym lub kilku strumieniach danych, ale nie może efektywnie obsługiwać wielu strumieni jednocześnie.

W rezultacie procesory graficzne nie nadają się do obsługi zadań, które nie przynoszą znaczących korzyści lub których nie można zrównoważyć, w tym wielu popularnych aplikacji konsumenckich, takich jak edytory tekstu. Ponadto procesory graficzne wykorzystują zasadniczo inną architekturę; należałoby zaprogramować aplikację specjalnie dla GPU, aby działała, a programowanie układów GPU wymaga znacznie różnych technik. Te różne techniki obejmują nowe języki programowania, modyfikacje istniejących języków i nowe paradygmaty programowania, które lepiej nadają się do wyrażania obliczeń jako operacji równoległej wykonywanej przez wiele procesorów strumieniowych. Więcej informacji na temat technik potrzebnych do programowania procesorów graficznych można znaleźć w artykułach Wikipedii na temat przetwarzania strumieniowego i obliczeń równoległych .

Nowoczesne karty graficzne są w stanie wykonywać operacje wektorowe i arytmetykę zmiennoprzecinkową, a najnowsze karty potrafią manipulować liczbami zmiennoprzecinkowymi podwójnej precyzji. Ramy takie jak CUDA i OpenCL umożliwiają pisanie programów dla układów GPU, a natura układów GPU sprawia, że ​​są one najbardziej odpowiednie do operacji o wysokim stopniu równoległości, na przykład w obliczeniach naukowych, gdzie seria wyspecjalizowanych kart obliczeniowych GPU może być realnym zamiennikiem małej klaster obliczeniowy jak w superkomputerach osobistych NVIDIA Tesla . Konsumenci z nowoczesnymi układami GPU, którzy mają doświadczenie w Folding @ home, mogą z nich korzystać, aby współpracować z klientami GPU , którzy mogą przeprowadzać symulacje składania białek z bardzo dużą prędkością i wnieść więcej pracy do projektu (przeczytaj często zadawane pytania)po pierwsze, szczególnie te związane z procesorami graficznymi). Procesory graficzne mogą także umożliwiać lepszą symulację fizyki w grach wideo za pomocą PhysX, przyspieszać kodowanie i dekodowanie wideo oraz wykonywać inne zadania wymagające dużej mocy obliczeniowej. Do tego typu zadań najbardziej odpowiednie są procesory graficzne.

AMD jest pionierem w projektowaniu procesorów o nazwie Accelerated Processing Unit (APU), która łączy konwencjonalne rdzenie procesorów x86 z procesorami graficznymi. Takie podejście zapewnia wydajność graficzną znacznie przewyższającą rozwiązania graficzne zintegrowane z płytą główną (choć nie dorównuje droższym dyskretnym kartom graficznym) i pozwala na stworzenie kompaktowego, taniego systemu z dobrą wydajnością multimediów bez potrzeby posiadania osobnego procesora graficznego. Najnowsze procesory Intel oferują również zintegrowaną grafikę na układzie, chociaż konkurencyjna wydajność zintegrowanego procesora graficznego jest obecnie ograniczona do kilku układów z układem Intel Iris Pro Graphics. W miarę postępu technologii zauważamy rosnący stopień konwergencji tych niegdyś oddzielnych części. Prognozy AMDprzyszłość, w której procesor i GPU są jednym, zdolnym do płynnej współpracy nad tym samym zadaniem .

Niemniej jednak wiele zadań wykonywanych przez systemy operacyjne i aplikacje na komputery PC są nadal lepiej dostosowane do procesorów i potrzeba dużo pracy, aby przyspieszyć program korzystający z GPU. Ponieważ tak wiele istniejących programów korzysta z architektury x86, a ponieważ procesory graficzne wymagają różnych technik programowania i brakuje kilku ważnych funkcji potrzebnych w systemach operacyjnych, ogólne przejście z procesora na procesor graficzny w codziennych obliczeniach jest bardzo trudne.

bwDraco
źródło
39
Podobnie jak w przypadku tej odpowiedzi, myślę, że głównym powodem jest to, że nie mamy dobrych języków programowania głównego strumienia, aby poradzić sobie z takimi architekturami równoległymi. Od dziesięcioleci walczymy o rozwój programowania wielowątkowego, a ludzie wciąż nazywają, zło wielowątkowe. Pomimo tego, że wielordzeniowe procesory i procesory graficzne są rzeczywistością, będziemy musieli opracować nowe paradygmaty programowania, aby sobie z tym poradzić.
Soren,
Warto zauważyć, że Intel pracuje nad architekturą Larrabee (o wiele za długo), która jest zasadniczo układem z ogromną liczbą rdzeni x86.
Chris S,
Świetna odpowiedź na omówienie przyczyn sprzętowych i omówienie APU i tego, jak to zmienią. Jednak @Soren daje bardzo dobry punkt po stronie oprogramowania. W rzeczywistości jest to połączenie problemów sprzętowych, oprogramowania i faktu, że procesory działają, a kiedy wiadomo, że coś działa, trudno jest zmusić ludzi do wymiany.
Nich Del
3
„nie mamy dobrych języków programowania głównego strumienia, aby poradzić sobie z takimi architekturami równoległymi”. - Haskell, OCaml, Scheme, F #, Erlang i właściwie każdy inny funkcjonalny język programowania bardzo dobrze radzi sobie z wielowątkowością. Wszystkie, o których wspomniałem, są głównym nurtem.
BlueRaja - Danny Pflughoeft
1
@BlueRaja - znamy te języki, twoja definicja głównego strumienia musi być inna niż moja :-)
Soren
252

Co sprawia, że ​​procesor graficzny jest o wiele szybszy niż procesor?

Procesor graficzny nie jest szybszy niż procesor. Procesor i GPU zostały zaprojektowane z dwoma różnymi celami, z różnymi kompromisami, więc mają inną charakterystykę wydajności. Niektóre zadania są szybsze w CPU, podczas gdy inne zadania są szybciej obliczane w GPU. Procesor specjalizuje się w wykonywaniu skomplikowanych manipulacji niewielkim zestawem danych, procesor GPU wyróżnia się w wykonywaniu prostych manipulacji dużym zestawem danych.

GPU to procesor specjalnego przeznaczenia, zaprojektowany tak, aby jedna instrukcja działała na dużym bloku danych (SIMD / Single Instruction Multiple Data), przy czym wszystkie stosują tę samą operację. Praca w blokach danych jest z pewnością bardziej wydajna niż praca z pojedynczą komórką na raz, ponieważ dekodowanie instrukcji jest znacznie zmniejszone, jednak praca w dużych blokach oznacza, że ​​jest więcej równoległych jednostek roboczych, więc wykorzystuje znacznie więcej tranzystorów do wdrożenia pojedynczej instrukcji GPU (powodując fizyczne ograniczenie rozmiaru, zużywając więcej energii i wytwarzając więcej ciepła).

Procesor jest zaprojektowany tak, aby jak najszybciej wykonać pojedynczą instrukcję na jednym układzie odniesienia. Ponieważ musi pracować tylko z jednym układem odniesienia, liczba tranzystorów wymaganych do wdrożenia pojedynczej instrukcji jest znacznie mniejsza, więc procesor może pozwolić sobie na większy zestaw instrukcji, bardziej złożoną ALU, lepsze przewidywanie gałęzi, lepiej zwirtualizowane architektura i bardziej wyrafinowane schematy buforowania / potoku. Jego cykle instrukcji są również szybsze.

Powodem, dla którego nadal używamy procesora, nie jest to, że x86 jest królem architektury procesorów, a system Windows jest napisany dla x86. Powodem, dla którego nadal używamy procesora, jest rodzaj zadań, które musi wykonać system operacyjny, tj. Podejmowanie decyzji, działa wydajniej na architekturze procesora. System operacyjny musi spojrzeć na setki różnych rodzajów danych i podejmować różne decyzje, które zależą od siebie; tego rodzaju zadanie nie jest łatwo równoległe, przynajmniej nie w architekturze SIMD.

W przyszłości zobaczymy konwergencję między CPU a architekturą GPU, ponieważ CPU zyskuje zdolność do pracy nad blokami danych, np. SSE. Ponadto, wraz z poprawą technologii produkcji i zmniejszeniem liczby układów, procesor graficzny może pozwolić sobie na wdrożenie bardziej złożonych instrukcji.

Lie Ryan
źródło
23
To chyba najlepsza odpowiedź tutaj. Ważne jest, aby zrozumieć podstawowe różnice między tymi dwoma paradygmatami. Aby procesory graficzne mogły wyprzedzić procesory, biorąc pod uwagę dzisiejsze obciążenia, w gruncie rzeczy oznacza to, że procesor graficzny musi zmienić się w procesor. Tak więc pytanie jest odpowiedzią.
surfasb
2
+1 za to, że jest to najlepsza odpowiedź. Zarówno ta, jak i przyjęta odpowiedź są poprawne, ale ta wyjaśnia to znacznie jaśniej.
Dziwi mnie, że nikt w tym wątku nie wspomniał o narzutach związanych z wysyłaniem danych do GPU - ograniczona przepustowość przez szyny PCI-Express sprawia, że ​​niektóre równoległe operacje na GPU są znacznie wolniejsze niż w przypadku CPU. Można zobaczyć jeden prosty przypadek, w którym zmiana wielkości FFT znacząco wpłynęła na wydajność procesora graficznego w porównaniu do procesora z powodu narzutu związanego z wysyłaniem danych, konfigurowaniem kontekstu, odczytywaniem wyników: stackoverflow.com/a/8687732/303612 Mniejsze operacje można wykonywać w pamięci podręcznej na procesorach, a przepustowość pamięci jest znacznie lepsza niż obecna architektura PCI-E
dr Andrew Burnett-Thompson
1
@ Dr.AndrewBurnett-Thompson: to dlatego, że nie ma to znaczenia dla pytania. Obecnie GPU jest uważane za pomocniczą jednostkę przetwarzającą, dlatego przenoszenie danych z / do GPU jest konieczne i kosztowne. Jeśli traktujemy GPU jako procesor pierwszej klasy, nie będzie potrzeby gromadzenia danych między pamięcią główną a pamięcią GPU.
Lie Ryan
1
Nie optymistyczne, to nie jest zerowy narzut przepustowości. Jeśli procesor z architekturą GPU uruchamia cały program, nie trzeba nic przenosić, pamięć GPU jest pamięcią główną. Po pierwsze, nie ma narzutu na temat transferu, ponieważ nie ma transferów. Nawiasem mówiąc, nie jest to hipotetyczne, APU AMD wykorzystuje HSA (heterogeniczna architektura systemu) ze zunifikowaną pamięcią główną, która umożliwia zerowe kopiowanie między CPU a GPU.
Lie Ryan,
75

Brakuje układów GPU:

  1. Pamięć wirtualna (!!!)
  2. Środki adresowania urządzeń innych niż pamięć (np. Klawiatury, drukarki, pamięć dodatkowa itp.)
  3. Przerwania

Potrzebujesz ich do wdrożenia czegoś takiego jak nowoczesny system operacyjny.

Są także (względnie) powolne przy arytmetyki podwójnej precyzji (w porównaniu z wydajnością arytmetyczną pojedynczej precyzji) * i są znacznie większe (pod względem wielkości krzemu). Starsze architektury GPU nie obsługują wywołań pośrednich (za pomocą wskaźników funkcji) potrzebnych do większości programowania ogólnego przeznaczenia, a nowsze architektury, które robią to powoli. Wreszcie (jak zauważyły ​​inne odpowiedzi) w przypadku zadań, których nie można zrównoleglać, procesory graficzne tracą w porównaniu z procesorami obciążonymi tym samym obciążeniem.

EDYCJA : Należy pamiętać, że ta odpowiedź została napisana w 2011 roku - technologia GPU stale się zmienia. Rzeczy mogą się bardzo różnić w zależności od tego, kiedy czytasz: P

* Niektóre procesory graficzne nie są wolne z arytmetyką o podwójnej precyzji, takie jak linie Quadro lub Tesla NVidii (generacja Fermi lub nowsza) lub linia FirePro AMD (generacja GCN lub nowsza). Ale nie są to urządzenia większości konsumentów.

Billy ONeal
źródło
@Cicada: Czy masz do tego referencje? W każdym razie, nawet jeśli to prawda, nawet najnowszy sprzęt nie będzie w tym przypadku działał dobrze. (np nie ma zbyt wiele do perf przewagę nad CPU - i wadę pobór mocy)
Billy Oneal
3
Tak, urządzenia Fermi, jak powiedziałeś (z CUDA 4.0 i sm_20), obsługują pośrednie skoki (a zatem metody wirtualne C ++, dziedziczenie itp.).
Angry Sałata
544 GigaFLOPS z dwuletniego procesora graficznego o wartości 300 USD jest wolny?
Ben Voigt,
2
@Ben: Tego rodzaju wydajność uzyskuje się tylko w aplikacjach równoległych do danych. Ogólne sekwencyjne operacje to zupełnie inna gra. (To tylko przy wszystkich 1600 rdzeniach na tym układzie pracującym równolegle, uruchamiających w zasadzie tę samą instrukcję w kółko ... a nawet to jest teoretyczne, a nie faktyczne perf)
Billy ONeal
@Billy: Ale to powolność w przypadku określonej klasy algorytmów, a nie powolność w przypadku arytmetyki podwójnej precyzji (jak twierdziłeś). (Procesory zwykle nie osiągają również wydajności testów porównawczych)
Ben Voigt
37

Procesor jest jak pracownik, który idzie bardzo szybko. Procesor graficzny jest jak grupa klonów, którzy idą szybko, ale wszyscy muszą wspólnie robić dokładnie to samo (z wyjątkiem tego, że niektóre klony mogą pozostawać bezczynne, jeśli chcesz)

Który wolałbyś mieć jako swojego programistę, jednego superszybkiego faceta lub 100 szybkich klonów, które nie są tak szybkie, ale wszystkie muszą wykonywać te same działania jednocześnie?

W przypadku niektórych działań klony są całkiem dobre, np. Zamiatają podłogę - każdy może zamiatać jej część.

W przypadku niektórych działań klony śmierdzą, np. Pisz cotygodniowy raport - wszystkie klony oprócz jednego siedzą bezczynnie, podczas gdy jeden klon pisze raport (w przeciwnym razie dostajesz tylko 100 kopii tego samego raportu).

John Robertson
źródło
4
Czy mógłbym nawet mieć ... oba?
Kevin Panko,
22
@Kevin: Tak, ale trzeba mieć komputer z obu CPU i GPU! Gdyby tylko było coś takiego!
Joachim Sauer
3
Świetna analogia. Zapamięta to.
Mayo,
23

Ponieważ układy GPU są zaprojektowane do robienia wielu małych rzeczy na raz, a procesory są zaprojektowane do robienia jednej rzeczy naraz. Jeśli twój proces może być masowo równoległy, jak haszowanie, GPU jest o rząd wielkości szybszy, inaczej nie będzie.

Twój procesor może obliczyć wartość skrótu znacznie, znacznie szybciej niż twój procesor graficzny - ale czas, jaki zajmuje procesor, procesor graficzny może być w trakcie kilkuset skrótów. Procesory graficzne są zaprojektowane do robienia wielu rzeczy jednocześnie, a procesory są zaprojektowane do robienia jednej rzeczy naraz, ale bardzo szybko.

Problem polega na tym, że procesory i układy GPU są bardzo różnymi rozwiązaniami dla bardzo różnych problemów, nakładają się one na siebie, ale ogólnie to, co w ich domenie pozostaje w domenie. Nie możemy zastąpić procesora GPU, ponieważ procesor tam siedzi i wykonuje swoją pracę znacznie lepiej niż kiedykolwiek GPU, po prostu dlatego, że GPU nie jest przeznaczony do wykonywania tego zadania, a procesor jest.

Drobna dodatkowa uwaga, gdyby możliwe było złomowanie procesora i posiadanie tylko GPU, nie sądzisz, że zmienilibyśmy go? :)

Phoshi
źródło
Myślę, że większość współczesnych procesorów jest zaprojektowana do robienia 2, 4 lub 8 rzeczy jednocześnie.
danielcg
@ danielcg25: I większość współczesnych procesorów graficznych jest zaprojektowana do wykonywania 256, 512, 1024 rzeczy jednocześnie (GTX 680 ma 1536 rdzeni CUDA). Każdy rdzeń procesora jest koncepcyjnie odrębnym bytem, ​​ale nie dotyczy to GPU.
Phoshi
@ danielcg25: Wiem, ale komentarz z zasadniczym (choć celowym) niezrozumieniem odpowiedzi może być szkodliwy, jeśli ktoś ją przeczyta, nie znając tematu. W tym sensie „bycie dupkiem” nie jest tak naprawdę doceniane, ponieważ obniża stosunek sygnału do szumu.
Phoshi
Podałem tylko informacje. Obecnie większość komputerów jest w stanie przetwarzać od 2 do 8 rzeczy na raz. Niektóre procesory mogą zrobić jeszcze więcej. Nadal nie zbliża się do układów GPU, które wykonują setki rzeczy naraz.
danielcg
@ danielcg25: Jest to jednak inny rodzaj przetwarzania, o to właśnie chodzi. Każdy rdzeń procesora jest skutecznie osobny, pracując z własnymi fragmentami danych i własnymi procesami. Każdy rdzeń procesora wykonuje inne, oddzielne zadanie od siebie i nie skaluje się liniowo w górę - ośmiordzeniowy rdzeń nie jest dwa razy tak przydatny, jak czterordzeniowy rdzeń nie jest dwa razy tak przydatny jak podwójny rdzeń. Rdzenie GPU, z drugiej strony, wykonują to samo zadanie dla różnych elementów danych i skalują liniowo. Oczywiste jest, że istnieją wielordzeniowe procesory, ale to nie to samo .
Phoshi
14

Czy naprawdę pytasz, dlaczego nie korzystamy z procesorów graficznych podobnych do GPU w procesorze?

GPU to po prostu wyspecjalizowany procesor karty graficznej. Pożyczamy obliczenia na grafice innej niż GPU, ponieważ procesory ogólnego przeznaczenia po prostu nie radzą sobie z wykonywaniem równoległym i zmiennoprzecinkowym.

W rzeczywistości używamy różnych (więcej GPU) architektur CPU. Np. Procesory Niagara są dość wielozadaniowe. SPARC T3 uruchomi 512 współbieżnych wątków.

jkj
źródło
Dlaczego głosowanie negatywne?
jkj
3
chyba ostatni wiersz, ponieważ jest to po prostu fałsz. W rzeczywistości mogę myśleć tylko o jednym głównym systemie operacyjnym x86; i nawet ten został przeniesiony do procesorów alfa i ARM, ale w tej chwili nie jest komercyjnie oferowany.
Javier
Dobrze. Usunąłem ostatnią sekcję, która była moim zdaniem na temat wsparcia głównego systemu operacyjnego utrudniającego zmianę na nowe architektury. Może nie być w zakresie odpowiedzi.
jkj
11

Mogę się tutaj strasznie mylić i wypowiadam się w tej sprawie z niewielkim lub żadnym autorytetem, ale oto:

  • Uważam, że każda jednostka wykonawcza GPU („rdzeń”) ma bardzo ograniczoną przestrzeń adresową w porównaniu do procesora.

  • Jednostki wykonawcze GPU nie mogą skutecznie radzić sobie z rozgałęzianiem.

  • Jednostki wykonawcze GPU nie obsługują przerwań sprzętowych w taki sam sposób, jak procesory.

Zawsze myślałem, że sposób, w jaki powinny być wykonywane jednostki GPU, przypomina coś w rodzaju „SPE” Playstation 3, chcą otrzymać blok danych, uruchomić na nim szereg operacji sekwencyjnych, a następnie wypluć kolejny blok dane, spłucz, powtórz. Nie mają tyle pamięci adresowalnej, co główna „CPE”, ale chodzi o to, aby każdą „SPE” dedykować do określonego, sekwencyjnego zadania. Dane wyjściowe jednej jednostki mogą zasilać dane wejściowe innej jednostki.

Jednostki wykonawcze nie działają dobrze, jeśli próbują „analizować” dane i podejmować szereg decyzji na podstawie tych danych.

Te „bloki danych” mogą być częścią strumienia, takiego jak lista wierzchołków z tabeli stanów gry, dane MPEG z dysku itp.

Jeśli coś nie pasuje do tego modelu „przesyłania strumieniowego”, masz zadanie, którego nie można skutecznie sparaliżować, a procesor graficzny niekoniecznie jest najlepszym rozwiązaniem. Dobrym przykładem jest przetwarzanie „zdarzeń zewnętrznych” takich jak klawiatura, joystick lub wejście sieciowe. Nie ma wielu rzeczy, które nie pasują do tego modelu, ale zawsze będzie kilka.

LawrenceC
źródło
Dobra uwaga na temat optymalizacji przewidywania gałęzi - nigdy bym tego nie wziął pod uwagę, ale masz rację.
Jimmy Breck-McKye,
6

To nie jest nic o szybkości zegara ani celu. Obaj są w stanie równie dobrze wykonać większość, jeśli nie wszystkie zadania; jednak niektóre są nieco lepiej dostosowane do niektórych zadań niż inne.

Nastąpił bardzo stary spór o to, czy lepiej jest mieć dużo głupich rdzenie lub małej grupy bardzo inteligentnych rdzeni. To łatwo wraca do lat 80-tych.

Wewnątrz procesora istnieje wiele możliwych obliczeń, które można wykonać. Mądrzejsze rdzenie są w stanie wykonywać wiele różnych obliczeń jednocześnie (coś w rodzaju wielordzeniowego, ale nie jest to skomplikowane; patrz paralelizm na poziomie instrukcji ). Inteligentny rdzeń może wykonywać kilka obliczeń jednocześnie (dodawanie, odejmowanie, mnożenie, dzielenie, operacja pamięci), ale tylko jedna na raz; z tego powodu są fizycznie większe (a zatem znacznie droższe) niż głupsze rdzenie.

Głupi rdzeń jest znacznie mniejszy i dlatego można dodać więcej do jednego układu, ale nie są w stanie wykonać tylu równoczesnych obliczeń. Istnieje równowaga między wieloma głupimi rdzeniami i kilkoma inteligentnymi rdzeniami.

Architektury wielordzeniowe działają dobrze z grafiką, ponieważ obliczenia można łatwo podzielić na setki rdzeni, ale zależy to również od jakości kodu i tego, czy inny kod opiera się na wyniku jednego obliczenia.

To jest o wiele bardziej skomplikowane pytanie, niż się może wydawać. Aby uzyskać więcej informacji, przeczytaj ten artykuł o projektowaniu procesora:

Nowoczesne mikroprocesory - 90-minutowy przewodnik

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

Silverfire
źródło
proszę wybaczyć słabą gramatykę i, ogólnie rzecz biorąc, styl pisania sub-par użyty w powyższym, nie piłem kawy. jest to dość skomplikowana koncepcja, a dołączony link jest miejscem, do którego należy się udać, jeśli chcesz dowiedzieć się więcej. nie moje złe wytłumaczenie
Silverfire,
1
Naprawiłem to dla ciebie i dodałem również link.
bwDraco
5

Chciałbym poruszyć jeden punkt syntaktyczny: Terminy CPU i GPU to nazwy funkcjonalne, a nie nazwy architektoniczne.

Gdyby komputer używał GPU jako głównego procesora, stałby się wówczas „jednostką centralną” (CPU), niezależnie od architektury i projektu.

Andrew Neely
źródło
4

Należy pamiętać, że w przestrzeni architektury nie ma magicznej linii podziału, która czyni jeden procesor „centralnym”, a drugi „graficznym”. (Cóż, niektóre procesory graficzne mogą być zbyt kalekie, aby być w pełni ogólne, ale nie o tych tutaj mówimy.)

Różnica polega na tym, jak są one instalowane na płycie i jakie zadania są im powierzone. Oczywiście używamy procesorów ogólnego przeznaczenia (lub zestawu procesorów ogólnego przeznaczenia) do głównego mechanizmu przenoszenia danych, a także specjalnej, równoległej, głęboko osadzonej jednostki dla rzeczy (takich jak grafika), aby jak najlepiej z nich skorzystać.

Większość sztuczek, które zostały wykorzystane do tego, aby procesory graficzne działały bardzo szybko, zostały po raz pierwszy opracowane przez ludzi próbujących tworzyć szybsze i lepsze procesory. Okazuje się, że Word, Excel i Netscape oraz wiele innych rzeczy, z których ludzie korzystają na swoich komputerach, nie tylko nie wykorzystują w pełni funkcji oferowanych przez układy graficzne, ale nawet działają wolniej na tych architekturach, ponieważ mają wiele przyczyn (bardzo drogie) i powolne) czyszczenie rur.

dmckee
źródło
1
Wydaje mi się, że koszty związane z rurociągiem są fundamentalnym szczegółem, którego brakuje odpowiedzi o wyższej pozycji.
Steve
2

Istotą GPU było w ogóle uwolnienie procesora od kosztownych obliczeń graficznych, które wówczas wykonywał.
Łącząc je ponownie w pojedynczy procesor, wrócilibyśmy do miejsca, w którym wszystko się zaczęło.

Petruza
źródło
Tak, jeden krok do przodu, dwa kroki do tyłu.
Randolf Richardson,
2

Z prostego powodu: większość aplikacji nie jest wielowątkowa / wektoryzowana.

Karty graficzne w dużej mierze polegają na wielowątkowości, przynajmniej w koncepcji.

Porównaj samochód z jednym silnikiem, samochód z jednym mniejszym silnikiem na koło. W tym drugim samochodzie musisz sterować wszystkimi silnikami, co nie zostało uwzględnione z punktu widzenia programowania systemu.

Jednak dzięki fuzji AMD zmieni się sposób, w jaki będziemy musieli wykorzystać moc przetwarzania: albo wektoryzowana, albo szybka dla jednego wątku.

żart
źródło
2

Powodem, dla którego nadal używamy procesorów jest to, że zarówno procesory, jak i procesory graficzne mają swoje unikalne zalety. Zobacz mój następny artykuł, zaakceptowany w ACM Computing Surveys 2015, który zawiera rozstrzygającą i kompleksową dyskusję na temat przejścia od „debaty o procesorze do GPU” do „wspólnej pracy z CPU-GPU”.

Badanie heterogenicznych technik obliczeniowych CPU-GPU

użytkownik984260
źródło
1

Mówiąc wprost, procesor graficzny można porównać do przyczepy w samochodzie. Jak zwykle bagażnik wystarcza większości ludzi, z wyjątkiem przypadków, gdy kupią coś naprawdę dużego. Wtedy mogą potrzebować przyczepy. To samo z GPU, ponieważ zwykle wystarczy zwykły procesor, który wykona większość zadań. Ale jeśli potrzebujesz intensywnych obliczeń w wielu wątkach, możesz potrzebować GPU

Jurij Zaletskij
źródło
1

gpus to dobre procesory strumieniowe. możesz myśleć o przetwarzaniu strumieniowym po kolei, mnożąc długi szereg liczb. cpus ma również możliwości przetwarzania strumieniowego (nazywa się to rozszerzeniami SIMD), ale nie można zaimplementować całej logiki programowania jako przetwarzania strumieniowego, a kompilatory mają opcję tworzenia kodu bajtowego, który umożliwia korzystanie z instrukcji SIMD w miarę możliwości.

nie wszystko jest tablicą liczb. zdjęcia i filmy są, być może również dźwiękowe (tu i tam są kodery opencl). dzięki czemu gpus może przetwarzać, kodować i dekodować zdjęcia, filmy i cokolwiek podobnego. jedną wadą jest to, że nie można rozładować wszystkiego do gpus w grach, ponieważ spowodowałoby to zacinanie się, gpus jest zajęty grafiką i powinien być wąskim gardłem w systemie podczas grania w gry. optymalnym rozwiązaniem byłoby pełne wykorzystanie wszystkich elementów komputera. na przykład silnik physx nvidii domyślnie wykonuje obliczenia na jednostce centralnej, gdy jest ona w pełni wykorzystana.

Uğur Gümüşhan
źródło