2011-07-10 13:31:41 +0000 2011-07-10 13:31:41 +0000
380
380
Advertisement

Dlaczego wciąż używamy CPU zamiast GPU?

Advertisement

Wydaje mi się, że w dzisiejszych czasach wiele obliczeń jest wykonywanych na GPU. Oczywiście grafika jest tam wykonywana, ale przy użyciu CUDA i tym podobnych, AI, algorytmów hashingowych (think bitcoins) i innych również jest wykonywana na GPU. Dlaczego nie możemy po prostu pozbyć się jednostki centralnej i korzystać z niej we własnym zakresie? Co sprawia, że procesor graficzny jest o wiele szybszy niż procesor centralny?

Advertisement

Odpowiedzi (15)

394
394
394
2011-07-10 14:00:49 +0000

TL;DR odpowiedź:Układy GPU mają znacznie więcej rdzeni przetwarzających niż procesory główne, ale ponieważ każdy rdzeń GPU pracuje znacznie wolniej niż rdzeń CPU i nie posiada funkcji potrzebnych w nowoczesnych systemach operacyjnych, nie są one odpowiednie do wykonywania większości procesów w codziennej pracy. Są one najbardziej odpowiednie do wykonywania intensywnych obliczeniowo operacji, takich jak przetwarzanie wideo i symulacje fizyczne.

  • * GPGPU to wciąż stosunkowo nowa koncepcja. Układy GPU były początkowo wykorzystywane wyłącznie do renderowania grafiki; w miarę postępu technologicznego, duża liczba rdzeni w układach GPU w stosunku do procesorów centralnych została wykorzystana poprzez rozwinięcie możliwości obliczeniowych dla układów GPU, tak aby mogły one przetwarzać wiele równoległych strumieni danych jednocześnie, bez względu na to, jakie dane te mogą być. Podczas gdy procesory graficzne mogą mieć setki, a nawet tysiące procesorów strumieniowych, każdy z nich pracuje wolniej niż rdzeń CPU i ma mniej funkcji (nawet jeśli są one Turing complete i mogą być zaprogramowane do uruchamiania dowolnego programu, który może być uruchomiony przez CPU). Funkcje, których brakuje w układach GPU, to m.in. przerywacze i pamięć wirtualna, które są niezbędne do implementacji nowoczesnego systemu operacyjnego.

Innymi słowy, procesory i układy GPU mają znacząco różne architektury, które sprawiają, że lepiej nadają się do różnych zadań. Układ GPU może obsługiwać duże ilości danych w wielu strumieniach, wykonując na nich stosunkowo proste operacje, ale nie jest przystosowany do ciężkiego lub złożonego przetwarzania na jednym lub kilku strumieniach danych. Procesor centralny jest znacznie szybszy w przeliczeniu na jeden rdzeń (pod względem instrukcji na sekundę) i może łatwiej wykonywać złożone operacje na jednym lub kilku strumieniach danych, ale nie jest w stanie wydajnie obsłużyć wielu strumieni jednocześnie.

W rezultacie, procesory graficzne nie są przystosowane do obsługi zadań, które nie przynoszą znaczących korzyści lub nie mogą być porównywane, w tym wielu popularnych aplikacji konsumenckich, takich jak procesory tekstu. Co więcej, procesory graficzne wykorzystują zasadniczo odmienną architekturę; trzeba by zaprogramować aplikację specjalnie dla niej, aby działała, a do zaprogramowania układów GPU wymagane są znacznie inne techniki. 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żenia obliczeń jako operacji równoległej, która ma być wykonana przez wiele procesorów strumieniowych. Więcej informacji o technikach potrzebnych do programowania układów GPU można znaleźć w artykułach Wikipedii na temat przetwarzania strumieniowego i obliczeń równoległych .

