Olyan emberekről hallok, akik FPGA-kat használnak olyan rendszerek teljesítményének javítására, amelyek olyan dolgokat végeznek, mint a bitcoin-bányászat, az elektronikus kereskedelem és a fehérje hajtogatása.
Hogyan versenyezhet az FPGA a CPU-val a teljesítmény terén, ha a CPU általában legalább egy nagyságrenddel gyorsabban fut (az órajel sebességét tekintve)?
Megjegyzések
- Az FPGA mindent egyszerre csinál.
Válasz
CPU “s szekvenciális feldolgozó eszközök. Bontják az algoritmust műveletsorozatra és egyenként hajtják végre őket.
Az FPGA párhuzamos feldolgozó eszköz (vagy konfigurálható). Lehetséges, hogy egy teljes algoritmust az óra egyetlen kullancsával lehet végrehajtani, vagy legrosszabb esetben sokkal kevesebb órajel van, mint amennyit egy szekvenciális processzor igényel. A megnövekedett logikai bonyolultság egyik költsége általában az az alsó határ, amelynél az eszköz órajelezhető.
A fentieket szem előtt tartva az FPGA-k felülmúlhatják bizonyos processzorok CPU-jait, mert meg tudják csinálni ugyanazt a feladatot kevesebb órajelnél, bár alacsonyabb általános órajel mellett. Az elérhető nyereség nagymértékben függ az algoritmustól, de legalább egy nagyságrend nem atipikus valami FFT-hez hasonlóan.
Továbbá, mivel több párhuzamos végrehajtási egységet is felépíthet egy FPGA-ba, ha nagy mennyiségű adata van, amelyet át akar adni ugyanazon algoritmuson keresztül, akkor az adatokat eloszthatja a párhuzamos végrehajtási egységek között, és további nagyságrendekkel nagyobb áteresztőképességet érhet el, mint akár többmagos CPU-val is elérhető.
Az előnyökért fizetett ár az energiafogyasztás és a $$$ “s.
Megjegyzések
- +1; FPGA-k azonban nem olyan dinamikusak, mint a CPU-k, ezért a CPU-k általában jobban megfelelnek a PC-knek
- ” Az előnyökért fizetendő ár az energiafogyasztás és a $$$ ‘ s. ” – Ez gyakran igaz, de csúcsminőségű, több mint 1000 dolláros Intel Xeon gépet pontosan megverhet alacsony kategóriájú 50 dolláros Xilinx Spartan-6 sok algoritmus. De ez általában sok mérnöki időt igényel, és egy nagyon egyedi kialakítással rendelkezhet, amely csak egy alkalmazáshoz használható és nehezen változtatható meg. Tehát a kompromisszum nem csak a hatalom és a pénz, hanem az algoritmus fejlesztési ideje, újrafelhasználhatósága és rugalmassága. (Bár vitathatod az időt == pénz.)
- markt, az utolsó mondatoddal kapcsolatban ‘ t az FPGA-k sokkal alacsonyabb energiával rendelkeznek, mint a CPU-k? A CPU-khoz és az FPGA-khoz egyaránt sokféle eszköz áll rendelkezésre, de ha megnézzük azokat, amelyeket például bit-érmés bányászathoz használnak, akkor nem ‘ nem azokhoz használt processzorok sokkal nagyobb energiájú feladatok, mint az FPGA-k, amelyeket használnának?
- @David: Amikor a Bitcoin bányászatról beszélünk, a releváns mutató a wattonkénti hashek száma. Markt az általános energiafogyasztásról beszél. Vagyis egy adott FPGA a tipikus CPU teljesítményének háromszorosát is elfogyaszthatja, de jóval több mint 3-szor gyorsabb a Bitcoin bányászatánál; tehát a Bitcoin esetében ‘ nyer.
- @Billy: a wattonkénti hasítások száma · másodperc, nem wattonként.
Válasz
Marktnak ez főleg igaza van, de beledobom a 2 cent itt:
Képzelje el, hogy elmondtam, hogy olyan programot akartam írni, amely megfordította a bitek sorrendjét egy 32 bites egész számban. Valami ilyesmi:
int reverseBits(int input) { output = 0; for(int i = 0;i < 32;i++) { // Check if the lowest bit is set if(input & 1 != 0) { output = output | 1; // set the lowest bit to match in the output! } input = input >> 1; output = output << 1; } return output; }
Most már nem elegáns a megvalósításom, de biztos vagyok benne, hogy egyetértesz abban, hogy ennek végrehajtásához bizonyos számú művelet és valószínűleg valamilyen hurok is kapcsolódik. Ez azt jelenti, hogy a CPU-ban 1-nél több ciklust töltött el ennek a műveletnek a végrehajtásához.
Egy FPGA-ban ezt egyszerűen összekapcsolhatja reteszpárként. Adatait valamilyen regiszterbe juttatja, majd fordított bites sorrendben kapcsolja be a különböző regiszterbe. Ez azt jelenti, hogy a művelet egyetlen órajel-ciklus alatt fejeződik be az FPGA-ban. Így egyetlen ciklus alatt az FPGS befejezett egy olyan műveletet, amelynek elvégzéséhez az Ön általános célú CPU-jához sok ezer ciklus kellett! Ezenkívül valószínűleg pár száz ilyen regisztert is összekapcsolhat párhuzamosan. Tehát, ha néhány száz számban léphet az FPGA-ra, egyetlen ciklus alatt ez az ezer művelet százszorosára fejeződik be, mindez 1 FPGA órajel-ciklus alatt.
Sok dolog van, amit a általános célú CPU képes, de korlátozásként általánosított és egyszerű utasításokat állítottunk fel, amelyeknek szükségszerűen egyszerű utasítások listájává kell bővülniük egyes feladatok elvégzéséhez. Tehát azt tehetném, hogy az általános célú CPU-nak legyen olyan utasítása, mint a “fordított bites sorrend a 32 bites regisztrációhoz”, és ugyanolyan képességeket adjak a CPU-nak, mint az imént épített FPGA, de végtelen sok ilyen hasznos utasítás létezik, csak azokat helyezze be, amelyek a népszerű CPU-kban indokolják a költségeket.
Az FPGA-k, a CPLD-k és az ASIC-ek mind hozzáférést biztosítanak a nyers hardverhez, amely lehetővé teszi az olyan őrült műveletek meghatározását, mint az “AES256 titkosított bájtok kulccsal dekódolása” vagy “a h.264 videó keretének dekódolása”. Ezeknek az FPGA-nál egynél több óraciklusú késleltetése van, de sokkal hatékonyabb módon megvalósíthatók, mint a művelet milliónyi általános célú összeszerelő kódsorban történő kiírása. Ennek az az előnye is, hogy a rögzített célú FPGA / ASIC ezekhez a műveletekhez képest energiatakarékosabbá válik, mert nem kell annyi idegen munkát elvégezni!
A párhuzamosság a másik része, amely markt rámutatott, és bár ez is fontos, a lényeg az, amikor egy FPGA párhuzamba állít valamit, ami a CPU-ban már drága volt a művelet végrehajtásához szükséges ciklusok tekintetében. Miután elkezdte mondani, hogy “10 FPGA ciklusban tudok teljesíteni 100 000 ciklust igénylő feladat, és ezt a feladatot egyszerre 4 elemmel párhuzamosan tudom elvégezni. “Könnyen beláthatja, miért lehet egy FPGA sokkal gyorsabb, mint egy CPU!
Tehát miért nem használunk FPGA-kat, CPLD-ket és ASIC-eket mindenhez? Mert általában egy egész chipről van szó, amely csak egy műveletet végez. Ez azt jelenti, hogy bár az FPGA / ASIC-ben sok nagyságrenddel gyorsabban futtathat egy folyamatot, később nem változtathatja meg, ha ez a művelet már nem hasznos. Az ok, amiért (általában) egyszer nem változtathat meg egy FPGA-t Az áramkörben az áll, hogy az interfész vezetékezése rögzített, és általában az áramkör nem tartalmaz olyan alkatrészeket, amelyek lehetővé tennék az FPGA átprogramozását egy hasznosabb konfigurációba. Vannak kutatók, akik hibrid FPGA-CPU modulokat próbálnak létrehozni, ahol a CPU-nak van egy része, amelyet át lehet kapcsolni / átprogramozni, mint egy FPGA-t, ami lehetővé teszi a CPU hatékony részének “betöltését”, de ezek egyike sem valaha is piacra került (ha jól tudom).
Megjegyzések
- Például a bitek megfordítására (és minden más bitre) csere / kiválasztási feladatok) nem ‘ nem kell 1 óraciklus, ehhez 0 kell. Példádban 1 óraciklus szükséges ahhoz, hogy adatokat reteszben tárolj , ami nem ugyanaz a művelet. 1 óra ciklusra van szükség, függetlenül attól, hogy megfordítja-e a biteket vagy sem. A bitek megfordításának működése 0 óra ciklus; nincs rezsi, csak más útválasztás. A különbség nem csak szemantika, különösen, ha elkezdi összeadni a dolgokat. Például mennyi időbe telik a 32 bites szó 3 bites lefelé tolása, majd minden más rágcsálás, majd megfordítása?
- ” hibrid FPGA-CP U modul ” – ezek hosszú ideje vannak a piacon (lásd: xilinx.com/products/silicon-devices/ soc / zynq-7000 / index.htm (egy modern sikeres)), de még a speciális támogatás nélkül is, a szoftver & HDL kombinálása általában puha CPU beépítésével történik az anyag FPGA-ja.
- @wjl Ön ‘ igaza van abban, hogy technikailag nem igényel ciklust a művelet végrehajtása. Azt állítom, hogy a példád mégis csak szemantikailag különbözik, főleg azért, mert ennek a három műveletnek a végrehajtása logikailag fix bitmintává alakul (azaz a b1b2b3b4-gyel kezdem, a b3b1b4b2-vel végzek). Ez egyfajta állításom volt az egész válaszban. Arra próbáltam felhívni a figyelmet, hogy egy művelet lépéssorozatként való leírása gyakran csak akkor szükséges, ha fix utasításkészlet / kapu elrendezés van.
- @wjl: Ahogyan David kérdezte a kérdést, ő Úgy tűnik, hogy a ” CPU ” egyenértékű egy Intel vagy AMD x86 / x86_64 erősen ütemezett, csővezetékes és optimalizált processzorral. Sok puha ” CPU ” létezik, de az FPGA-ba ülésre tervezettek közül senki sem órajelezhető, mint egy i7, és nem is majdnem olyan optimalizáltak vagy képesek. Ami a hibrideket illeti, inkább valami ilyesmire gondoltam: newsroom.intel.com/docs/DOC-1512 , amely nyilvánvalóan létezik
- a A Zynq valóban nem ‘ túl rossz processzor (ARM Cortex-A9 – ugyanaz, ami táblagépeket futtat stb.), De egyetértek azzal, hogy sokkal félelmetesebb lenne integrált FPGA, nagy sebességű x86_64. =)
Válasz
Az itt bemutatott többi népszerű válasz az FPGA-k és a CPU-k közötti szó szerinti különbségekről szól. Rámutatnak az FPGA párhuzamos jellegére a CPU szekvenciális jellegére, vagy példákat hoznak fel arra, hogy bizonyos algoritmusok miért működhetnek jól egy FPGA-n. Mindezek jóak és igazak, de azt javasolnám, hogy van egy alapvető különbség a CPU-k és az FPGA-k között.
Mi a közös nevező az FPGA és a CPU között? Az, hogy mindkettő szilícium tetejére épül. Bizonyos esetekben szó szerint ugyanazok a szilícium-folyamatok.
Az alapvető különbség az absztrakciók, amelyeket a szilícium tetejére halmozunk. Nem lehetséges, hogy egy ember megértse az egyetlen modern CPU-kialakítás teljes részletességét a szilíciumtól a csomagolt IC-ig. Tehát a mérnöki folyamat részeként ezt a bonyolult problémát kisebb kezelhető problémákra osztjuk, amelyekre az emberek köré fonhatják a fejüket.
Gondolja át, mi kell ahhoz, hogy a szilícium működőképes processzorrá alakuljon. Íme egy kissé leegyszerűsített nézet a célhoz szükséges absztrakciós rétegekről:
-
Először vannak mérnökeink, akik tudják, hogyan lehet szilíciumból tranzisztort létrehozni. Tudják, hogyan kell megtervezni azokat az apró tranzisztorokat, amelyek 10 vagy akár 100 gigahertzes sebességgel kortyolják el az energiát és kapcsolnak, és tudják, hogyan kell olyan nagyszerű tranzisztorokat tervezni, amelyek elegendő energiával képesek jeleket vezetni ahhoz, hogy azokat egy IC-csomagból és egy NYÁK-ból kiküldjék. egy másik lapkára.
-
Ezután vannak digitális logikai tervezőink, akik tudják, hogyan kell ezeket a tranzisztorokat több száz különböző logikai cellával rendelkező könyvtárakba állítani. Logikai kapuk, papucsok, muxok és kiegészítők, hogy csak néhányat említsünk. Mindezt különféle konfigurációkban.
-
Ezután mérnökök különféle csoportjai vannak, akik tudják, hogyan kell ezeket a digitális (és néha analóg) blokkokat összerakni, hogy magasabb szintű funkcionális blokkokat alkossanak, mint nagy sebességű adó-vevők, memória vezérlők, elágazó prediktorok, ALU-k stb.
-
Ezután CPU-tervezőink vannak, akik magas szintű CPU-terveket építenek ki úgy, hogy ezeket a funkcionális egységeket egy teljes rendszerbe vonják össze.
És ez nem áll meg itt. Ezen a ponton van egy működő processzorunk, amely futtatja az összeállítási kódot, de ez az a nyelv, amelyet manapság a legtöbb programozó nem ír.
- Lehet, hogy van egy C fordítónk, amely az összeállításhoz fordít kód (valószínűleg valamilyen köztes ábrázolással)
- A C tetejére még egy absztrakciót is felvehetünk, hogy objektumorientált nyelvet kapjunk
- Akár virtuális gépet is írhatunk a C vagy a C ++ tetejére így értelmezhetünk olyan dolgokat, mint a Java bájtkód
És az absztrakciós rétegek onnan mehetnek tovább. A fontos pont itt az, hogy ezek az absztrakciós rétegek egy CPU-alapú rendszert hoznak létre, amely nagymértékben méretez és az egyedi szilícium-tervezés apró töredékébe kerül.
Ennek ellenére itt fontos megjegyezni, hogy minden absztrakció maga is költséget jelent. A tranzisztortervező nem minden felhasználási esetre gyártja a tökéletes tranzisztort. Ésszerű könyvtárat épít, ezért néha olyan tranzisztort használnak, amely valamivel több energiát vagy egy kicsit több szilíciumot emészt fel, mint amennyi az adott munkához valójában szükséges. És hasonlóan a logikai tervezők sem építenek minden lehetséges logikai cellát. Lehet, hogy építenek egy 4 bemeneti NAND kaput és egy 8 bemeneti NAND kaput, de mi történik, ha egy másik mérnöknek 6 bemeneti NAND kell? 8 bemeneti NAND kaput használ, és összekapcsol 2 fel nem használt bemenetet, ami elveszíti a szilícium erőforrásokat és a derékig érő energiát. És így megy fel az absztrakciók láncolatán. Minden réteg lehetővé teszi számunkra a bonyolultság kezelését, ugyanakkor további növekményes költségeket számít fel számunkra a szilícium és az energia tekintetében.
Most hasonlítsa össze ezeket az absztrakciókat az FPGA-hoz szükséges adatokkal. Lényegében az FPGA absztrakciók a fenti listán a 2. helyen állnak. Az FPGA lehetővé teszi a fejlesztők számára, hogy a digitális logikai rétegen dolgozzanak. Ennél valamivel kifinomultabb, mert a CPU-k ebben a rétegben „keményen kódolva” vannak, és az FPGA-kat futás közben kell konfigurálni (ami a BTW miatt a CPU-k általában sokkal magasabb frekvenciákat futtatnak), de a lényeges fontos igazság az, hogy ezek messze vannak kevés absztrakció az FPGA-khoz, mint a CPU-khoz.
Tehát Miért lehet egy FPGA gyorsabb, mint egy CPU? Lényegében azért, mert az FPGA sokkal kevesebb absztrakciót használ, mint egy CPU, ami azt jelenti, hogy a tervező közelebb dolgozik a szilíciumhoz. Nem fizeti a CPU-khoz szükséges sok absztrakciós réteg költségeit. Alacsonyabb szinten kódol, és keményebben kell dolgoznia egy adott funkcionalitás eléréséért, de a jutalom magasabb teljesítményt ér el.
De természetesen van lefelé néző oldal kevesebb absztrakcióhoz is. Mindazok a CPU-absztrakciók jó okból vannak. Sokkal egyszerűbb kódolási paradigmát adnak nekünk, ami azt jelenti, hogy több ember könnyen fejlődhet számukra. Ez viszont azt jelenti, hogy sokkal több CPU-tervezés létezik, és így hatalmas ár / skála / piacra jutás előnyeink vannak a CPU-kból.
Tehát itt van. Az FPGA-k kevesebb absztrakcióval rendelkeznek, így gyorsabbak és hatékonyabbak lehetnek, de nehezen programozhatók. A CPU-k sok absztrakcióval rendelkeznek, így könnyen fejleszthetők, méretezhetők és olcsók. De feladják a kereskedelem gyorsaságát és hatalmát ezekért az előnyökért.
Megjegyzések
- Az FPGA ‘ s egyszerű ismétlődő blokkok felhasználásával készülnek, amelyek egyszerű logikai feladatokat hajtanak végre. Bizonyos típusú feladatokra készültek.A CPU ‘ s (OTOH) sok összetett funkcionális részből áll, amelyek mind különböző dolgokat végeznek. Fontolóra lehet venni, hogy a CPU sok különböző FPGA-szerű eszköz csoportja (elvégre ‘ mindez csak szilícium, elektronika és matematika). Tehát ‘ nem csak az absztrakciókról szól, hanem ‘ a komplexitásról. A CPU ‘ s komplex eszközök sokféle típusú elektromos eszközből állnak, míg az FPGA néhányból áll. A CPU sörétes puska, míg az FPGA puska.
Válasz
Míg a többi válasz helyes , egyikük még nem foglalkozik a kérdésed bitcoin bányászati példájával, ami valóban egy tisztességes példa. A Bitcoin-bányászat magában foglalja egy kriptográfiai kivonatfüggvény, az SHA-256 egy másik SHA-256-os számítás eredményének ismételt kiszámítását, olyan adatok esetében, ahol csak egyetlen 32 bites egész szám változik meg, mindaddig, amíg a kapott hash bizonyos tulajdonságokkal nem rendelkezik. Minden SHA-256 ugyanazon algoritmus 64 ismétléséből áll, amelyek 32 bites kiegészítéseket, bitváltásokat és néhány további bitkezelési műveletet tartalmaznak.
Ha ezt a ciklust 32 bites (vagy több) CPU-ra programozza. , megtalálja az utasításkészletét nagyon alkalmasnak a feladatra — Az SHA-256-ot úgy tervezték, hogy hatékonyan fusson CPU-n. Ennek ellenére a modern processzor szilíciumterületének csak 2% -át fogja használni, olyan területigényes funkcionalitással, mint gyorsítótár, szorzás, osztás, lebegőpontos művelet, elágazás és brach előrejelzés stb., Vagy egyáltalán nem, vagy nem képes jelentős teljesítménynövekedést biztosít ehhez a feladathoz.
Olyan konfigurálható hardverekben, mint egy FPGA, egyszerűen csak ezt a 2% -ot kell megvalósítania, és tovább optimalizálhatja, ha megfeledkezik a kódfuttatásról, és inkább kapukat tervez, amelyek mindegyikét közvetlenül kiszámítják. ezek a gyakran ismétlődő alfunkciók. Olyan csővezetékekkel, hogy mindegyik eredményt vigyen a következő óraművekbe, és 128-szor megismételve (és némi speciális kiegészítő logikával, ahol minden SHA-256 kezdődik és végződik), végül minden óraciklus (talán 100 millió hasítás másodpercenként egy FPGA-n, amelyet ennél egyszerűbb logikával támogatnak 300 MHz-en), míg egy modern CPU-n magonként néhány ezer órajelenként egy eredményre számíthat, mondjuk 10 millió hash másodpercenként ond egy többmagos, több GHz-es CPU-n.
Ha ez a példa érdekes Önt, érdemes megnéznie a kapcsolódó válaszoljon az ASIC bányászok belső részeire a bitcoin.stackexchange webhelyen, mivel sok FPGA bányász ugyanúgy működik, mint konfigurálható, nem pedig egyedi gyártású hardvereket. Csak a teljesség kedvéért: Vannak más lehetőségek is, például az általam leírt csővezeték korlátozása vagy elkerülése a triviálisabb párhuzamosítás érdekében több független SHA-256 hasher használatával. FPGA belső terének korlátjaitól és annak teljes méretétől függően , ez akár jobb teljesítményt is eredményezhet, bár kevésbé lenne hatékony a kapuk száma és a rezsicsökkentés szempontjából, ha tökéletes szabadsága lenne a teljes chip tervezésében, nem csak az FPGA konfigurációjában.
Megjegyzések
- Ez ‘ nagyon jó szempont a szilícium hasznosításához.
- De talán (akaratlanul is) félrevezető, tekintve, hogy az FPGA kissé összetett cellákból áll, sok fizikai kapuval, amelyek egy tipikus alkalmazás ismét csak egy töredékét használja fel, lehetővé téve a gyártók számára, hogy egyenértékű kapuszámokat hirdessenek, hogy megpróbálják megmondani, mennyit érhet egy ” tipikus ” alkalmazás …
Válasz
A fenti válaszok helyesek, de elmulasztják a lényeget miért az FPGA-k (és az egyéni ASIC-ek) különösen jók a bitcoin számításokhoz.
Az igazi előny az, hogy az SHA-256 számítások nagy része logikai művelet (például biteltolódás), amelyek elvégezhetők vezeték. Ilyen módon 0 óraciklusra van szükségük.
Egy másik fontos előny, hogy az FPGA-k sokkal energiahatékonyabbak (azaz MIPS per Watt), mint a CPU-k, tehát a számításokhoz szükséges energiamennyiség sok Kevésbé. Ez azért fontos, mert a bitcoin bányászatának költsége attól függ, hogy mennyi áramot használ fel annak előállításához.
Az ASIC chipek energiahatékonyabbak, mint az FPGA-k, így sokkal olcsóbban tudják végrehajtani ugyanazt a kódot. A fedélzeten több végrehajtási egységet is be lehet zsúfolni, hogy gyorsabbak legyenek. Hátránya, hogy az egyedi ASIC elkészítésének költsége nagyon magas, ezért a gyártási költségek fedezéséhez elég sok chipet kell eladni.
A GPU-kat bitcoin készítésre is használják, de mivel ezek sokkal kevésbé energiatakarékosak, és veszítettek az FPGA-k és az egyedi ASIC-ek elől.
Megjegyzések
- Ha megnézzük a monero hash algoritmust, más néven cryptonight, látni fogjuk, hogy egy FPGA implementáció szinte lehetetlen a nagy mennyiségű a memóriát véletlenszerűen kellett elérni (2 MB). Ebben az esetben a CPU előnye.
- @ lucas92 nem tudja integrálni a RAM-ot az FPGA-ba, hogy be tudjon férni a szükséges memória?
- Valószínűleg nyertél ‘ t van elég logikai elem az FPGA-ban hozzá.