Miért bányászik gyorsabban a GPU a CPU-nál?

A (még) kevésbé szakavatott Bitcoin-felhasználók gyakran nem értik, hogy miért is bányászik olyan összehasonlíthatatlanul hatékonyabban egy GPU egy CPU-nál. Nos, ennek több oka is van.

Először is, csak hogy tisztázzuk a fogalmakat, a CPU, avagy a központi feldolgozó egység a számítógépnek az a része, amelyet az összes telepített és éppen futtatott szoftver használ, vagyis tényleg és szó szerint ez a központi motorja az egész gépnek, ez koordinálja az összes többi alkatrész munkavégzését – természetesen a futtatott szoftverek kódjának (és remélhetőleg egyben a felhasználó szándékainak) megfelelően.

Manapság a legtöbb számítógép többmagos CPU-kat használ (ami majdnem ugyanaz, mintha több CPU-nk lenne egyetlen fizikai kötegben), egyes gépeknek pedig (így például a Mac Pro-nak) ténylegesen és szó szerint is több CPU-ja van.

A CPU többnyire egy manuálisan eltávolítható egység, ami a számítógép alaplapjára csatlakoztatható, és egy óriási, fém hűtőrendszer alatt bújik meg. Ez a hűtőrendszer általában ventilátort használ, de vannak vízhűtéses megoldások is.

Ezzel szemben a GPU, avagy a grafikai feldolgozó egység a gép videórenderelő rendszerének a része. A GPU feladata általában a 3D-s grafikák és látványelemek megjelenítéséhez és animálásához szükséges számítások elvégzése, hogy ezzel is tehermentesítse a CPU-t.

A szerverek GPU-kapacitása jobbára erősen korlátozott, és sok esetben teljesen hiányzik is, mivel ezeket jellemzően távolról, szöveges interfésszel vezérlik. A legtöbb mainstream számítógép jóval lassabb, de ezzel együtt olcsóbb és kevesebbet is fogyasztó IGP-t (integrált grafikai processzort) használ, amelyek lényegüket tekintve szintén GPU-k ugyan, csak épp közvetlenül a lapkakészletbe integrálták és az alaplapra forrasztották őket. Igazán izmos GPU-kra leginkább csak valóban grafikaigényes feladatokhoz, így például játékokhoz vagy videószerkesztéshez van szükség – de bizony jól jön a Windows 7 áttetsző ablakainak és a Mac OS X Aqua desktopját kezelő, gyönyörűségesen szép, vízszerű látványelemeket felvonultató Quartz rendszeréhez is.

A felszínes hasonlóságok dacára tehát a GPU számos fontos részletben különbözik a CPU-tól, mivel eleve más, specializáltabb feladatokra is szánták – és pontosan e különbségek miatt is teljesít sokkal jobban bitcoin-bányászat terén, mint a CPU.

Rövid válasz

Egy CPU-mag órajel-ciklusonként 4 32 bites utasítást képes feldolgozni (128 bites SSE utasítással) vagy 8-at AVX-szel (256 bit), míg egy GPU, így például a Radeon HD 5970-es nem kevesebb, mint 3200-at (a 3200 ALU-ja avagy shaderje bevetésével). Ez tehát 800x (avagy, az AVX esetében 400x) több utasítás végrehajtását teszi lehetővé órajel-ciklusonként. Bár 2011-ben a leggyorsabb CPU-k már 6, 8 vagy akár 12 maggal rendelkeznek, és valamivel magasabb órajel-frekvenciával dolgoznak (2000-3000 MHz, szemben a Radeon HD 5970-es 725 MHz-ével), de egyetlen HD 5970-es még így is több, mint ötször gyorsabb, mint négy, egyenként 2,3 GHz-en ketyegő, 12 magos CPU (amelyek ráadásul már nem kevesebb, mint 4.700$-ba kerülnének, szemben a HD 5970-es 350$-jával).

A CPU a főnök

A CPU-t elsősorban “vezetői pozícióra” és döntéshozatalra tervezték, a szoftverek rendelkezéseinek megfelelően. Ha például begépelsz egy dokumentumot, majd elmented azt, úgy a CPU-ra hárul a feladat, hogy átalakítsa azt a megfelelő fájltípussá és levezényelje annek a fájlként való merevlemezre írását. Emellett a CPU-k el tudnak végezni mindenféle matematikai feladatokat is, mivel mindegyikben van egy vagy több “Aritmetikai/logikai egység” (ALU). A CPU-k emellett kiválóan alkalmasak a “ha ez, akkor ez, egyébként pedig az” jellegű utasítások elvégzésére is. A CPU-k belső szerkezetének egy igen tekintélyes hányada szolgálja azt a célt, hogy szükség esetén egy pillanat alatt át tudjon váltani egyik feladatról a másikra.

