Slyšel jsem, že lidé používají FPGA ke zlepšení výkonu systémů, které dělají věci jako těžba bitcoinů, elektronické obchodování a skládání proteinů.

Jak může FPGA konkurovat výkonu CPU, když CPU obvykle běží alespoň o řád rychleji (co se týče rychlosti hodin)?

Komentáře

  • FPGA dělá vše najednou.

Odpověď

CPU „Jsou zařízení pro sekvenční zpracování. Rozdělují algoritmus na sled operací a provádějí je jeden po druhém.

FPGA jsou (nebo mohou být konfigurována jako) zařízení pro paralelní zpracování. Celý algoritmus může být proveden jediným tikem hodin, nebo, v nejhorším případě, mnohem méně hodinových tiků, než je tomu u sekvenčního procesoru. Jednou z nákladů na zvýšenou logickou složitost je obvykle nižší limit, při kterém lze zařízení taktovat.

S ohledem na výše uvedené mohou FPGA překonat CPU tím, že dělají určité úkoly, protože to dokážou stejný úkol za méně hodinových tiků, i když při nižší celkové hodinové frekvenci. Zisky, kterých lze dosáhnout, jsou vysoce závislé na algoritmu, ale přinejmenším řádově není atypický pro něco jako FFT.

Dále proto, že můžete do FPGA zabudovat více paralelních prováděcích jednotek, pokud máte velký objem dat, která chcete předat stejným algoritmem, můžete data distribuovat napříč jednotkami paralelního provádění a získat další řádově vyšší propustnost, než jaké lze dosáhnout i u vícejádrového CPU.

Cena, kterou za výhody platíte, je spotřeba energie a $$$ „s.

Komentáře

  • +1; FPGA však nejsou tak dynamické jako CPU, což je důvod, proč jsou CPU pro PC obvykle vhodnější
  • “ Cena, kterou za výhody platíte, je spotřeba energie a $$$ ‚ s. “ – To je často pravda, ale můžete porazit špičkový multi-$ 1000 Intel Xeon stroj s low-end $ 50 Xilinx Spartan-6 za mnoho algoritmů. Ale to obvykle trvá hodně času a můžete skončit s velmi vlastním designem, který funguje pouze pro jednu aplikaci a je těžké ho změnit. Kompromis tedy není jen síla a peníze, ale doba vývoje algoritmu, opětovné použití a flexibilita. (I když můžete argumentovat time == money.)
  • markt, o vaší poslední větě nejsou ‚ t FPGA mnohem nižší výkon než CPU? Existuje široká škála zařízení pro CPU i FPGA, ale když se podíváme na ta, která se používají pro věci, jako je těžba bitcoinů, nejsou ‚ t pro ně použitá CPU úkoly mnohem více náročné na energii než FPGA, které by byly použity?
  • @David: Když mluvíme o těžbě bitcoinů, příslušnou metrikou je počet hashů na watt. Markt mluví o celkové spotřebě energie. To znamená, že dané FPGA může spotřebovat 3x výkon typického CPU, ale při těžbě bitcoinů může být mnohem více než 3x rychlejší; takže u bitcoinů ‚ vyhrává.
  • @Billy: počet hashů na watt · sekundu, ne na watt.

Odpověď

Markt to má většinou v pořádku, ale hodím své 2 centy zde:

Představte si, že jsem vám řekl, že chci napsat program, který obrátil pořadí bitů uvnitř 32bitového celého čísla. Něco takového:

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; } 

Moje implementace nyní není elegantní, ale jsem si jist, že souhlasíte s tím, že by do toho bylo zapojeno několik operací, a pravděpodobně nějaká smyčka. To znamená, že v CPU jste strávili implementací této operace mnoho více než 1 cyklu.

V FPGA to můžete jednoduše zapojit jako dvojici západek. Dostanete svá data do nějakého registru a poté je zapojíte do jiného registru v opačném pořadí bitů. To znamená, že operace bude dokončena v jediném hodinovém cyklu v FPGA. V jediném cyklu tedy FPGS dokončil operaci, která vašemu univerzálnímu CPU zabrala mnoho tisíc cyklů! Kromě toho můžete zapojit pravděpodobně několik stovek těchto registrů paralelně. Pokud se tedy můžete přesunout v několika stovkách čísel na FPGA, v jediném cyklu dokončí tyto tisíce operací stokrát, a to vše v 1 hodinovém cyklu FPGA.