Nowoczesne układy GPU są zdolne do wykonywania operacji wektorowych i arytmetyki zmiennoprzecinkowej, a najnowsze karty potrafią manipulować podwójnie precyzyjnymi liczbami zmiennoprzecinkowymi. Ramy takie jak CUDA i OpenCL umożliwiają pisanie programów dla układów GPU, a charakter układów GPU sprawia, że są one najbardziej odpowiednie dla wysoce równoległych operacji, takich jak w obliczeniach naukowych, gdzie seria wyspecjalizowanych kart graficznych może być realnym zamiennikiem dla małego klastra obliczeniowego, jak w NVIDIA Tesla Personal Supercomputers . Konsumenci z nowoczesnymi procesorami graficznymi, którzy mają doświadczenie z Folding@home, mogą je wykorzystać do współpracy z klientami korzystającymi z procesorów graficznych , którzy mogą wykonywać białkowe symulacje składania z bardzo dużą prędkością i wnieść więcej pracy do projektu (upewnij się, że najpierw przeczytasz FAQs , zwłaszcza te związane z procesorami graficznymi). Układy GPU mogą także umożliwić lepszą symulację fizyki w grach wideo przy użyciu PhysX, przyspieszyć kodowanie i dekodowanie wideo oraz wykonywać inne wymagające obliczeniowo zadania. To właśnie tego typu zadania procesory graficzne są najbardziej odpowiednie do wykonywania.

AMD jest pionierem projektu procesora zwanego Accelerated Processing Unit (APU) , który łączy konwencjonalne rdzenie procesora x86 z układami GPU. Podejście to zapewnia wydajność graficzną znacznie przewyższającą rozwiązania graficzne zintegrowane z płytą główną (choć nie dorównuje droższym, dyskretnym układom GPU) i pozwala na stworzenie kompaktowego, taniego systemu o dobrej wydajności multimedialnej bez konieczności stosowania oddzielnego układu GPU. Najnowsze procesory firmy Intel oferują również zintegrowaną grafikę w układzie scalonym, chociaż wydajność zintegrowanego procesora graficznego konkurencyjnego ogranicza się obecnie do kilku układów z Intel Iris Pro Graphics. Wraz z postępem technologicznym będziemy świadkami rosnącego stopnia konwergencji tych niegdyś oddzielnych części. AMD wyobraża sobie przyszłość, w której CPU i GPU stanowią jedną całość, zdolną do bezproblemowej współpracy przy tym samym zadaniu .

Niemniej jednak, wiele zadań wykonywanych przez systemy operacyjne i aplikacje dla komputerów PC jest nadal lepiej dopasowanych do procesorów centralnych i wiele pracy jest potrzebne, aby przyspieszyć program wykorzystujący GPU. Ponieważ tak wiele istniejącego oprogramowania wykorzystuje architekturę x86, a także ponieważ procesory graficzne wymagają różnych technik programowania i brakuje im kilku ważnych funkcji potrzebnych w systemach operacyjnych, ogólne przejście z CPU na GPU do obliczeń codziennych jest bardzo trudne.

257
257
257
2011-07-10 20:22:09 +0000

Co sprawia, że GPU jest o wiele szybszy od CPU?

GPU jest nie szybszy od CPU. CPU i GPU zostały zaprojektowane w dwóch różnych celach, z różnymi kompromisami, więc mają różną charakterystykę wydajności. Niektóre zadania są szybsze w CPU, podczas gdy inne są szybciej obliczane w GPU. CPU wyróżnia się tym, że wykonuje złożone manipulacje na małym zbiorze danych, a GPU wyróżnia się tym, że wykonuje proste manipulacje na dużym zbiorze danych.

Procesor graficzny to jednostka centralna specjalnego przeznaczenia, zaprojektowana tak, aby jedna instrukcja pracowała na dużym bloku danych (SIMD/Single Instruction Multiple Data), przy czym wszystkie one wykonują tę samą operację. Praca w blokach danych jest z pewnością bardziej wydajna niż praca z pojedynczą komórką w tym samym czasie, ponieważ koszty dekodowania instrukcji są znacznie mniejsze, jednak praca w dużych blokach oznacza więcej równoległych jednostek roboczych, dlatego też do wykonania pojedynczej instrukcji na GPU wykorzystuje się znacznie więcej tranzystorów (co powoduje ograniczenie fizycznych rozmiarów, zużywa więcej energii i wytwarza więcej ciepła).

Jednostka CPU została zaprojektowana tak, aby wykonać pojedynczą instrukcję na pojedynczym bloku danych tak szybko, jak to możliwe. Ponieważ musi on pracować tylko z pojedynczym układem odniesienia, liczba tranzystorów potrzebnych do zaimplementowania pojedynczej instrukcji jest o wiele mniejsza, dzięki czemu CPU może sobie pozwolić na posiadanie większego zestawu instrukcji, bardziej złożonego ALU, lepszego przewidywania gałęzi, lepiej zwirtualizowanej architektury i bardziej wyrafinowanych schematów buforowania/potokowania. Jego cykle instrukcji są również szybsze.