Kezelniük kell továbbá a CPU-knak számos további komplikációkat okozó tényezőt is, így például:
* a megfelelő prioritási szintek, valamint az operációs rendszer és a felhasználói programok közti határvonal fenntartását;
* létrehozni a “virtuális memória” illúzióját a programok számára;
* a legnépszerűbb processzoroknak pedig a régebbi kódokkal is kompatibilisnek kell lenniük.

A GPU a beosztott

A GPU ehhez képest egészen másmilyen. Igen, a GPU is tud ugyan számolni, és szintén képes meghatározott feltételeknek megfelelő “ez” vagy “az” utasítások követésére. A CPU-kkal ellentétben azonban a GPU-t nem irányításra és végrehajtásra tervezték, hanem videófeldolgozásra – ami pedig rengeteg ismétlődő feladat elvégzését igényli, mivel rengeteg pixel helyzetét kell folyamatosan újraszámolnia a képernyőn. Ahhoz pedig, hogy kellő hatékonysággal végezhesse el ezt a feladatot, értelemszerűen sokkal nagyobb hangsúlyt fektettek a tervezésénél az ismétlődő feladatok gyors elvégzésére, mint például a feladatok közti gyors váltásra. Ebből következően a GPU-k rengeteg ALU-val rendelkeznek, sokkal többel, mint a CPU-k, és ezért azoknál sokkan gyorsabban tudnak elvégezni igen nagy mennyiségű matematikai feladatot is.

Analógia

Felfoghatod a CPU-t úgy is, mint nagyon okos és jól képzett emberek egy kis csoportját, akik gyorsan el tudnak végezni bármilyen rájuk bízott feladatot – míg a GPU relatíve ostoba emberek nagy tömege, akik bár egyénileg nem kifejezetten intelligensek és nem is gyorsak, de akiket viszont ki lehet képezni ismétlődő feladatok elvégzésére, és akik így kollektíven, pusztán a nagy létszámuk miatt mégis igen produktívak tudnak lenni.

Nem arról van szó tehát, hogy a CPU dagadt lenne, lusta vagy elkényeztetett; a CPU-k és a GPU-k is egy apró szilíciumlapkán összezsúfolt mikroszkópikus tranzisztorok milliárdjaiból állnak. A szilíciumchipek esetében pedig mindig a méret a kulcskérdés. Azok a szerkezetek, amelyek képessé teszik a CPU-kat a feladataik hatékony elvégzésére, igen sok helyet foglalnak. Ha tehát elhagyjuk ezeket a szerkezeteket, úgy máris tekintélyes területet szabadítottunk fel, amit telepakolhatunk rengeteg “ostoba”, egyenként igen parányi ALU-val.

A GPU-k ALU-it csoportokra osztják, a csoportok pedig mindig kollektíven dolgoznak a feladataikon – más szóval, nincs olyan, hogy egy csoport egy része ezen dolgozik, a másik meg azon. A csoportok munkavégzése mindig egységes. Vagy mindannyian tökéletes szinkronban dolgoznak egymással egyazon feladat szinte teljesen azonos variációin, vagy pedig egyáltalán semmit nem csinálnak. Mivel pedig a bitcoin-bányászat alapfolyamatát képező hashpróbálgatás rendkívül ismétlődő feladat, amelynek minden végigpróbált változata a hashelt adat csak egyetlen apró részletében, egyetlen szám, a “nonce” megváltoztatásában tér el a többitől, ezért a GPU-k kiválóan alkalmasak ennek az elvégzésére. Az ATI Radeon 5970-es videókártya például azért örvend különös népszerűségnek a bitcoin-bányászok körében, mivel jelenleg ezzel lehet a leghatékonyabban bányászni a piacon elérhető összes kártya közül.

Ez a kártya összesen 3.200 “Stream processzorral” rendelkezik; ezeket felfoghatunk 3.200 igen ostoba végrehajtó egységként is, amelyeket kiképezhetünk egyazon feladat ismétlődő végrehajtására mindaddig, amíg nem kell semmiféle, a munkafolyamatukat megszakító, bonyolult döntéseket hozniuk. Ezek a végrehajtó egységek blokkokra oszlanak. Az 5970-es VLIW-5-ös architektúrát használ, ami azt jelenti, hogy a 3.200 Stream processzora valójában 640 “mag”, amelyek mindegyike 5 utasítást képes elvégezni órajel-ciklusonként. Az nVidia ezeket a magokat “Cuda magokként” emlegeti; mivel azonban azok nem VLIW-k (lásd feljebb), ezért nem is tudnak olyan sok feladatot elvégezni órajel-ciklusonként. Ezért sem érdemes pusztán magszám alapján összehasonlítani a videókártyákat, és ezért is van az, hogy az nVidia kártyái sokkal rosszabbul teljesítenek az ATI-féléknél SHA-256 hashelés terén.