Existuje mnoho věcí, které CPU pro všeobecné účely to umí, ale jako omezení nastavíme zobecněné a jednoduché pokyny, které je nutné k dokončení některých úkolů rozšířit do seznamů jednoduchých pokynů. Takže bych mohl udělat, aby CPU pro všeobecné účely měl instrukci jako „obrácené pořadí bitů pro 32bitový registr“ a dal CPU stejnou schopnost jako FPGA, které jsme právě postavili, ale existuje nekonečné množství takových možných užitečných instrukcí, a tak jsme vložte pouze ty, které zaručují cenu v populárních CPU.

FPGA, CPLD a ASIC vám umožňují přístup k surovému hardwaru, který vám umožňuje definovat šílené operace jako „dešifrovat šifrované bajty AES256 pomocí klíče“ nebo „dekódovat snímek videa h.264“. Ty mají latence více než jednoho taktovacího cyklu v FPGA, ale mohou být implementovány mnohem efektivnějším způsobem než psaní operace v milionech řádků kódu pro všeobecné použití. To má také výhodu v tom, že pro mnoho z těchto operací je energeticky efektivnější použití FPGA / ASIC, protože nemusí dělat tolik cizí práce!

Parallelism je další část, která markt zdůrazněno, a i když je to také důležité, hlavní věcí je, když FPGA paralelizuje něco, co už bylo na CPU nákladné, pokud jde o cykly potřebné k provedení operace. Jakmile začnete říkat „Umím hrát v 10 FPGA cyklech úkol, který zabere mému CPU 100 000 cyklů, a tento úkol zvládnu paralelně se 4 položkami najednou, „můžete snadno pochopit, proč by FPGA mohlo být sakra mnohem rychlejší než CPU!

Takže proč pro všechno nepoužíváme FPGA, CPLD a ASIC? Protože obecně jde o celý čip, který nedělá nic jiného než jednu operaci. To znamená, že ačkoliv můžete ve svém FPGA / ASIC získat proces, který vám umožní spustit mnoho řádů rychleji, můžete jej „později změnit, až tato operace přestane být užitečná. Důvod, proč nemůžete (obvykle) jednou změnit FPGA v obvodu je to, že kabeláž rozhraní je pevná a obvod normálně neobsahuje komponenty, které by vám umožnily přeprogramovat FPGA na užitečnější konfiguraci. Někteří vědci se snaží vybudovat hybridní moduly FPGA-CPU, kde je část CPU, kterou lze přepojit / přeprogramovat jako FPGA, což vám umožní „nahrát“ efektivní část CPU, ale žádný z nich někdy jsem se dostal na trh (pokud vím).

Komentáře

  • Příklad reverzních bitů (a všech ostatních bitů swap / selection tasks) it doesn ‚ t really take 1 clock cycle, it takes 0. In your example, it takes 1 clock cycle to store data in a latch , což není stejná operace. Trvá 1 hodinový cyklus bez ohledu na to, zda obrátíte bity nebo ne. Operace obrácení bitů je 0 hodinových cyklů; žádná režie, jen jiné směrování. Rozdíl není jen sémantika, zvláště když začínáte přidávat věci. Například, jak dlouho trvá posunutí 32bitového slova o 3 bity, pak zaměnit každý další okusovat a potom jej obrátit?
  • “ hybridní FPGA-CP U modul “ – tyto jsou na trhu již dlouho (viz xilinx.com/products/silicon-devices/ soc / zynq-7000 / index.htm pro moderní úspěšný), ale i bez speciální podpory se kombinace softwaru & HDL běžně provádí implementací měkkého CPU uvnitř FPGA na struktuře.
  • @wjl Máte ‚ pravdu, že k provedení samotné operace není technicky zapotřebí žádný cyklus. Tvrdil bych, že váš příklad je pouze sémanticky odlišný, hlavně proto, že provádění těchto tří operací se logicky promítne do pevného bitového vzoru (tj. Začínám b1b2b3b4 a končím b3b1b4b2). To byl druh mé myšlenky v celé odpovědi. Snažil jsem se poukázat na to, že popis operace jako série kroků je často nezbytný pouze v případě, že máte pevné uspořádání instrukční sady / brány.
  • @wjl: Způsob, jakým se David-gardner zeptal, on Zdá se, že říká “ CPU “ ekvivalentní procesoru Intel nebo AMD x86 / x86_64 s vysoce taktovaným, pipeline a optimalizovaným CPU. Existuje mnoho měkkých “ procesorů „, ale ani jeden z těch, které jsou určeny pro FPGA, nelze taktovat jako i7, ani jsou téměř stejně optimalizované nebo schopné. Pokud jde o hybridy, měl jsem na mysli něco takového: newsroom.intel.com/docs/DOC-1512 , který zjevně existuje
  • Zynq opravdu není ‚ příliš špatný na procesor (ARM Cortex-A9 – totéž, co provozuje tablety atd.), Ale souhlasím, že by bylo mnohem úžasnější mít integrované FPGA s vysokou rychlostí x86_64. =)