Powodem, dla którego wciąż używamy CPU jest nie ponieważ x86 jest królem architektury CPU, a Windows jest napisany dla x86, powodem, dla którego wciąż używamy CPU jest to, że rodzaj zadań, które system operacyjny musi wykonać, tj. podejmowanie decyzji, jest wykonywany bardziej efektywnie na architekturze CPU. System operacyjny musi przyjrzeć się setkom różnych typów danych i podejmować różne decyzje, które zależą od siebie nawzajem; tego typu zadania nie dają się łatwo porównać, przynajmniej nie w architekturze SIMD.

W przyszłości zobaczymy konwergencję pomiędzy architekturą CPU a architekturą GPU, ponieważ CPU zyskuje możliwość pracy nad blokami danych, np. z SSE. Ponadto, w miarę doskonalenia technologii produkcji i zmniejszania ilości układów graficznych, procesor graficzny może sobie pozwolić na implementację bardziej złożonych instrukcji.

77
Advertisement
77
77
2011-07-10 21:17:30 +0000

Brak układów GPU:

  1. Pamięć wirtualna (!!!!)
  2. Sposoby adresowania urządzeń innych niż pamięć (np. klawiatury, drukarki, pamięć dodatkowa, itp.)

Przerywa

Potrzebujesz ich, aby móc zaimplementować coś w rodzaju nowoczesnego systemu operacyjnego.

Są one również (stosunkowo) wolne przy podwójnej precyzji arytmetycznej (w porównaniu z ich pojedynczą precyzją arytmetyczną)*, i są znacznie większe (pod względem wielkości krzemu). Starsze architektury układów GPU nie obsługują połączeń pośrednich (poprzez wskaźniki funkcji) potrzebnych do większości programów ogólnego przeznaczenia, a najnowsze architektury robią to powoli. Wreszcie, (jak zauważono w innych odpowiedziach), w przypadku zadań, które nie mogą być wykonywane równolegle, procesory graficzne tracą w porównaniu z procesorami centralnymi przy takim samym obciążeniu pracą.

EDIT : Proszę zwrócić uwagę, że ta odpowiedź została napisana w 2011 roku - technologia procesorów graficznych to obszar, który ciągle się zmienia. Sprawy mogą wyglądać zupełnie inaczej w zależności od tego, kiedy to czytasz :P

* Niektóre układy GPU nie są wolne w arytmetyce podwójnej precyzji, jak np. linie Quadro lub Tesla NVidii (generacja Fermi lub nowsza), czy też linia FirePro AMD (generacja GCN lub nowsza). Ale nie są one dostępne w większości maszyn konsumenckich.

39
39
39
2011-07-11 15:39:21 +0000

Procesor jest jak robotnik, który idzie super szybko. Procesor graficzny jest jak grupa pracowników klonujących, którzy pracują superszybko, ale wszyscy muszą robić dokładnie to samo w unisonie (z wyjątkiem tego, że możesz mieć kilka klonów siedzących bezczynnie, jeśli chcesz)

Który z nich wolałbyś mieć jako Twój współpracownik programista, jeden superszybki facet, czy 100 szybkich klonów, które nie są w rzeczywistości tak szybkie, ale wszystkie muszą wykonywać te same czynności jednocześnie?

W przypadku niektórych akcji, klony są całkiem niezłe, np. zamiatają podłogę - każdy z nich może zamiatać jej część.

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

24
Advertisement
24
24
2011-07-10 17:51:46 +0000

Ponieważ procesory graficzne są zaprojektowane do robienia wielu małych rzeczy na raz, a procesory główne są zaprojektowane do robienia jednej rzeczy na raz. Jeśli Twój proces może być masowo równoległy, jak hashing, procesor graficzny jest o rzędy wielkości szybszy, w przeciwnym razie nie będzie.

Twój procesor centralny może obliczyć hash znacznie, znacznie szybciej niż procesor graficzny - ale czas, jaki zajmuje Twojemu procesorowi centralnemu wykonanie tego zadania, Twój procesor graficzny może być częścią kilkuset hash. Procesory graficzne są zaprojektowane do robienia wielu rzeczy w tym samym czasie, a procesory graficzne są zaprojektowane do robienia jednej rzeczy na raz, ale bardzo szybko.