Mivel az ALU-k végeznek el minden, a bitcoin-bányászathoz szükséges feladatot, ezért a rendelkezésre álló ALU-k száma közvetlenül befolyásolja a hashkapacitást. És akkor vessük ezt most össze egy négymagos CPU-val, amelyik pillanatok alatt vált ugyan egyik feladatról a másikra, de legfeljebb csak néhányszor négy, vagy rosszabb esetben csak négy ALU-ja van; egyetlen bitcoin-bányászati SHA256 hash végigszámításához megközelítőleg 1.000 egyszerű matematikai lépésen keresztül vezet az út, amelyeket mind, teljes egészében az ALU-knak kell elvégezniük.

Dióhéjban ezért olyan sokkal hatékonyabbak tehát a GPU-k bitcoin-bányászat terén a CPU-knál. A bitcoin-bányászathoz nem kell döntéseket hozni, csak ismétlődő matematikai műveletek hosszú sorát elvégezni. Az egyetlen eldöntendő kérdés, amivel bitcoin-bányászat közben valaha is szembesül a gép, pusztán annyi, hogy “érvényes-e ez a blokk vagy sem?”. Ez a feladat tehát minden ízében GPU-knak való.

Miért gyorsabbak az AMD GPU-i az nVidia GPU-inál?

Először is azért, mert az AMD sok egyszerű, viszonylag alacsony frekvencián működő ALU-t/shadert (VLIW-dizájn) használ (jellemzően 1120-3200, 625-900 MHz-en ketyegő ALU-t), míg az nVidia mikroarchitektúrája kevesebb, de jóval összetettebb ALU-ra és magasabbra srófolt shader-órajelekre épül (ez általában 448-1024, 1150-1544 MHz-en ketyegő ALU-t jelent). Ebből következően tehát az nVidia ALU-i több négyzetmillimétert foglalnak a lapkákon, így kevesebb is fér el belőlük az egyes chipeken, és hamarabb el is érik a frekvenciafalat, mint az AMD. Ezért nem tudják elég magasra srófolni az órajelet sem ahhoz, hogy elérhessék vagy felülmúlhassák az AMD teljesítményét. Így pedig az AMD jelentős előnyt élvez az nVidiával szemben nyers ALU-kapacitás terén:

* AMD Radeon HD 6990: 3072 ALUs x 830 MHz = 2550 milliárd 32 bites utasítás másodpercenként
* nVidia GTX 590: 1024 ALUs x 1214 MHz = 1243 milliárd 32 bites utasítás másodpercenként

Ez a megközelítőleg 2-3x-os teljesítménybeli különbség az AMD és az nVidia teljes GPU-termékpalettáján végigvonul, és az abszolút ALU-orientált GPGPU feladatoknál, így például bitcoin-bányászatnál, jelszó-végigpróbálgatásnál és más hasonlóknál domborodik ki a legszembetűnőbben.

Másodszor, nem elhanyagolható tényező az sem, hogy a bányászalgoritmus SHA-256-alapú; ez az eljárás ugyanis nagyon sokat használja a 32 bites integer right rotate-műveletet. Ezt az AMD GPU-i egyetlen hardveres utasítással el tudják végezni (BIT_ALIGN_INT), viszont az nVidia GPU-i csak három különálló utasítással tudják emulálni (2 váltás + 1 hozzáadás). Ez a tényező pedig további 1,7x-os teljesítményelőnyt biztosít az AMD-nek (csak ~1900 utasításra van szükség ~3250 helyett az SHA-256 tömörítő funkció elvégzéséhez).

Együttvéve tehát ez a két tényező összességében mintegy 3-5x hatékonyabb bitcoin-bányászokká teszi az AMD GPU-it az nVidia alkotásainál.

Lásd még

* Bányászhardver-összehasonlító táblázat
* Bányászok
* Bányásztársulás-üzemeltetők

Forrás: Bitcoin Wiki

A lap szövege Creative Commons Nevezd meg! – Ne add el! – Így add tovább! 3.0 licenc alatt áll, felhasználni csak forrásmegjelöléssel, és ide mutató linkkel szabad.

Még nincsen hozzászólás

Jump into a conversation

Még nincsen hozzászólás!

Szólj hozzá elsőként.