Odpověď

Všechny ostatní zde popsané populární odpovědi hovoří o doslovných rozdílech mezi FPGA a CPU. Poukazují na paralelní povahu FPGA vs sekvenční povahu CPU, nebo uvádějí příklady, proč by některé algoritmy mohly dobře fungovat na FPGA. To vše je dobré a pravdivé, ale navrhoval bych však, že mezi CPU a FPGA existuje zásadnější rozdíl.

Jaký je společný jmenovatel mezi FPGA a CPU? Je to tak, že jsou oba postaveny na křemíku. A v některých případech doslova stejné křemíkové procesy.

Zásadním rozdílem jsou abstrakce, které se hromadí nad tímto křemíkem. Není možné, aby jeden člověk porozuměl úplným detailům jediného moderního designu CPU od křemíku po zabalený IC. Takže jako součást inženýrského procesu rozdělujeme tento složitý problém na menší zvládnutelné problémy, které si lidé mohou omotat hlavou.

Zvažte, co je potřeba k tomu, aby se tento křemík stal fungujícím CPU. Zde je poněkud zjednodušený pohled na vrstvy abstrakce nezbytné pro tento cíl:

  1. Nejprve máme inženýry, kteří vědí, jak vytvořit tranzistory ze křemíku. Vědí, jak navrhnout malé tranzistory, které usrkávají energii a přepínají rychlostí 10 nebo dokonce 100 gigahertzů, a vědí, jak navrhnout mohutné tranzistory, které mohou řídit signály s dostatečným výkonem, aby je mohly poslat z balíčku IC a přes desku plošných spojů na jiný čip.

  2. Pak máme návrháře digitální logiky, kteří vědí, jak tyto tranzistory spojit do knihoven se stovkami různých logických buněk. Logické brány, žabky, muxy a doplňky, abychom jmenovali alespoň některé. Vše v různých konfiguracích.

  3. Dále máme různé skupiny techniků, kteří vědí, jak tyto digitální (a někdy analogové) bloky spojit a vytvořit funkční bloky na vyšší úrovni, jako jsou vysokorychlostní vysílače a přijímače, řadiče paměti, prediktory větví, ALU atd.

  4. Pak máme designéry CPU, abychom mohli navrhnout špičkové návrhy CPU spojením těchto funkčních jednotek do kompletního systému.

A tím to nekončí. V tomto okamžiku máme funkční CPU, které spouští kód sestavy, ale to není jazyk, do kterého většina programátorů dnes píše.

  1. K tomuto kompilaci k sestavení můžeme mít kompilátor C. kód (pravděpodobně prostřednictvím nějaké mezilehlé reprezentace)
  2. Mohli bychom přidat další abstrakci nad C, abychom získali objektově orientovaný jazyk
  3. Mohli bychom dokonce napsat virtuální stroj nad C nebo C ++ abychom mohli interpretovat věci jako bajtový kód Java.

Odtud mohou pokračovat vrstvy abstrakce. Důležitým bodem zde je, že tyto abstrakční vrstvy se spojí, čímž se získá systém založený na CPU, který se masivně rozšiřuje a stojí malý zlomek vlastního silikonového designu.