Problem polega na tym, że procesory i jednostki GPU są bardzo różnymi rozwiązaniami bardzo różnych problemów, jest trochę nakładające się na siebie, ale generalnie to, co jest w ich domenie, pozostaje w ich domenie. Nie możemy wymienić CPU na GPU, ponieważ CPU siedzi tam i wykonuje swoją pracę znacznie lepiej niż kiedykolwiek mógłby to zrobić, po prostu dlatego, że GPU nie jest zaprojektowany do wykonywania tej pracy, a CPU jest.

Mniejsza uwaga na marginesie, jednak gdyby możliwe było złomowanie CPU i posiadanie tylko GPU, czy nie sądzisz, że zmienilibyśmy jego nazwę?)

15
15
15
2011-07-10 17:57:36 +0000

Naprawdę pytasz Dlaczego nie używamy w CPU takich architektur jak GPU?

GPU jest po prostu wyspecjalizowanym CPU karty graficznej. Pożyczamy GPU do obliczeń niegraficznych, ponieważ procesor centralny ogólnego przeznaczenia nie jest po prostu w stanie wykonać obliczeń równoległych i zmiennoprzecinkowych.

W rzeczywistości używamy różnych (bardziej GPU-owych) architektur CPU. Np. procesory Niagara są dość wielozadaniowe. SPARC T3 będą wykonywać 512 równoległych wątków.

12
Advertisement
12
12
2011-07-10 15:55:56 +0000

Mogę się tu strasznie mylić i mówię na ten temat z małej lub żadnej władzy, ale oto co następuje:

  • Uważam, że każda jednostka wykonawcza GPU (“rdzeń”) ma bardzo ograniczoną przestrzeń adresową w porównaniu z jednostką centralną.

  • Jednostki wykonujące GPU nie radzą sobie sprawnie z rozgałęzieniami.

  • Jednostki wykonujące na GPU nie obsługują przerw sprzętowych w taki sam sposób jak procesory główne.

Zawsze uważałem, że sposób, w jaki jednostki wykonujące na GPU mają działać, to coś w rodzaju Playstation 3 “SPE”, chcą otrzymywać blok danych, wykonywać na nim szereg sekwencyjnych operacji, a następnie wypluwać kolejny blok danych, płukać, powtarzać. Nie mają tyle adresowalnej pamięci co główne “CPE”, ale chodzi o to, aby każde “SPE” zadedykować do konkretnego, sekwencyjnego zadania. Wyjście jednej jednostki może zasilać wejście innej jednostki.

Jednostki wykonujące nie działają dobrze, jeśli próbują “przeanalizować” dane i podjąć szereg decyzji na podstawie tego, co to są dane.

Te “bloki danych” mogą być częścią strumienia, np. lista wierzchołków z tabeli stanu gry, dane MPEG z dysku, itd.

Jeśli coś nie pasuje do tego modelu “strumieniowego”, to masz zadanie, którego nie da się efektywnie sparaliżować, a procesor graficzny niekoniecznie jest dla niego najlepszym rozwiązaniem. Dobrym przykładem jest przetwarzanie rzeczy opartych na “zdarzeniach zewnętrznych”, takich jak klawiatura, joystick lub wejście sieciowe. Niewiele jest rzeczy, które nie pasują do tego modelu, ale zawsze będzie ich kilka.

7
7
7
2011-07-12 04:36:14 +0000

To nie jest** nic o prędkości zegara ani celu. Oba są w stanie wykonać większość, jeśli nie wszystkie zadania, ale niektóre są nieco lepiej dostosowane do niektórych zadań niż inne.

Był bardzo stary argument, czy lepiej jest mieć dużo głupich rdzeni lub małą grupę bardzo inteligentnych rdzeni. Z łatwością sięga to lat 80-tych.

Wewnątrz procesora znajduje się wiele możliwych obliczeń, które można wykonać. Inteligentniejsze rdzenie są w stanie wykonać wiele różnych obliczeń w tym samym czasie (trochę jak wielordzeniowe, ale nie, to skomplikowane; zobacz Instruction-level parallelism ). Inteligentny rdzeń może wykonać kilka obliczeń w tym samym czasie (dodawać, odejmować, mnożyć, dzielić, obsługiwać pamięć), ale tylko jeden na raz; z tego powodu są one fizycznie większe (a więc znacznie droższe) niż głupie rdzenie.

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

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

Jest to znacznie bardziej skomplikowane pytanie niż może się wydawać. Aby uzyskać więcej informacji, przeczytaj ten artykuł o konstrukcji procesora:

Nowoczesne mikroprocesory - 90 minutowy przewodnik

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

6
Advertisement
6
6
2011-07-15 11:44:05 +0000

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

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

5
5
5
2011-07-10 14:57:18 +0000

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 okaleczone, by mogły być w pełni ogólne, ale nie są to te, o których tutaj mówimy)

Różnica polega na tym, jak są one instalowane na płycie i jakie zadania są im przydzielane. Oczywiście, używamy procesorów ogólnego przeznaczenia (lub zestawu procesorów ogólnego przeznaczenia) dla głównego administratora danych oraz specjalnej, równoległej, głęboko wyściełanej jednostki dla rzeczy (takich jak grafika), aby móc jak najlepiej z nich korzystać.

Większość trików spiffy, które zostały użyte do tego, aby procesory graficzne robiły swoje rzeczy bardzo szybko, zostały po raz pierwszy opracowane przez ludzi próbujących zrobić szybsze i lepsze procesory. Okazuje się, że Word i Excel oraz Netscape i wiele innych rzeczy, do których ludzie używają swoich komputerów, nie tylko nie wykorzystują w pełni funkcji oferowanych przez wyspecjalizowane graficzne układy scalone, ale nawet uruchamiają slower na tych architekturach, ponieważ rozgałęzienia dużo powodują (bardzo drogie i powolne) oczyszczanie linii rur.

3
Advertisement
3
3
2015-06-07 11:53:13 +0000

Powodem, dla którego nadal używamy procesorów jest fakt, że zarówno procesory jak i jednostki GPU mają swoje unikalne zalety. Zobacz mój następny dokument, zaakceptowany w ACM Computing Surveys 2015, który zawiera rozstrzygającą i wszechstronną dyskusję na temat odejścia od “debaty o CPU vs. GPU” na rzecz “wspólnych obliczeń CPU-GPU”. Ankieta dotycząca heterogenicznych technik obliczeniowych CPU-GPU

3
3
3
2011-07-17 16:44:16 +0000

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

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 trzeba dowodzić wszystkimi silnikami, co nie było brane pod uwagę przy programowaniu systemowym.

Z fuzją AMD zmieni się jednak to, jak będziemy musieli wykorzystać moc przetwarzania: albo wektorowo, albo szybko na jeden wątek.

3
Advertisement
3
3
2011-07-10 21:35:07 +0000

Cały sens istnienia GPU polegał na tym, by odciążyć procesor centralny od kosztownych obliczeń graficznych, które wykonywał w tym czasie. Połączenie ich w jeden procesor oznaczałoby powrót do miejsca, w którym wszystko się zaczęło.

2
2
2
2016-07-01 11:46:23 +0000

gpus to dobre procesory strumieniowe. można myśleć o przetwarzaniu strumieniowym jako o mnożeniu długiej tablicy liczb sekwencyjnie. 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ą możliwość tworzenia btyekodów, które meczy użycie instrukcji simd, gdy tylko jest to możliwe.

nie wszystko jest tablicą liczb. zdjęcia i filmy są, może i dźwięk (tu i tam są enkodery opencl). więc gpus może przetwarzać, kodować i dekodować zdjęcia, filmy i wszystko inne. jedną z wad jest to, że w grach nie można przeładować wszystkiego na gpus, ponieważ powodowałoby to zacinanie się, gpus jest zajęty grafiką i ma być wąskim gardłem w systemie podczas grania w gry. optymalnym rozwiązaniem byłoby pełne wykorzystanie wszystkich komponentów na komputerze, więc np. silnik fizyczny nvidii, domyślnie, robi obliczenia na cpu, gdy gpu jest w pełni wykorzystany.

2
Advertisement
2
2
2015-11-16 15:42:30 +0000

Mówiąc wprost, GPU można porównać do przyczepy w samochodzie. Jak zwykle kufer jest wystarczający dla większości ludzi, z wyjątkiem przypadków, gdy kupują coś naprawdę dużego. Wtedy mogą potrzebować przyczepy. Tak samo z GPU, jak zwykle wystarczy zwykły CPU, który wykona większość zadań. Ale jeśli potrzebujesz kilku intensywnych obliczeń w wielu wątkach, to możesz potrzebować procesora graficznego.

Advertisement