NUTNĚ však je třeba zdůraznit, že každá abstrakce také nese náklady samotné. Návrhář tranzistorů nevytváří dokonalý tranzistor pro každý případ použití. Postaví rozumnou knihovnu, a tak se někdy použije tranzistor, který spotřebovává trochu více energie nebo trochu více křemíku, než kolik je pro danou práci skutečně zapotřebí. A podobně logičtí designéři nevytvářejí všechny možné logické buňky. Mohou postavit bránu NAND se 4 vstupy a bránu NAND se 8 vstupy, ale co se stane, když jiný inženýr potřebuje 6 vstupů NAND? Používá bránu NAND s 8 vstupy a spojuje 2 nepoužité vstupy, což má za následek ztrátu zdrojů křemíku a sílu v pase. A tak jde nahoru po řetězci abstrakcí. Každá vrstva nám dává způsob, jak zvládnout složitost, ale zároveň nám účtuje další přírůstkové náklady, pokud jde o křemík a energii.

Nyní porovnejte tyto abstrakce s tím, co je potřebné pro FPGA. V zásadě se abstrakce FPGA zastaví na # 2 v seznamu výše. FPGA umožňuje vývojářům pracovat na digitální logické vrstvě. Je to poněkud sofistikovanější, protože CPU jsou v této vrstvě „pevně zakódovány“ a FPGA musí být nakonfigurovány za běhu (což je BTW, proto CPU obvykle běží na mnohem vyšších frekvencích), ale zásadní důležitou pravdou je, že to je daleko několik abstrakcí pro FPGA než pro CPU.

Takže Proč může být FPGA rychlejší než CPU? V podstatě je to proto, FPGA používá mnohem méně abstrakcí než CPU, což znamená, že návrhář pracuje blíže křemíku. Neplatí náklady na mnoho abstrakčních vrstev, které jsou pro CPU vyžadovány. Kóduje na nižší úrovni a musí usilovněji pracovat, aby dosáhl dané funkčnosti, ale za odměnu dostane vyšší výkon.

Ale samozřejmě existuje dolní strana pro méně abstrakcí. Všechny ty abstrakce CPU jsou tam z dobrého důvodu. Dávají nám mnohem jednodušší paradigma kódování, což znamená, že se pro ně může snadno vyvinout více lidí. To zase znamená, že existuje mnohem více návrhů CPU, a proto máme od CPU obrovské výhody v poměru cena / měřítko / doba do uvedení na trh.

Takže to tady máte. FPGA mají méně abstrakcí, a proto mohou být rychlejší a energeticky účinnější, ale obtížně programovatelné. CPU mají mnoho designů abstrakcí, které usnadňují jejich vývoj, jsou škálovatelné a levné. Ale kvůli těmto výhodám se vzdávají rychlosti a síly v obchodu.

Komentáře

  • Také FPGA ‚ jsou navrženy pomocí jednoduchých opakujících se bloků, které mají provádět jednoduché logické úkoly. Jsou šité na míru pro určité typy úkolů.CPU ‚ s, OTOH, mají mnoho složitých funkčních částí, které dělají různé věci. Dalo by se uvažovat o tom, že CPU je skupina mnoha různých zařízení podobných FPGA (koneckonců, ‚ všechno je to jen křemík, elektronika a matematika). ‚ tedy nejde jen o abstrakce, ale ‚ o složitost. CPU ‚ s jsou složitá zařízení složená z mnoha různých typů elektrických zařízení, zatímco FPGA se skládá z několika. CPU je brokovnice, zatímco FPGA je puška.

Odpověď

Zatímco ostatní odpovědi jsou správné , žádný z nich zatím neřeší příklad těžby bitcoinů z vaší otázky, což je opravdu slušný příklad. Těžba bitcoinů zahrnuje opakovaný výpočet kryptografické hashovací funkce, SHA-256 výsledku jiného výpočtu SHA-256, dat, kde se mění pouze jedno 32bitové celé číslo, dokud výsledný hash nebude mít určité vlastnosti. Každý SHA-256 se skládá ze 64 opakování stejného algoritmu zahrnujících 32bitové sčítání, bitové posuny a některé další operace s manipulací bitů.

Pokud naprogramujete tuto smyčku na 32bitový (nebo více) procesor , najdete jeho instrukční sadu velmi vhodnou pro tento úkol — SHA-256 byl navržen tak, aby fungoval efektivně na CPU. Stále budete používat pouze možná 2% křemíkové oblasti moderní CPU s funkcemi náročnými na oblast, jako je ukládání do mezipaměti, násobení, dělení, operace s plovoucí desetinnou čárkou, predikce větvení a brach, atd., Buď vůbec nepoužívané, nebo neschopné poskytují významné zvýšení výkonu pro tento konkrétní úkol.

V konfigurovatelném hardwaru, jako je FPGA, jednoduše implementujete pouze tato 2% a dále optimalizujete zapomenutím všeho na provádění kódu, místo toho navrhujete brány pro přímý výpočet každého z nich ty často opakované dílčí funkce. Pipeline, takže každý z nich předá výsledek do každého dalšího hodinového cyklu, a opakuje se 128krát (a se speciální speciální logikou, kde každý SHA-256 začíná a končí), dostanete výsledek každý taktovací cyklus (u 100% hašování za sekundu na FPGA inzerovaných s podporou 300 MHz při jednodušší logice), zatímco na moderním CPU byste mohli očekávat jeden výsledek každých několik tisíc hodinových cyklů na jádro, řekněme 10 milionů hašů za sekundu ond na vícejádrovém vícejádrovém CPU.

Pokud vás tento konkrétní příklad zajímá, možná se budete chtít podívat na mé související odpovězte o vnitřních podmínkách těžařů ASIC na bitcoin.stackexchange, protože mnoho těžařů FPGA pracuje stejným způsobem a používá konfigurovatelný hardware spíše než hardware na zakázku. Jen pro úplnost: „Existují i další možnosti, například omezení nebo vyloučení pipeline, které jsem popsal, ve prospěch triviálnější paralelizace pomocí několika nezávislých hash SHA-256. Hloubka omezení daných vnitřními stránkami vašeho FPGA a jeho celkovou velikostí , který může dokonce poskytnout lepší výkon, i když by to bylo méně efektivní, pokud jde o počet bran a směrování režie, pokud byste měli dokonalou svobodu při navrhování celého čipu, nejen konfigurace FPGA.

Komentáře

  • To je ‚ velmi dobrá poznámka o využití křemíku.
  • Ale možná (neúmyslně!) zavádějící, vzhledem k tomu, že FPGA se skládá z poněkud složitých buněk s mnoha fyzickými hradly, z nichž typická aplikace opět používá pouze zlomek, což umožňuje jejich výrobcům inzerovat ekvivalentní počty bran ve snaze říct vám, jak moc to všechno může být v “ typický “ aplikace …

Odpověď

Výše uvedené odpovědi, i když jsou správné, postrádají smysl o proč jsou FPGA (a vlastní ASIC) zvláště dobré pro výpočty bitcoinů.

Skutečnou výhodou je, že velká část výpočtů SHA-256 jsou logické operace (například bitové posuny), které lze provádět v elektrické vedení. Pokud to uděláte tímto způsobem, vyžadují 0 hodinových cyklů.

Další důležitou výhodou je, že FPGA jsou mnohem energeticky účinnější (tj. MIPS na Watt) než CPU, takže množství energie potřebné pro výpočty je mnohem větší méně. To je důležité, protože náklady na těžbu bitcoinů závisí na tom, kolik elektřiny k jeho výrobě použijete.

Čipy ASIC jsou energeticky efektivnější než FPGA, takže mohou stejný kód provádět mnohem levněji. Můžete také nacpat více popravních jednotek na palubu, aby byly rychlejší. Nevýhodou je, že náklady na výrobu vlastního ASIC jsou velmi vysoké, takže k pokrytí výrobních nákladů budete muset prodat několik čipů.

GPU se také používají k výrobě bitcoinů, ale protože jsou mnohem méně energeticky efektivní, ztrácejí pevnou pozici vůči FPGA a vlastním ASIC.

Komentáře

  • Pokud se podíváte na hashovací algoritmus Monero aka cryptonight, uvidíte, že implementace FPGA je téměř nemožná kvůli vysokému množství do paměti bylo třeba přistupovat náhodně (2 MB). CPU má v tomto případě tu výhodu.
  • @ lucas92 nemůžete integrovat RAM do FPGA, aby se přizpůsobilo množství potřebné paměti?
  • Pravděpodobně jste vyhráli ‚ nemá pro to dostatek logických prvků v FPGA.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *