Grafiikkasuorittimen optimointi - totuus. Laskenta GPU:lla Esimerkki teknologiasovelluksesta

26.02.2022

Kun puhutaan GPU:iden rinnakkaislaskennasta, meidän on muistettava, mitä aikaa elämme, tänään on aikaa, jolloin kaikki maailmassa kiihtyy niin paljon, että sinä ja minä menetämme ajantajun, huomaamatta kuinka se rientää ohi. Kaikki mitä teemme liittyy suureen tietojenkäsittelyn tarkkuuteen ja nopeuteen, tällaisissa olosuhteissa tarvitsemme varmasti työkaluja kaiken tiedon käsittelemiseksi ja muuttamiseksi tiedoiksi, lisäksi kun puhumme tällaisista tehtävistä, meidän on muistettava, että nämä tehtävät ovat välttämättömiä ei vain suurille organisaatioille tai megayrityksille, vaan myös tavallisille käyttäjille, jotka ratkaisevat korkeaan teknologiaan liittyvät elämänongelmansa kotona henkilökohtaisissa tietokoneissa! NVIDIA CUDA:n ilmestyminen ei ollut yllättävää, vaan pikemminkin perusteltua, sillä pian joudutaan käsittelemään PC:llä huomattavasti aiempaa enemmän aikaa vieviä tehtäviä. Aikaisemmin paljon aikaa vaatineet työt vievät nyt muutaman minuutin, ja vastaavasti tämä vaikuttaa koko maailman kokonaiskuvaan!

Mitä on GPU-laskenta?

GPU-laskenta on GPU:n käyttöä teknisten, tieteellisten ja jokapäiväisten tehtävien laskemiseen. GPU-laskentaan liittyy CPU:n ja GPU:n käyttö heterogeenisen näytteenoton välillä, eli: ohjelmien peräkkäinen osa siirtyy CPU:lle, kun taas aikaa vievät laskentatehtävät jätetään GPU:lle. Tämän ansiosta tapahtuu tehtävien rinnakkaisua, mikä nopeuttaa tiedonkäsittelyä ja lyhentää työn suoritusaikaa, jolloin järjestelmästä tulee entistä tuottavampi ja se pystyy käsittelemään samanaikaisesti suuremman määrän tehtäviä. Tällaisen menestyksen saavuttamiseksi pelkkä laitteistotuki ei kuitenkaan tässä tapauksessa riitä, tarvitaan myös ohjelmistotuki, jotta sovellus pystyy siirtämään eniten aikaa vievät laskelmat GPU:lle.

Mikä on CUDA

CUDA on teknologia, jolla ohjelmoidaan algoritmeja yksinkertaistetulla C-kielellä, jotka suoritetaan kahdeksannen sukupolven ja vanhempien GeForce-kiihdyttimien grafiikkaprosessoreilla sekä vastaavilla NVIDIA:n Quadro- ja Tesla-korteilla. CUDA mahdollistaa erikoisfunktioiden sisällyttämisen C-ohjelman tekstiin. Nämä toiminnot on kirjoitettu yksinkertaistetulla C-ohjelmointikielellä ja suoritetaan GPU:lla. CUDA SDK:n alkuperäinen versio esiteltiin 15. helmikuuta 2007. Jotta koodi voidaan kääntää tällä kielellä onnistuneesti, CUDA SDK sisältää NVIDIAn oman nvcc-komentorivin C-kääntäjän. Nvcc-kääntäjä perustuu avoimeen Open64-kääntäjään ja se on suunniteltu kääntämään isäntäkoodi (pää, ohjauskoodi) ja laitekoodi (laitteistokoodi) (tiedostot, joiden pääte on .cu) objektitiedostoiksi, jotka soveltuvat lopullisen ohjelman tai kirjaston kokoamiseen. mikä tahansa ohjelmointiympäristö, kuten Microsoft Visual Studio.

Tekniset ominaisuudet

  1. Standardi C-kieli GPU:iden rinnakkaissovelluskehitykseen.
  2. Valmiit numeeriset analyysikirjastot nopeaan Fourier-muunnokseen ja lineaarisen algebran perusohjelmistopakettiin.
  3. Erityinen CUDA-ohjain tietojenkäsittelyyn nopealla tiedonsiirrolla GPU:n ja CPU:n välillä.
  4. Kyky liittää CUDA-ohjain OpenGL- ja DirectX-näytönohjaimien kanssa.
  5. Tuki Linux 32/64-bit, Windows XP 32/64- ja MacOS käyttöjärjestelmille.

Tekniikan edut

  1. CUDA-sovellusliittymä (CUDA API) perustuu standardi C-ohjelmointikieleen tietyin rajoituksin. Tämä yksinkertaistaa ja tasoittaa CUDA-arkkitehtuurin oppimisprosessia.
  2. Säikeiden välistä 16 kt:n jaettua muistia voidaan käyttää käyttäjän järjestämään välimuistiin, jonka kaistanleveys on suurempi kuin tavallisista tekstuurista haettaessa.
  3. Tehokkaammat tapahtumat suorittimen muistin ja videomuistin välillä.
  4. Täysi laitteistotuki kokonaisluku- ja bittikohtaisille operaatioille.

Esimerkki tekniikan sovelluksesta

cRark

Tämän ohjelman aikaa vievin osa on tinktuura. Ohjelmassa on konsolikäyttöliittymä, mutta ohjelman mukana tulleiden ohjeiden ansiosta voit käyttää sitä. Seuraava on lyhyet ohjeet ohjelman asettamista varten. Testaamme ohjelman toimivuuden ja vertaamme sitä toiseen vastaavaan ohjelmaan, joka ei käytä NVIDIA CUDA:ta, tässä tapauksessa tunnettuun ohjelmaan “Advanced Archive Password Recovery”.

Ladatusta cRark-arkistosta tarvitsemme vain kolme tiedostoa: crark.exe, crark-hp.exe ja password.def. Crerk.exe on konsolin ruumiinavausapuohjelma RAR-salasanat 3.0 ilman salattuja tiedostoja arkiston sisällä (eli arkiston avaamisen yhteydessä näemme nimet, mutta emme voi purkaa arkistoa ilman salasanaa).

Crerk-hp.exe on konsoliapuohjelma RAR 3.0 -salasanojen avaamiseen koko arkiston salauksella (eli arkiston avaamisen yhteydessä emme näe nimeä tai itse arkistoja emmekä voi purkaa arkistoa ilman salasanaa).

Password.def on mikä tahansa uudelleennimetty tekstitiedosto, jossa on hyvin vähän sisältöä (esimerkiksi: 1. rivi: ## 2. rivi: ?* , tässä tapauksessa salasana murretaan käyttämällä kaikkia merkkejä). Password.def on cRark-ohjelman johtaja. Tiedosto sisältää säännöt salasanan murtamiseen (tai merkkialueen, jota crark.exe käyttää työssään). Tarkemmat tiedot näiden merkkien valintamahdollisuuksista kirjoitetaan tekstitiedostoon, joka saadaan avattaessa cRark-ohjelman tekijän verkkosivustolta ladattu tiedosto: russian.def.

Valmistautuminen

Sanon heti, että ohjelma toimii vain, jos näytönohjain perustuu GPU:hun, joka tukee CUDA 1.1 -kiihtystasoa. Joten sarjaa G80-siruun perustuvia näytönohjaimia, kuten GeForce 8800 GTX, ei enää tarvita, koska niillä on laitteistotuki CUDA 1.0 -kiihdytykseen. Ohjelma valitsee vain salasanat RAR-arkistojen versioille 3.0+ käyttäen CUDAa. Kaikki on asennettava ohjelmisto liittyvät CUDAan, nimittäin:

Luomme minkä tahansa kansion mihin tahansa paikkaan (esimerkiksi C:-asemaan) ja kutsumme sitä millä tahansa nimellä, esimerkiksi "3.2". Sijoitamme tiedostot sinne: crark.exe, crark-hp.exe ja password.def sekä salasanalla suojattu/salattu RAR-arkisto.

Seuraavaksi sinun tulee käynnistää Windowsin komentorivikonsoli ja siirtyä luotuun kansioon. Windows Vistassa ja 7:ssä sinun tulee kutsua "Käynnistä"-valikko ja kirjoittaa "cmd.exe" hakukenttään Windows XP:ssä, "Käynnistä"-valikosta sinun tulee ensin kutsua "Suorita"-valintaikkuna ja kirjoittaa "cmd .exe” siinä. Kun olet avannut konsolin, anna komento, kuten: cd C:\folder\, cd C:\3.2 tässä tapauksessa.

Rekrytointi klo tekstieditori kaksi riviä (voit myös tallentaa tekstin .bat-tiedostona kansioon cRarkin avulla) arvataksesi salasanalla suojatun RAR-arkiston, jossa on salaamattomia tiedostoja:

kaiku pois;
cmd /K crark (arkiston nimi).rar

salasanalla suojatun ja salatun RAR-arkiston salasanan arvaaminen:

kaiku pois;
cmd /K crark-hp (arkiston nimi).rar

Kopioi 2 riviä tekstitiedostosta konsoliin ja paina Enter (tai suorita .bat-tiedosto).

tuloksia

Salauksen purkuprosessi on esitetty kuvassa:

Arvausnopeus cRarkilla CUDA:lla oli 1625 salasanaa sekunnissa. Minuutissa 36 sekunnissa valittiin 3-merkkinen salasana: "q)$." Vertailun vuoksi: hakunopeus Advanced Archive Password Recovery -sovelluksessa kaksiytimessäni Athlon prosessori 3000+ vastaa enintään 50 salasanaa sekunnissa ja haun tulisi kestää 5 tuntia. Toisin sanoen RAR-arkiston bruteforce-valinta cRarkissa GeForce 9800 GTX+ -näytönohjaimella on 30 kertaa nopeampi kuin suorittimella.

Niille, joilla on Intel prosessori, hyvä emolevy korkealla järjestelmäväylätaajuudella (FSB 1600 MHz), suorittimen nopeus ja hakunopeus ovat korkeammat. Ja jos sinulla on neliytiminen prosessori ja pari GeForce 280 GTX -tason näytönohjainta, raakojen salasanojen nopeus nopeutuu huomattavasti. Yhteenvetona esimerkistä on sanottava, että tämä ongelma ratkaistiin CUDA-tekniikalla vain 2 minuutissa 5 tunnin sijaan, mikä osoittaa tämän tekniikan suuren potentiaalin!

johtopäätöksiä

Tutkittuamme CUDA:n rinnakkaislaskennan teknologiaa tänään, näimme selvästi kaiken tehon ja valtavan potentiaalin tämän tekniikan kehittämiseen käyttämällä esimerkkiä salasanan palautusohjelmasta. RAR-arkistot. Tämän tekniikan näkymistä on sanottava, että tämä tekniikka löytää varmasti paikkansa jokaisen sitä käyttää päättävän ihmisen elämässä, olipa kyseessä sitten tieteelliset tehtävät tai videonkäsittelyyn liittyvät tehtävät tai jopa nopeaa, Tarkat laskelmat, kaikki tämä johtaa väistämättömään työn tuottavuuden kasvuun, jota ei voida sivuuttaa. Tänään ilmaus "koti supertietokone" alkaa jo tulla sanakirjaan; On täysin selvää, että jokaisessa kodissa on jo CUDA-niminen työkalu tällaisen esineen toteuttamiseksi. G80-siruun perustuvien korttien julkaisun jälkeen (2006) on julkaistu valtava määrä NVIDIA-pohjaisia ​​kiihdyttimiä, jotka tukevat CUDA-tekniikkaa, joka voi toteuttaa unelmia supertietokoneista jokaisessa kodissa. Edistämällä CUDA-teknologiaa NVIDIA nostaa auktoriteettiaan asiakkaiden silmissä tarjoamalla lisäominaisuuksia heidän laitteilleen, joita monet ovat jo ostaneet. Voimme vain uskoa, että CUDA kehittyy pian hyvin nopeasti ja antaa käyttäjille mahdollisuuden hyödyntää kaikkia GPU:iden rinnakkaislaskennan ominaisuuksia.

AMD/ATI Radeon -arkkitehtuurin ominaisuudet

Tämä on samanlaista kuin uusien biologisten lajien synty, kun elinympäristöjen kehittymisen aikana elävät olennot kehittyvät parantamaan sopeutumiskykyään ympäristöön. Samoin GPU, alkaen kolmioiden rasteroinnin ja teksturoinnin nopeuttamisesta, kehitti lisäominaisuuksia varjostusohjelmien suorittamiseen samojen kolmioiden värittämiseksi. Ja näille kyvyille on kysyntää myös ei-graafisessa laskennassa, jossa joissakin tapauksissa ne tarjoavat merkittäviä suorituskyvyn lisäyksiä perinteisiin ratkaisuihin verrattuna.

Tehdään lisää analogioita - pitkän maalla tapahtuneen evoluution jälkeen nisäkkäät tunkeutuivat mereen, missä ne syrjäyttivät tavalliset meren asukkaat. Kilpailussa nisäkkäät käyttivät sekä uusia kehittyneitä kykyjä, jotka ilmestyivät maan pinnalle, että niitä, jotka hankittiin erityisesti sopeutumaan elämään vedessä. Samalla tavalla GPU:t, jotka perustuvat 3D-grafiikkaarkkitehtuurin etuihin, varustetaan yhä enemmän erityisillä toiminnallisuutta, hyödyllinen suoritettaessa tehtäviä, jotka ovat kaukana grafiikasta.

Joten mikä sallii GPU:iden vaatia oman sektorinsa yleiskäyttöisessä ohjelmistotilassa? GPU-mikroarkkitehtuuri on rakennettu täysin eri tavalla kuin perinteisten prosessorien, ja se sisältää luonnostaan ​​tiettyjä etuja. Grafiikkatehtävät vaativat itsenäistä rinnakkaiskäsittelyä, ja GPU on natiivisäikeinen. Mutta tämä rinnakkaisuus tuo hänelle vain iloa. Mikroarkkitehtuuri on suunniteltu hyödyntämään olemassa olevaa suuri määrä säikeet, jotka vaativat suorituksen.

GPU koostuu useista kymmenistä (30 Nvidia GT200, 20 Evergreen, 16 Fermi) prosessoriytimistä, joita kutsutaan Nvidian terminologiassa Streaming Multiprocessoriksi ja SIMD Engineksi ATI-terminologiassa. Tätä artikkelia varten kutsumme niitä miniprosessoreiksi, koska ne suorittavat useita satoja ohjelmasäikeitä ja voivat tehdä melkein kaiken, mitä tavallinen prosessori pystyy, mutta eivät silti kaikkea.

Markkinointinimet ovat hämmentäviä - suuremman merkityksen vuoksi ne osoittavat toiminnallisten moduulien lukumäärän, jotka voivat vähentää ja kertoa: esimerkiksi 320 vektori "ydintä". Nämä ytimet ovat enemmän kuin jyviä. On parempi ajatella, että GPU on eräänlainen moniytiminen prosessori, jossa on suuri määrä ytimiä, jotka suorittavat useita säikeitä samanaikaisesti.

Jokaisessa miniprosessorissa on paikallinen muisti, 16 kt GT200:lle, 32 kt Evergreenille ja 64 kt Fermille (lähinnä ohjelmoitava L1-välimuisti). Sen käyttöaika on samanlainen kuin tavanomaisen prosessorin ensimmäisen tason välimuisti, ja se suorittaa samanlaisia ​​​​toimintoja tietojen nopeimman toimittamiseksi toiminnallisiin moduuleihin. Fermi-arkkitehtuurissa osa paikallisesta muistista voidaan konfiguroida tavalliseksi välimuistiksi. GPU:ssa paikallista muistia käytetään nopeaan tiedonvaihtoon suorittavien säikeiden välillä. Yksi GPU-ohjelman tavanomaisista kaavoista on seuraava: ensin data GPU:n globaalista muistista ladataan paikalliseen muistiin. Tämä on vain tavallinen videomuisti, joka sijaitsee (kuten järjestelmämuisti) erillään "sen" prosessorista - videon tapauksessa se juotetaan useilla siruilla näytönohjaimen piirilevyllä. Seuraavaksi useat sadat säikeet työskentelevät näiden tietojen kanssa paikallisessa muistissa ja kirjoittavat tuloksen globaaliin muistiin, jonka jälkeen se siirretään CPU:lle. Ohjelmoijan vastuulla on kirjoittaa ohjeet tietojen lataamiseksi ja purkamiseksi paikallisesta muistista. Pohjimmiltaan se osittaa [tietyn tehtävän] tiedot rinnakkaiskäsittelyä varten. GPU tukee myös atomisia kirjoitus-/lukuohjeita muistiin, mutta ne ovat tehottomia ja niitä tarvitaan yleensä loppuvaiheessa kaikkien miniprosessorien laskentatulosten "liimamiseen".

Paikallinen muisti on yhteinen kaikille miniprosessorissa suoritettaville säikeille, joten esimerkiksi Nvidian terminologiassa sitä kutsutaan jopa jaetuksi, ja termi paikallinen muisti tarkoittaa täsmälleen päinvastaista, nimittäin: erillisen säikeen tiettyä henkilökohtaista aluetta. globaalissa muistissa, näkyvä ja saatavilla vain sille. Mutta paikallisen muistin lisäksi miniprosessorissa on toinen muistialue, joka kaikissa arkkitehtuureissa on tilavuudeltaan noin neljä kertaa suurempi. Se on jaettu tasaisesti kaikkien suoritussäikeiden kesken. Nämä ovat rekistereitä muuttujien ja välilaskennan tulosten tallentamista varten. Jokaisessa säikeessä on useita kymmeniä rekistereitä. Tarkka määrä riippuu siitä, kuinka monta säiettä miniprosessori on käynnissä. Tämä luku on erittäin tärkeä, koska globaalin muistin latenssi on erittäin korkea, satoja syklejä, ja välimuistien puuttuessa ei ole minnekään tallentaa välilaskennan tuloksia.

Ja vielä yksi tärkeä GPU:n ominaisuus: "pehmeä" vektorointi. Jokaisessa miniprosessorissa on suuri määrä laskentamoduuleja (8 GT200:lle, 16 Radeonille ja 32 Fermille), mutta ne kaikki voivat suorittaa vain saman käskyn samalla ohjelmaosoitteella. Tässä tapauksessa operandit voivat olla erilaisia, eri säikeillä on omat. Esimerkiksi ohjeet lisää kahden rekisterin sisältö: kaikki tietokonelaitteet suorittavat sen samanaikaisesti, mutta rekisterit ovat erilaisia. Oletetaan, että kaikki GPU-ohjelman säikeet, jotka suorittavat rinnakkaista tietojenkäsittelyä, liikkuvat yleensä rinnakkain ohjelmakoodin läpi. Siten kaikki laskentamoduulit latautuvat tasaisesti. Ja jos säikeet eroavat koodin suorituspolussaan ohjelman haarojen vuoksi, tapahtuu niin sanottu serialisointi. Tällöin kaikkia laskentamoduuleja ei käytetä, koska säikeet lähettävät erilaisia ​​​​käskyjä suoritettaviksi ja laskentamoduulien lohko voi suorittaa, kuten olemme jo todenneet, vain käskyn yhdellä osoitteella. Ja tietysti tuottavuus laskee suhteessa maksimiin.

Etuna on, että vektorointi on täysin automaattista, se ei ole ohjelmointia SSE:llä, MMX:llä jne. Ja GPU itse hoitaa erot. Teoreettisesti voit yleensä kirjoittaa ohjelmia GPU: lle ajattelematta suoritusmoduulien vektoriluonnetta, mutta tällaisen ohjelman nopeus ei ole kovin suuri. Huono puoli on vektorin suuri leveys. Se on suurempi kuin toiminnallisten moduulien nimellismäärä, ja se on 32 Nvidia-grafiikkasuorittimissa ja 64 Radeonissa. Langat käsitellään sopivan kokoisina lohkoina. Nvidia kutsuu tätä lankalohkoa termiksi warp, AMD kutsuu sitä aaltorintamaksi, mikä on sama asia. Siten 16 tietokonelaitteessa "aaltorintamaa", jonka pituus on 64 säiettä, käsitellään neljällä kellojaksolla (olettaen tavanomaisen käskyn pituuden). Kirjoittaja pitää tässä tapauksessa parempana termiä loimi, koska se liittyy merenkulun termiin loimi, joka tarkoittaa kierretyistä köysistä yhteen sidottua köyttä. Joten langat "kiertyvät" ja muodostavat kiinteän nipun. Mereen voidaan kuitenkin liittää myös "aaltorinta": ohjeet saapuvat toimilaitteille samalla tavalla kuin aallot vierivät rantaan peräkkäin.

Jos kaikki säikeet ovat yhtä edistyneitä ohjelman suorittamisessa (sijaitsevat samassa paikassa) ja suorittavat siten samaa käskyä, niin kaikki on kunnossa, mutta jos ei, tapahtuu hidastumista. Tässä tapauksessa yhden loimen tai aaltorintaman säikeet sijaitsevat eri paikoissa ohjelmassa, ja ne on jaettu säikeisiin, joilla on sama käskynumero (toisin sanoen käskyosoitin). Ja vain yhden ryhmän säikeet suoritetaan edelleen kerralla - kaikki suorittavat saman käskyn, mutta eri operandeilla. Tämän seurauksena loimi kulkee niin monta kertaa hitaammin kuin ryhmiin se on jaettu, eikä ryhmän lankojen määrällä ole väliä. Vaikka ryhmä koostuisi vain yhdestä säikeestä, sen suorittaminen vie silti saman verran aikaa kuin koko loimi. Laitteistossa tämä toteutetaan peittämällä tietyt säikeet, eli käskyt suoritetaan muodollisesti, mutta niiden suorittamisen tuloksia ei tallenneta mihinkään eikä niitä käytetä jatkossa.

Vaikka jokainen miniprosessori (Streaming MultiProcessor tai SIMD Engine) suorittaa kulloinkin vain yhdelle loimelle (joukolle säikeille) kuuluvia käskyjä, sen suoritusvarastossa on useita kymmeniä aktiivisia loimija. Suoritettuaan yhden loimen käskyt, miniprosessori ei suorita seuraavaa käskyä tämän loimen säikeistä, vaan jonkin muun loimen käskyt. Tuo loimi voi olla aivan eri paikassa ohjelmassa, tämä ei vaikuta nopeuteen, koska vain loimen sisällä kaikkien säikeiden ohjeiden on oltava samat täydellä nopeudella suoritettaessa.

Tässä tapauksessa jokaisessa 20 SIMD-moottorissa on neljä aktiivista aaltorintamaa, joista jokaisessa on 64 kierrettä. Jokainen lanka on merkitty lyhyellä viivalla. Yhteensä: 64×4×20=5120 lankaa

Näin ollen, kun otetaan huomioon, että jokainen loimi- tai aaltorintama koostuu 32-64 säikeestä, miniprosessorissa on useita satoja aktiivisia säikeitä, jotka suoritetaan lähes samanaikaisesti. Alla näemme, mitä arkkitehtonisia etuja niin suuri määrä rinnakkaisia ​​säikeitä lupaa, mutta ensin pohditaan, mitä rajoituksia GPU:n muodostavilla miniprosessoreilla on.

Pääasia on, että GPU:ssa ei ole pinoa, johon toimintoparametreja ja paikallismuuttujia voitaisiin tallentaa. Lankojen suuren määrän vuoksi sirussa ei yksinkertaisesti ole tilaa pinolle. Itse asiassa, koska GPU suorittaa samanaikaisesti noin 10 000 säiettä ja yhden säikeen pinokoko 100 kt, kokonaismäärä on 1 Gt, mikä vastaa kaiken videomuistin vakiomäärää. Lisäksi itse GPU-ytimeen ei ole mahdollista sijoittaa merkittävän kokoista pinoa. Jos esimerkiksi laitat säikeeseen 1000 tavua pinoa, vain yksi miniprosessori vaatisi 1 Mt muistia, mikä on lähes viisi kertaa miniprosessorin paikallisen muistin ja rekisterien tallentamiseen varatun muistin yhteismäärä.

Siksi GPU-ohjelmassa ei ole rekursiota, eikä funktiokutsuilla ole paljon tehtävää. Kaikki toiminnot lisätään suoraan koodiin ohjelmaa käännettäessä. Tämä rajoittaa GPU-sovellusten laajuuden laskennallisiin tehtäviin. Joskus on mahdollista käyttää rajoitettua pinoemulointia käyttämällä globaalia muistia rekursioalgoritmeille, joiden iteraatiosyvyydet tunnetaan, mutta tämä ei ole tyypillinen GPU-sovellus. Tätä varten on tarpeen erityisesti kehittää algoritmi ja tutkia sen toteuttamismahdollisuuksia takaamatta onnistunutta kiihtyvyyttä suorittimeen verrattuna.

Fermi esitteli ensimmäistä kertaa mahdollisuuden käyttää virtuaalisia toimintoja, mutta taas niiden käyttöä rajoittaa suuren, nopean välimuistin puute jokaiselle säikeelle. 1536 säiettä muodostaa 48 kt tai 16 kt L1:stä, eli ohjelman virtuaalisia toimintoja voidaan käyttää suhteellisen harvoin, muuten pino käyttää myös hidasta globaalia muistia, mikä hidastaa suoritusta eikä todennäköisesti tuota etuja verrattuna CPU-versioon.

Näin ollen GPU esitetään tietojenkäsittelyn apuprosessorina, johon data ladataan, se käsitellään jollain algoritmilla ja tulos tuotetaan.

Arkkitehtuurin edut

Mutta se laskee GPU:n hyvin nopeasti. Ja sen korkea monisäikeisyys auttaa sitä tässä. Suuri määrä aktiivisia säikeitä mahdollistaa erikseen sijoitetun globaalin videomuistin korkean latenssin, joka on noin 500 kellojaksoa, osittain piilottamisen. Se on tasoitettu erityisen hyvin koodille, jossa on suuri aritmeettisten operaatioiden tiheys. Siten transistorin kallista L1-L2-L3 välimuistihierarkiaa ei tarvita. Sen sijaan sirulle voidaan sijoittaa useita laskentamoduuleja, jotka tarjoavat erinomaisen aritmeettisen suorituskyvyn. Kun yhden säikeen tai loimen käskyjä suoritetaan, loput sadat säikeet odottavat hiljaa tietojaan.

Fermi esitteli noin 1 Mt:n L2-välimuistin, mutta sitä ei voi verrata välimuistiin nykyaikaiset prosessorit, se on enemmän tarkoitettu ytimien väliseen viestintään ja erilaisiin ohjelmistotemppuihin. Jos sen koko jaetaan kaikkien kymmenien tuhansien säikeiden kesken, jokaisen tilavuus on hyvin vähäinen.

Mutta globaalin muistiviiveen lisäksi tietokonelaitteessa on paljon enemmän viiveitä, jotka on piilotettava. Tämä on sirulla olevan tiedonsiirron latenssi tietokonelaitteista ensimmäisen tason välimuistiin eli GPU:n paikalliseen muistiin ja rekistereihin sekä käskyvälimuistiin. Rekisteritiedosto sekä paikallinen muisti sijaitsevat erillään toiminnallisista moduuleista, ja niiden käyttönopeus on noin puolitoista tusinaa jaksoa. Ja jälleen, suuri määrä säikeitä, aktiivisia loimia, voi tehokkaasti piilottaa tämän latenssin. Lisäksi koko GPU:n paikallisen muistin kokonaiskäyttökaistanleveys (kaistanleveys) on sen muodostavien miniprosessorien lukumäärä huomioon ottaen huomattavasti suurempi kuin nykyaikaisten prosessorien ensimmäisen tason välimuistin pääsykaistanleveys. GPU pystyy käsittelemään huomattavasti enemmän dataa aikayksikköä kohden.

Voimme heti sanoa, että jos GPU:ssa ei ole suurta määrää rinnakkaisia ​​säikeitä, sen suorituskyky on lähes nolla, koska se toimii samaan tahtiin kuin täysin ladattuina ja tekee paljon vähemmän työtä. Antaa esimerkiksi olla vain yksi säikeen 10 000 sijasta: suorituskyky laskee noin tuhat kertaa, koska kaikkia lohkoja ei ladata, vaan se vaikuttaa myös kaikkiin latenssiin.

Latenssien piilottamisen ongelma on akuutti myös nykyaikaisissa korkeataajuisissa prosessoreissa. Tämä vaatii monimutkaisia ​​käskyn ajastimia, erilaisia ​​puskureita jne., jotka vievät tilaa sirulla. Tämä kaikki on tarpeen parhaan yksisäikeisen suorituskyvyn saavuttamiseksi.

Mutta kaikkea tätä ei tarvita GPU:lle, se on arkkitehtonisesti nopeampi laskentatehtävissä, joissa on suuri määrä säikeitä. Mutta se muuttaa monisäikeisyyden esitykseksi, kuten viisasten kivi muuttaa lyijyn kullaksi.

Grafiikkasuoritin suunniteltiin alun perin varjostusohjelmien optimaaliseen suorittamiseen kolmiopikseleille, jotka ovat ilmeisen riippumattomia ja joita voidaan suorittaa rinnakkain. Ja tästä tilasta se on kehittynyt lisäämällä erilaisia ​​ominaisuuksia (paikallinen muisti ja osoitteellinen pääsy videomuistiin sekä monimutkainen käskysarja) erittäin tehokkaaksi tietokonelaitteeksi, jota voidaan edelleen käyttää tehokkaasti vain algoritmeihin, jotka mahdollistavat erittäin rinnakkaisen toteutuksen. käyttämällä rajoitettua määrää paikallista muistia.

Esimerkki

Yksi klassisimmista GPU:n ongelmista on N kappaleen vuorovaikutuksen laskeminen gravitaatiokentässä. Mutta jos meidän on esimerkiksi laskettava Maa-Kuu-Aurinko-järjestelmän kehitys, niin GPU on meille huono apu: esineitä on vähän. Jokaiselle objektille on tarpeen laskea vuorovaikutukset kaikkien muiden objektien kanssa, ja niitä on vain kaksi. Aurinkokunnan liikkeessä kaikki planeetat ja niiden kuut (noin parisataa kohdetta) GPU ei ole vieläkään kovin tehokas. Säikeenhallinnan suuren ylikuorman vuoksi moniytiminen prosessori ei kuitenkaan pysty näyttämään kaikkea tehoaan ja toimii yksisäikeisessä tilassa. Mutta jos sinun on myös laskettava komeettojen ja asteroidivyöhykeobjektien liikeradat, niin tämä on jo GPU: n tehtävä, koska objekteja on tarpeeksi luomaan tarvittava määrä rinnakkaisia ​​laskentalankoja.

GPU toimii myös hyvin, jos sinun on laskettava satojen tuhansien tähtien pallomaisten ryhmien törmäys.

Toinen mahdollisuus käyttää GPU-tehoa N-rungon ongelmassa syntyy, kun sinun on laskettava useita yksittäisiä ongelmia, vaikkakin pienellä määrällä runkoja. Esimerkiksi, jos sinun on laskettava vaihtoehtoja yhden järjestelmän kehitykselle eri vaihtoehdoille alkunopeuksille. Sitten voit käyttää GPU:ta tehokkaasti ilman ongelmia.

Yksityiskohdat AMD Radeonin mikroarkkitehtuurista

Tarkastelimme GPU-organisaation perusperiaatteita, jotka ovat yhteisiä kaikkien valmistajien videokiihdyttimille, koska niillä oli aluksi yksi kohdetehtävä - Shader-ohjelmat. Valmistajat ovat kuitenkin löytäneet mahdollisuuden olla eri mieltä mikroarkkitehtonisen toteutuksen yksityiskohdista. Vaikka eri valmistajien suorittimet ovat joskus hyvin erilaisia, vaikka ne olisivat yhteensopivia, kuten Pentium 4 ja Athlon tai Core. Nvidia-arkkitehtuuri on jo melko laajalti tunnettu, nyt tarkastelemme Radeonia ja tuomme esiin tärkeimmät erot näiden valmistajien lähestymistapoissa.

AMD-näytönohjaimet saivat täyden tuen yleiskäyttöiselle tietojenkäsittelylle alkaen Evergreen-perheestä, joka myös toteutti ensimmäistä kertaa DirectX 11 -spesifikaatiot. 47xx-perheen korteilla on useita merkittäviä rajoituksia, joista keskustellaan alla.

Erot paikallisen muistin koossa (32 kt Radeonille vs. 16 kt GT200:lle ja 64 kt Fermille) eivät yleensä ole merkittäviä. Sekä AMD:n 64 säikeen aaltorintaman koko verrattuna Nvidian 32 lankaan. Lähes kaikki GPU-ohjelmat voidaan helposti konfiguroida uudelleen ja mukauttaa näihin parametreihin. Suorituskyky voi muuttua kymmeniä prosentteja, mutta GPU:n tapauksessa tämä ei ole niin tärkeää, koska GPU-ohjelma toimii yleensä kymmenen kertaa hitaammin kuin prosessorivastine tai kymmenen kertaa nopeammin tai ei toimi ollenkaan.

Tärkeämpää on AMD:n VLIW-teknologian (Very Long Instruction Word) käyttö. Nvidia käyttää skalaaria yksinkertaiset ohjeet, joka toimii skalaarirekistereillä. Sen kiihdyttimet toteuttavat yksinkertaisen klassisen RISC:n. AMD-näytönohjainkorteissa on sama määrä rekistereitä kuin GT200:ssa, mutta rekisterit ovat 128-bittisiä vektoreita. Jokainen VLIW-käsky toimii useissa nelikomponenttisissa 32-bittisissä rekistereissä, mikä on samanlainen kuin SSE, mutta VLIW:llä on paljon enemmän ominaisuuksia. Tämä ei ole SIMD (Single Instruction Multiple Data), kuten SSE - tässä kunkin operandiparin ohjeet voivat olla erilaisia ​​ja jopa riippuvaisia! Oletetaan esimerkiksi rekisterin A komponenttien nimitys a1, a2, a3, a4; rekisteri B on samanlainen. Voidaan laskea yhdellä käskyllä, joka suoritetaan yhdessä kellojaksossa, esimerkiksi luku a1×b1+a2×b2+a3×b3+a4×b4 tai kaksiulotteinen vektori (a1×b1+a2×b2, a3 ×b3+a4×b4 ).

Tämän teki mahdolliseksi GPU:n alhaisempi taajuus kuin CPU ja prosessiteknologian voimakas väheneminen viime vuosina. Tässä tapauksessa ajastinta ei tarvita, melkein kaikki suoritetaan kellojaksossa.

Vektoriohjeiden ansiosta Radeonin huippusuorituskyky on erittäin korkea saavuttaen teraflopsin.

Yksi vektorirekisteri voi tallentaa yhden kaksinkertaisen tarkkuusluvun neljän yksittäisen tarkkuusluvun sijaan. Ja yksi VLIW-käsky voi joko lisätä kaksi paria kaksoislukuja tai kertoa kaksi numeroa tai kertoa kaksi numeroa ja lisätä kolmannella. Siten huippusuorituskyky tuplakäytössä on noin viisi kertaa pienempi kuin kellussa. Vanhemmissa Radeon-malleissa se vastaa Nvidia Teslan suorituskykyä uudessa Fermi-arkkitehtuurissa ja on paljon parempi kuin kaksoiskorttien suorituskyky GT200-arkkitehtuurissa. Kuluttajakäyttöön tarkoitetuissa Fermi-pohjaisissa Geforce-näytönohjainkorteissa suurin nopeus kaksinkertaisia ​​laskelmia on vähennetty neljä kertaa.


Kaaviokaavio Radeonin toiminnasta. Vain yksi miniprosessori 20:stä rinnakkain toimivasta on esitetty

GPU-valmistajia, toisin kuin prosessorivalmistajia (pääasiassa x86-yhteensopivia), eivät sido yhteensopivuusongelmat. GPU-ohjelma käännetään ensin johonkin välikoodiin, ja ohjelman suoritettaessa ajuri kääntää tämän koodin mallikohtaisiksi konekäskyiksi. Kuten yllä on kuvattu, GPU-valmistajat ovat hyödyntäneet tätä kehittämällä kätevän ISA:n (Instruction Set Architecture) GPU:illeen ja vaihtamalla niitä sukupolvesta toiseen. Joka tapauksessa tämä lisäsi jonkin verran suorituskykyä dekooderin puuttumisen vuoksi (tarpeettomana). Mutta AMD meni vielä pidemmälle keksimällä oman muodon ohjeiden järjestämiseksi konekoodiin. Niitä ei ole järjestetty peräkkäin (ohjelmaluettelon mukaan), vaan osioihin.

Ensin tulee ehdollisten haarakäskyjen osa, jossa on linkit jatkuvien aritmeettisten käskyjen osiin, jotka vastaavat eri haarahaaroja. Niitä kutsutaan VLIW-nippuiksi. Nämä osiot sisältävät vain aritmeettisia ohjeita rekistereiden tai paikallisen muistin tiedoilla. Tämä organisaatio yksinkertaistaa ohjevirtojen hallintaa ja niiden toimittamista johtolaitteille. Tämä on sitäkin hyödyllisempää, koska VLIW-ohjeet ovat kooltaan suhteellisen suuria. Siellä on myös muistinkäyttöohjeita koskevat osiot.

Ehdolliset hyppyohjejaksot
Osa 0Haara 0Linkki jatkuvien aritmeettisten ohjeiden osaan 3
Osa 1Haara 1Linkki osioon nro 4
Osasto-2Haara 2Linkki osioon nro 5
Jatkuvat aritmeettiset käskyt
Osa 3VLIW-ohje 0VLIW-ohje 1VLIW-ohje 2VLIW-ohje 3
Osa 4VLIW-ohje 4VLIW-ohje 5
Osa 5VLIW-ohje 6VLIW-ohje 7VLIW-ohje 8VLIW-ohje 9

Sekä Nvidian että AMD:n grafiikkasuorittimessa on myös sisäänrakennetut ohjeet laskea nopeasti matemaattiset perusfunktiot, neliöjuuri, eksponentti, logaritmit, sinit ja kosinit yhden tarkkuuden numeroille muutamalla kellojaksolla. Tätä varten on olemassa erityisiä laskentayksiköitä. Ne "syntyvät" tarpeesta toteuttaa näiden funktioiden nopea approksimaatio geometrian varjostimissa.

Vaikka joku ei tiennytkään, että grafiikkasuoritteita käytetään grafiikkaan, vaan luki vain tekniset ominaisuudet, niin tämän merkin perusteella hän saattoi arvata, että nämä tietokoneiden apuprosessorit ovat peräisin videokiihdyttimistä. Samoin tiettyjen merinisäkkäiden ominaisuuksien perusteella tiedemiehet ymmärsivät, että heidän esi-isänsä olivat maaeläimiä.

Mutta ilmeisempi ominaisuus, joka paljastaa laitteen graafisen alkuperän, on 2D- ja 3D-tekstuurilukuyksiköt, jotka tukevat bilineaarista interpolaatiota. Niitä käytetään laajalti GPU-ohjelmissa, koska ne tarjoavat nopeutettua ja yksinkertaistettua vain luku -tietotaulukoiden lukemista. Yksi GPU-sovelluksen vakiokäyttäytymisestä on lukea lähdedatan matriiseja, käsitellä niitä laskentaytimissä ja kirjoittaa tulos toiseen taulukkoon, joka sitten siirretään takaisin CPU:lle. Tämä malli on vakio ja yleinen, koska se on kätevä GPU-arkkitehtuurille. Tehtäviä, jotka vaativat intensiivistä luku- ja kirjoitusta yhdelle suurelle globaalin muistin alueelle ja sisältävät siten datariippuvuuksia, on vaikea rinnastaa ja toteuttaa tehokkaasti GPU:ssa. Lisäksi niiden suorituskyky riippuu suuresti globaalin muistin latenssista, joka on erittäin korkea. Mutta jos tehtävää kuvataan kaavalla "tietojen lukeminen - käsittely - tuloksen kirjoittaminen", voit melkein varmasti saada suuren sysäyksen suorittamalla sen GPU:lla.

GPU:n tekstuuritiedoilla on erillinen hierarkia ensimmäisen ja toisen tason pienistä välimuistista. Tämä antaa kiihtyvyyden tekstuurien käytöstä. Tämä hierarkia esiintyi alun perin grafiikkasuorituksissa, jotta pintakuvioiden käyttöpaikasta voitaisiin hyötyä: yhden pikselin käsittelyn jälkeen viereinen pikseli (suurella todennäköisyydellä) vaatii luonnollisesti lähellä olevia pintakuviotietoja. Mutta monilla tavanomaisten laskelmien algoritmeilla on samanlainen tiedonsaanti. Joten grafiikan tekstuurivälimuistit ovat erittäin hyödyllisiä.

Vaikka Nvidian ja AMD-korttien L1-L2-välimuistien koko on suunnilleen samanlainen, mikä johtuu ilmeisesti peligrafiikan optimaalisuuden vaatimuksista, näiden välimuistien käyttöviive vaihtelee huomattavasti. Nvidialla on korkeampi käyttöviive, ja GeForcen tekstuurivälimuistit auttavat ensisijaisesti vähentämään muistiväylän kuormitusta sen sijaan, että ne nopeuttavat suoraan tietojen käyttöä. Tämä ei ole havaittavissa grafiikkaohjelmissa, mutta on tärkeää yleiskäyttöisille ohjelmille. Radeonissa tekstuurivälimuistin latenssi on pienempi, mutta miniprosessorien paikallismuistin latenssi on suurempi. Voimme antaa seuraavan esimerkin: optimaaliseen matriisin kertomiseen Nvidia-korteilla on parempi käyttää paikallista muistia lataamalla matriisi sinne lohko lohkolta ja AMD on parempi luottaa matalan viiveen pintakuviovälimuistiin ja lukee matriisielementtejä tarpeen mukaan. Mutta tämä on jo melko hienovarainen optimointi, ja algoritmille, joka on jo pohjimmiltaan siirretty GPU: lle.

Tämä ero näkyy myös käytettäessä 3D-kuvioita. Yksi ensimmäisistä GPU-laskennan vertailuarvoista, joka osoitti vakavaa etua AMD:lle, käytti 3D-kuvioita, koska se toimi kolmiulotteisen tietojoukon kanssa. Ja pintakuvioiden pääsyn latenssi Radeonissa on huomattavasti nopeampi, ja 3D-kotelo on lisäksi optimoitu laitteistossa.

Maksimaalisen suorituskyvyn saamiseksi eri yritysten laitteistoista tarvitaan jonkin verran sovelluksen viritystä tietylle kortille, mutta tämä on suuruusluokkaa vähemmän merkittävää kuin periaatteessa GPU-arkkitehtuurin algoritmin kehittäminen.

Radeon 47xx -sarjan rajoitukset

Tässä perheessä GPU-laskennan tuki on epätäydellinen. Kolme tärkeää asiaa voidaan mainita. Ensinnäkin paikallista muistia ei ole, eli se on fyysisesti olemassa, mutta sillä ei ole nykyaikaisen GPU-ohjelmien vaatimaa yleistä pääsyä. Sitä emuloidaan globaalissa muistissa olevissa ohjelmistoissa, mikä tarkoittaa, että sen käyttö, toisin kuin täysimittainen GPU, ei tuota etuja. Toinen kohta on rajoitettu tuki erilaisille atomimuistin toimintokäskyille ja synkronointikäskyille. Ja kolmas kohta on käskyvälimuistin melko pieni koko: tietystä ohjelman koosta alkaen nopeus hidastuu huomattavasti. Muita pieniä rajoituksia on. Voimme sanoa, että vain GPU:lle ihanteellisesti sopivat ohjelmat toimivat hyvin tällä näytönohjaimella. Vaikka yksinkertaisissa testiohjelmissa, jotka toimivat vain rekistereillä, näytönohjain voi näyttää hyviä tuloksia Gigaflopsissa, on ongelmallista ohjelmoida sille tehokkaasti jotain monimutkaista.

Evergreenin edut ja haitat

Jos vertaat AMD- ja Nvidia-tuotteita, GPU-laskennan näkökulmasta 5xxx-sarja näyttää erittäin tehokkaalta GT200:lta. Niin voimakas, että se ylittää Fermin huipussaan noin kaksi ja puoli kertaa. Varsinkin sen jälkeen, kun uusien Nvidia-näytönohjainkorttien parametreja leikattiin ja ytimien määrää vähennettiin. Mutta L2-välimuistin käyttöönotto Fermissä yksinkertaistaa joidenkin algoritmien toteuttamista GPU:ssa, mikä laajentaa GPU:n soveltamisalaa. Mielenkiintoista on, että CUDA-ohjelmille, jotka oli optimoitu edellisen sukupolven GT200:lle, Fermin arkkitehtoniset innovaatiot eivät usein tehneet mitään. Ne kiihtyivät suhteessa laskentamoduulien määrän kasvuun eli alle kaksinkertaiseksi (yksitarkkuusluvuilla) tai jopa vähemmän, koska muistin kaistanleveys ei kasvanut (tai muista syistä).

Ja tehtävissä, jotka sopivat hyvin GPU-arkkitehtuuriin ja joissa on selkeä vektoriluonne (esimerkiksi matriisikertolasku), Radeon näyttää suorituskyvyn suhteellisen lähellä teoreettista huippua ja ylittää Fermin. Puhumattakaan moniytimisistä prosessoreista. Varsinkin yksittäisten tarkkuuslukujen ongelmissa.

Mutta Radeonilla on pienempi suutinpinta-ala, vähemmän lämmönpoistoa, virrankulutusta, suurempi tuotto ja vastaavasti alhaisemmat kustannukset. Ja suoraan 3D-grafiikkatehtävissä Fermin voitto, jos sitä ollenkaan on, on paljon pienempi kuin kristallialueen ero. Tämä johtuu suurelta osin siitä, että Radeonin laskenta-arkkitehtuuri, jossa on 16 laskentayksikköä miniprosessoria kohden, 64 säikeen aaltorintaman koko ja VLIW-vektorikäskyt, sopii erinomaisesti päätehtäväänsä - grafiikkavarjostimien laskemiseen. Suurimmalle osalle tavallisista käyttäjistä pelin suorituskyky ja hinta ovat prioriteetteja.

Ammattimaisen, tieteellisen ohjelmiston näkökulmasta Radeon-arkkitehtuuri tarjoaa parhaan hinta-suorituskyvyn, suorituskyvyn wattia kohden ja absoluuttisen suorituskyvyn tehtävissä, jotka ovat luonnostaan ​​hyvin yhteensopivia GPU-arkkitehtuurien kanssa, mikä mahdollistaa rinnakkaistamisen ja vektorisoinnin.

Esimerkiksi täysin rinnakkaisessa, helposti vektoroitavassa avaimen valintatehtävässä Radeon on useita kertoja nopeampi kuin GeForce ja useita kymmeniä kertoja nopeampi kuin CPU.

Tämä on yhdenmukainen AMD Fusionin yleisen konseptin kanssa, jonka mukaan GPU:iden tulee täydentää prosessoria ja tulevaisuudessa integroida itse suorittimen ytimeen, aivan kuten matemaattinen apuprosessori siirrettiin aiemmin erilliseltä sirulta prosessorin ytimeen (tämä tapahtui kaksikymmentä vuotta sitten, ennen kuin ensimmäiset Pentium-prosessorit ilmestyivät). GPU on integroitu grafiikkaydin ja vektoriaprosessori suoratoistotehtäviin.

Radeon käyttää älykästä tekniikkaa sekoittaa käskyjä eri aaltorinteiltä, ​​kun ne suoritetaan toimintomoduulien avulla. Tämä on helppo tehdä, koska ohjeet ovat täysin riippumattomia. Periaate on samanlainen kuin nykyaikaisten suorittimien suorittama itsenäisten käskyjen liukuhihna. Ilmeisesti tämä mahdollistaa monimutkaisten, monitavuisten vektori-VLIW-käskyjen tehokkaan suorittamisen. Suorittimessa tämä vaatii kehittyneen ajoittimen tunnistamaan itsenäiset käskyt tai käyttämään Hyper-Threading-tekniikkaa, joka myös toimittaa CPU:lle tarkoituksellisesti itsenäisiä ohjeita eri säikeistä.

mitta 0baari 1mitta 2mitta 3baari 4baari 5baari 6baari 7VLIW moduuli
aaltorintama 0aaltorintama 1aaltorintama 0aaltorintama 1aaltorintama 0aaltorintama 1aaltorintama 0aaltorintama 1
instr. 0instr. 0instr. 16instr. 16instr. 32instr. 32instr. 48instr. 48VLIW0
instr. 1VLIW1
instr. 2VLIW2
instr. 3VLIW3
instr. 4VLIW4
instr. 5VLIW5
instr. 6VLIW6
instr. 7VLIW7
instr. 8VLIW8
instr. 9VLIW9
instr. 10VLIW10
instr. yksitoistaVLIW11
instr. 12VLIW12
instr. 13VLIW13
instr. 14VLIW14
instr. 15VLIW15

128 käskyä kahdesta aaltorintamasta, joista kukin koostuu 64 operaatiosta, suoritetaan 16 VLIW-moduulilla kahdeksassa kellojaksossa. Limitystä tapahtuu, ja jokaisella moduulilla on todellisuudessa kaksi kellojaksoa suorittaakseen koko käskyn edellyttäen, että toisella kellojaksolla se aloittaa uuden suorittamisen rinnakkain. Tämä luultavasti auttaa VLIW-käskyn kuten a1×a2+b1×b2+c1×c2+d1×d2 nopeassa suorittamisessa, eli kahdeksan tällaisen käskyn suorittamisessa kahdeksassa kellojaksossa. (Muodollisesti se osoittautuu yksi per mitta.)

Nvidialla ei ilmeisesti ole tällaista tekniikkaa. Ja VLIW:n puuttuessa korkea suorituskyky skalaarikäskyjä käyttäen vaatii korkeataajuista toimintaa, mikä lisää automaattisesti lämmön haihtumista ja asettaa prosessille suuria vaatimuksia (piirin pakottamiseksi toimimaan korkeammalla taajuudella).

Radeonin haittana GPU-laskennan kannalta on sen suuri vastenmielisyys haarautumiseen. Grafiikkasuorittimet eivät yleensä suosi haarautumista johtuen yllä kuvatusta tekniikasta käskyjen suorittamiseen: kerralla säieryhmässä yhdellä ohjelmaosoitteella. (Muuten, tätä tekniikkaa kutsutaan nimellä SIMT: Single Instruction - Multiple Threads (yksi käsky - monta säiettä), analogisesti SIMD:n kanssa, jossa yksi käsky suorittaa yhden toiminnon eri datalla.) Radeon ei kuitenkaan erityisesti pidä haaroituksesta: tämä johtuu lankakimpun suuremmasta koosta. On selvää, että jos ohjelma ei ole täysin vektori, niin mitä suurempi loimen tai aaltorintaman koko on, sitä pahempaa, koska kun vierekkäiset säikeet eroavat ohjelmapolullaan, muodostuu enemmän ryhmiä, jotka on suoritettava peräkkäin (serialisoitu). Oletetaan, että kaikki langat ovat hajallaan, niin jos loimen koko on 32 lankaa, ohjelma toimii 32 kertaa hitaammin. Ja koon 64 tapauksessa, kuten Radeonissa, se on 64 kertaa hitaampi.

Tämä on havaittavissa oleva, mutta ei ainoa "vihamielisuuden" ilmentymä. Nvidian näytönohjaimissa jokaisessa toiminnallisessa moduulissa, jota kutsutaan muuten CUDA-ytimeksi, on erityinen haarakäsittelyyksikkö. Ja Radeonin näytönohjaimissa, joissa on 16 laskentamoduulia, on vain kaksi haaraohjausyksikköä (ne poistetaan aritmeettisten yksiköiden alueelta). Joten jopa yksinkertainen ehdollisen hyppykäskyn käsittely, vaikka sen tulos olisi sama kaikille aaltorintaman säikeille, vie lisäaikaa. Ja nopeus laskee.

AMD valmistaa myös suorittimia. He uskovat, että ohjelmille, joissa on paljon haaroja, CPU sopii edelleen paremmin, kun taas GPU on tarkoitettu puhtaille vektoriohjelmille.

Joten Radeon tarjoaa vähemmän yleistä ohjelmointitehokkuutta, mutta tarjoaa paremman hinta/suorituskyvyn monissa tapauksissa. Toisin sanoen, on vähemmän ohjelmia, jotka voidaan siirtää tehokkaasti (kannattavasti) prosessorista Radeoniin, kuin on ohjelmia, jotka voivat toimia tehokkaasti Fermissä. Mutta ne, jotka voidaan siirtää tehokkaasti, toimivat tehokkaammin Radeonissa monin tavoin.

API GPU-laskentaan

Itse Radeonin tekniset tiedot näyttävät houkuttelevilta, vaikka GPU-laskentaa ei tarvitse idealisoida ja ehdottaa. Mutta yhtä tärkeä tuottavuuden kannalta ei ole GPU-ohjelman kehittämiseen ja suorittamiseen tarvittava ohjelmisto - kääntäjät korkean tason kielestä ja ajonaikaisesta, eli ohjain, joka on vuorovaikutuksessa CPU:ssa toimivan ohjelman osan ja GPU:n välillä. itse. Se on jopa tärkeämpää kuin CPU:n tapauksessa: CPU ei tarvitse ajuria tiedonsiirtojen hallintaan, ja kääntäjän näkökulmasta GPU on nirsompi. Esimerkiksi kääntäjän täytyy tyytyä minimimäärään rekistereitä tallentaakseen laskutoimitusten välituloksia, ja myös integroitava funktiokutsut huolellisesti käyttäen taas minimimäärää rekistereitä. Loppujen lopuksi, mitä vähemmän rekistereitä säiettä käyttää, sitä enemmän säiettä voidaan käynnistää ja sitä paremmin GPU voidaan ladata, mikä paremmin piilottaa muistin käyttöajan.

Ja ohjelmistotuki Radeon-tuotteille on edelleen jäljessä laitteistokehityksestä. (Toisin kuin Nvidian tapauksessa, jossa laitteiston julkaisu viivästyi ja tuote julkaistiin riisutussa muodossa.) Juuri äskettäin AMD:n tuottama OpenCL-kääntäjä oli beetatilassa, ja siinä oli monia puutteita. Se loi virheellistä koodia liian usein tai kieltäytyi kääntämästä koodia oikeasta lähdekoodista tai se itse tuotti virheen ja kaatui. Vasta kevään lopulla julkaistiin korkean suorituskyvyn julkaisu. Se ei myöskään ole ilman virheitä, mutta niitä on huomattavasti vähemmän, ja niitä esiintyy yleensä sivusuunnassa, kun yritetään ohjelmoida jotain oikeellisuuden partaalla. Ne toimivat esimerkiksi uchar4-tyypin kanssa, joka määrittää 4-tavuisen nelikomponenttisen muuttujan. Tämä tyyppi on OpenCL-spesifikaatioissa, mutta sen kanssa ei kannata työskennellä Radeonissa, koska rekisterit ovat 128-bittisiä: samat neljä komponenttia, mutta 32-bittisiä. Ja tällainen uchar4-muuttuja vie edelleen koko rekisterin, se vaatii vain lisäpakkaustoimintoja ja pääsyn yksittäisiin tavukomponentteihin. Kääntäjässä ei pitäisi olla virheitä, mutta ei ole olemassa kääntäjiä ilman virheitä. Jopa Intel Compilerissa 11 version jälkeen on käännösvirheitä. Tunnistetut virheet korjataan seuraavassa julkaisussa, joka julkaistaan ​​lähempänä syksyä.

Mutta vielä on monia asioita, jotka kaipaavat parantamista. Esimerkiksi tavallinen Radeon GPU -ohjain ei edelleenkään tue OpenCL:ää käyttävää GPU-laskentaa. Käyttäjän on ladattava ja asennettava ylimääräinen erikoispaketti.

Mutta tärkeintä on funktiokirjastojen puuttuminen. Kaksinkertaisen tarkkuuden reaaliluvuilla ei ole edes siniä, kosinia tai eksponenttia. No, tätä ei vaadita matriisi- ja kertolaskuihin, mutta jos haluat ohjelmoida jotain monimutkaisempaa, sinun on kirjoitettava kaikki funktiot tyhjästä. Tai odota uutta SDK-julkaisua. ACML (AMD Core Math Library) Evergreen GPU -perheelle, joka tukee perusmatriisitoimintoja, julkaistaan ​​pian.

Tällä hetkellä Direct Compute 5.0 API:n käyttö vaikuttaa artikkelin kirjoittajan mukaan realistiselta Radeon-näytönohjainkorttien ohjelmointiin, luonnollisesti ottaen huomioon rajoitukset: keskity Windows-alusta 7 ja Windows Vista. Microsoftilla on laaja kokemus kääntäjien luomisesta, ja voimme odottaa täysin toimivaa julkaisua hyvin pian, Microsoft on suoraan kiinnostunut tästä. Mutta Direct Compute keskittyy interaktiivisten sovellusten tarpeisiin: laskea jotain ja visualisoida välittömästi tulos - esimerkiksi nesteen virtaus pinnan yli. Tämä ei tarkoita, etteikö sitä voisi käyttää pelkästään laskelmiin, mutta se ei ole sen luonnollinen tarkoitus. Oletetaan, että Microsoft ei aio lisätä kirjastotoimintoja Direct Computeen - vain niitä, joita AMD:llä ei tällä hetkellä ole. Toisin sanoen se, mitä voidaan nyt tehokkaasti laskea Radeonilla - jotkut eivät kovin kehittyneitä ohjelmia - voidaan toteuttaa myös Direct Computessa, joka on paljon yksinkertaisempi kuin OpenCL ja sen pitäisi olla vakaampi. Lisäksi se on täysin kannettava ja toimii sekä Nvidiassa että AMD:ssä, joten sinun tarvitsee kääntää ohjelma vain kerran, kun taas Nvidian ja AMD:n OpenCL SDK -toteutukset eivät ole täysin yhteensopivia. (Sillä mielessä, että jos kehität OpenCL-ohjelman AMD-järjestelmässä käyttämällä AMD OpenCL SDK:ta, se ei välttämättä toimi yhtä helposti Nvidiassa. Sinun on ehkä käännettävä sama teksti Nvidia SDK:lla. Ja tietysti päinvastoin. .)

Sitten OpenCL:ssä on paljon redundantteja toimintoja, koska OpenCL on tarkoitettu yleiseksi ohjelmointikieleksi ja API:ksi monenlaisille järjestelmille. Ja GPU ja CPU ja Cell. Joten jos sinun tarvitsee vain kirjoittaa ohjelma tyypilliselle käyttäjäjärjestelmälle (prosessori plus näytönohjain), OpenCL ei näytä olevan niin sanotusti "erittäin tuottava". Jokaisella funktiolla on kymmenen parametria, joista yhdeksän on asetettava 0:ksi. Kunkin parametrin asettamiseksi sinun on kutsuttava erikoistoiminto, jolla on myös parametreja.

Ja Direct Computen tärkein nykyinen etu on, että käyttäjän ei tarvitse asentaa erityistä pakettia: kaikki tarvittava on jo DirectX 11:ssä.

GPU-tekniikan kehityksen ongelmat

Jos otamme henkilökohtaisten tietokoneiden piirin, tilanne on seuraava: suurta laskentatehoa vaativia tehtäviä ei ole paljon ja perinteinen kaksiytiminen prosessori puuttuu suuresti. Tuntui kuin suuret, ahneat mutta kömpelöt hirviöt olisivat ryömineet merestä maalle, eikä maalla ollut juuri mitään syötävää. Ja maan pinnan alkuperäiset asuinpaikat pienenevät ja oppivat kuluttamaan vähemmän, kuten aina tapahtuu, kun luonnonvaroista on pulaa. Jos suorituskyvyn tarve olisi nyt sama kuin 10-15 vuotta sitten, GPU-laskenta olisi iso hitti. Ja niin yhteensopivuusongelmat ja GPU-ohjelmoinnin suhteellinen monimutkaisuus nousevat etualalle. On parempi kirjoittaa ohjelma, joka toimii kaikissa järjestelmissä, kuin ohjelma, joka toimii nopeasti, mutta toimii vain grafiikkasuorittimella.

Grafiikkasuorittimien mahdollisuudet ovat jonkin verran paremmat ammattisovelluksissa ja työasemasektorilla käytettäessä, koska siellä on suurempi suorituskyvyn tarve. 3D-editoreille on lisäosia, joissa on GPU-tuki: esimerkiksi renderöimiseen säteenseurannan avulla - ei pidä sekoittaa tavalliseen GPU-renderöintiin! Jotain on myös syntymässä 2D- ja esityseditoreille, joilla monimutkaisten tehosteiden luominen on nopeampaa. Myös videonkäsittelyohjelmat saavat vähitellen GPU-tuen. Yllä olevat tehtävät sopivat rinnakkaisluonteensa vuoksi hyvin GPU-arkkitehtuuriin, mutta nyt on luotu erittäin laaja koodikanta, joka on debuggoitu ja optimoitu prosessorin kaikille ominaisuuksille, joten hyvien GPU-toteutusten ilmestyminen kestää jonkin aikaa. .

Tässä segmentissä on myös sellaisia heikkoja puolia Grafiikkasuorittimissa on rajoitettu määrä videomuistia – noin 1 Gt tavallisissa grafiikkasuorissa. Yksi tärkeimmistä GPU-ohjelmien suorituskykyä heikentävistä tekijöistä on tarve vaihtaa tietoja CPU:n ja GPU:n välillä hitaan väylän kautta, ja rajoitetun muistin vuoksi dataa on siirrettävä enemmän. Ja tässä AMD:n konsepti GPU:n ja CPU:n yhdistämisestä yhdessä moduulissa näyttää lupaavalta: voit uhrata näytönohjaimen suuren kaistanleveyden keveyden ja helppo pääsy jaettuun muistiin, myös pienemmällä viiveellä. Tämä nykyisen DDR5-videomuistin suuri kaistanleveys on paljon enemmän kysytty suoraan grafiikkaohjelmilta kuin useimmilta GPU-laskentaohjelmilta. Yleensä GPU:n ja CPU:n jaettu muisti yksinkertaisesti laajentaa merkittävästi GPU:n laajuutta, mikä mahdollistaa sen laskentaominaisuuksien käytön ohjelmien pienissä alitehtävissä.

Ja GPU:t ovat kysytyimpiä tieteellisen laskennan alalla. GPU-pohjaisia ​​supertietokoneita on jo rakennettu, ja ne osoittavat erittäin hyviä tuloksia matriisitoimintojen testissä. Tieteelliset ongelmat ovat niin erilaisia ​​ja lukuisia, että aina löytyy monia, jotka sopivat täydellisesti GPU-arkkitehtuuriin, joille GPU:n käyttö helpottaa korkean suorituskyvyn saavuttamista.

Jos valitset yhden kaikkien nykyaikaisten tietokoneiden tehtävistä, se on tietokonegrafiikka - kuva maailmasta, jossa elämme. Ja optimaalinen arkkitehtuuri tähän tarkoitukseen ei voi olla huono. Tämä on niin tärkeä ja perustavanlaatuinen tehtävä, että siihen erityisesti suunnitellun laitteiston on oltava universaali ja optimaalinen erilaisiin tehtäviin. Lisäksi näytönohjaimet kehittyvät menestyksekkäästi.

Yksi viime aikoina piilotetuimmista ominaisuuksista Windows päivitys 10, on mahdollisuus tarkistaa, mitkä sovellukset käyttävät grafiikkasuoritusyksikköäsi (GPU). Jos olet joskus avannut Task Managerin, olet luultavasti katsonut suorittimen käyttöäsi nähdäksesi, mitkä sovellukset käyttävät eniten suoritinta. SISÄÄN Viimeisimmät päivitykset lisäsi samanlaisen ominaisuuden, mutta GPU-grafiikkaprosessoreille. Tämä auttaa sinua ymmärtämään, kuinka intensiivisiä ohjelmistosi ja pelisi ovat GPU:ssasi ilman, että sinun tarvitsee ladata kolmannen osapuolen ohjelmistoja. On toinenkin mielenkiintoinen ominaisuus, joka auttaa purkamaan CPU:ta GPU:hun. Suosittelen lukemaan kuinka valita.

Miksi minulla ei ole GPU:ta Task Managerissa?

Valitettavasti kaikki näytönohjaimet eivät voi tarjota Windows-järjestelmä GPU:n lukemiseen tarvittavat tilastot. Voit olla varma, että voit nopeasti tarkistaa tämän tekniikan DirectX-diagnostiikkatyökalulla.

  1. Klikkaus " alkaa" ja kirjoita hakuun dxdiag suorittaaksesi DirectX-diagnostiikkatyökalun.
  2. Siirry "välilehteen" näyttö", oikealla sarakkeessa " Kuljettajat"sinulla täytyy olla WDDM malli yli 2.0 versio GPU-kaavioiden käyttämiseen tehtävähallinnassa.

Ota GPU-kaavio käyttöön tehtävähallinnassa

Jos haluat nähdä kunkin sovelluksen GPU-käytön, sinun on avattava tehtävähallinta.

  • Paina painikkeiden yhdistelmää Ctrl + Shift + Esc avataksesi tehtävähallinnan.
  • Napsauta hiiren kakkospainikkeella tehtävähallinnassa "tyhjä"-ruutua Nimi" ja tarkista avattavasta valikosta GPU Voit myös huomata GPU-ydin nähdäksesi mitkä ohjelmat käyttävät sitä.
  • Nyt tehtävähallinnassa GPU-kaavio ja GPU-ydin näkyvät oikealla.


Katso GPU:n kokonaissuorituskyky

Voit seurata GPU:n yleistä käyttöä seurataksesi sitä raskaassa kuormituksessa ja analysoidaksesi sitä. Tässä tapauksessa näet kaiken tarvitsemasi välilehdessä Esitys" valitsemalla grafiikkaprosessori.


Jokainen GPU-elementti on jaettu yksittäisiksi kaavioiksi, jotta saat entistä enemmän tietoa siitä, miten GPU:ta käytetään. Jos haluat muuttaa näytettäviä kaavioita, voit napsauttaa pientä nuolta kunkin tehtävän nimen vieressä. Tämä näyttö näyttää myös ohjainversiosi ja päivämäärän, mikä on hyvä vaihtoehto DXDiagin tai Laitehallinnan käyttämiselle.


Mitä ohjelmaa tarvitaan kryptovaluutan louhimiseen? Mitä tulee ottaa huomioon kaivoslaitteita valittaessa? Kuinka louhia Bitcoinia ja Ethereumia tietokoneen näytönohjaimella?

Osoittautuu, että tehokkaita näytönohjaimia eivät tarvitse vain näyttävien tietokonepelien fanit. Tuhannet käyttäjät ympäri maailmaa käyttävät grafiikkasovittimia ansaitakseen kryptovaluuttoja! Useista korteista tehokkailla prosessoreilla kaivostyöläiset luoda maatiloilla– tietokonekeskukset, jotka poimivat digitaalista rahaa käytännössä tyhjästä!

Denis Kuderin on kanssasi, HeatherBober-lehden asiantuntija rahoitusasioista ja niiden asiantuntevasta kertomisesta. Kerron sinulle, mikä se on kaivostoimintaa videokortilla 17-18, kuinka valita oikea laite kryptovaluutan ansaitsemiseen ja miksi bitcoinien louhinta näytönohjaimella ei ole enää kannattavaa.

Saat myös selville mistä ostaa tuottavin ja tehokkain näytönohjain ammattimaiseen kaivostoimintaan ja saat asiantuntijaneuvoja kaivoslaitteistosi tehokkuuden parantamiseen.

1. Kaivostoiminta näytönohjaimella - helppoa rahaa tai perusteettomia kuluja

Hyvä näytönohjain ei ole vain sovitin digitaalisia signaaleja, mutta myös tehokas prosessori, joka pystyy ratkaisemaan monimutkaisia ​​laskennallisia ongelmia. Ja mukaan lukien - laskea hash-koodi lohkoketjulle (lohkoketju). Tämä tekee grafiikkakorteista ihanteellisen työkalun kaivostoimintaa– kryptovaluutan louhinta.

Kysymys: Miksi näytönohjainprosessori? Loppujen lopuksi jokaisessa tietokoneessa on prosessori? Eikö ole loogista tehdä laskelmia sen avulla?

Vastaus: CPU-prosessori voi myös laskea lohkoketjuja, mutta se tekee sen satoja kertoja hitaammin kuin näytönohjainprosessori (GPU). Eikä siksi, että toinen on parempi, toinen huonompi. Niillä on vain erilaiset toimintaperiaatteet. Ja jos yhdistät useita näytönohjainkortteja, tällaisen tietokonekeskuksen teho kasvaa useita kertoja.

Niille, joilla ei ole aavistustakaan siitä, kuinka digitaalista rahaa louhitaan, pieni koulutusohjelma. Kaivostoiminta - tärkein ja joskus ainoa tapa tuottaa kryptovaluuttoja.

Koska kukaan ei lyö tai tulosta tätä rahaa, eikä se ole aineellinen aine, vaan digitaalinen koodi, jonkun on laskettava tämä koodi. Tätä kaivostyöläiset tekevät, tai pikemminkin heidän tietokoneensa tekevät.

Koodilaskentojen lisäksi louhinta suorittaa useita tärkeitä tehtäviä:

  • tuki järjestelmän hajauttamiselle: lohkoketjun perustana on kiinnittymisen puute palvelimiin;
  • tapahtuman vahvistus– ilman louhintaa toiminnot eivät pääse uuteen lohkoon;
  • järjestelmän uusien lohkojen muodostuminen– ja syöttämällä ne yhteen rekisteriin kaikille tietokoneille.

Haluaisin välittömästi jäähdyttää aloittelevien kaivostyöläisten intoa: kaivosprosessista tulee vuosi vuodelta entistä vaikeampi. Esimerkiksi näytönohjaimen käyttö on ollut pitkään kannattamatonta.

Vain sitkeät amatöörit louhivat nyt kippipalloja GPU:lla, koska näytönohjaimet on korvattu erikoisprosessoreilla ASIC. Nämä sirut kuluttavat vähemmän virtaa ja ovat laskennallisesti tehokkaampia. Kaikki ovat hyviä, mutta ne maksavat noin suuruusluokan 130-150 tuhatta ruplaa .

Tehokas malli Antminer S9

Kaivostyöläisten onneksi Bitcoin ei ole planeetan ainoa kryptovaluutta, vaan yksi sadoista. Muu digitaalinen raha - Ethereum, Zcash, Expanse, dogecoinit jne. On edelleen kannattavaa louhia näytönohjainkorteilla. Palkkaus on vakaa ja laitteet maksavat itsensä takaisin noin 6-12 kuukaudessa.

Mutta on toinenkin ongelma - tehokkaiden näytönohjainkorttien puute.. Kryptovaluuttoja koskeva hype on johtanut näiden laitteiden hintojen nousuun. Uuden kaivostoimintaan sopivan näytönohjaimen ostaminen Venäjällä ei ole niin helppoa.

Aloittelevien kaivostyöntekijöiden on tilattava videosovittimet verkkokaupoista (mukaan lukien ulkomaiset) tai ostettava käytettyjä tavaroita. En muuten suosittele jälkimmäistä: kaivoslaitteet vanhenevat ja kuluvat huimaa vauhtia.

Avitossa he jopa myyvät kokonaisia ​​tiloja kryptovaluutan louhintaan.

Syitä on monia: jotkut kaivostyöntekijät ovat jo "pelaneet tarpeeksi" digitaalisen rahan louhinnalla ja päättäneet ryhtyä kannattavampiin operaatioihin kryptovaluutoilla (erityisesti pörssikaupankäyntiin), toiset ymmärsivät, että he eivät pystyneet kilpailemaan voimakkaiden kiinalaisten klustereiden kanssa, jotka toimivat tällä alueella. voimalaitosten pohjalta. Toiset taas vaihtoivat näytönohjaimista ASIC-kortteihin.

Markkinarako tuo kuitenkin vielä jonkin verran voittoa, ja jos aloitat näytönohjaimen käytön juuri nyt, ehdit vielä hypätä tulevaisuuteen lähtevän junan kelkkaan.

Toinen asia on, että tällä alalla on yhä enemmän pelaajia. Lisäksi digitaalisten kolikoiden kokonaismäärä ei kasva tästä. Päinvastoin, palkkio pienenee.

Joten kuusi vuotta sitten palkkio yhdestä Bitcoin-verkon lohkoketjusta oli yhtä suuri 50 kolikkoa, nyt se on vain 12,5 BTK. Laskelmien monimutkaisuus on kasvanut 10 tuhatta kertaa. Totta, itse Bitcoinin arvo on noussut monta kertaa tänä aikana.

2. Kuinka louhia kryptovaluutta näytönohjaimen avulla - vaiheittaiset ohjeet

Kaivosvaihtoehtoja on kaksi - yksin ja osana uima-allasta. Yksinlouhintaa on vaikea tehdä - sinulla on oltava valtava määrä hashratea(tehoyksikköä) niin, että aloitetuilla laskelmilla on onnistumisen todennäköisyys.

99 % kaivostyöläisistä työskentelee siellä altaat(engl. pool – pool) – laskentatehtävien jakamiseen osallistuvat yhteisöt. Yhteislouhinta eliminoi satunnaisuustekijän ja takaa vakaat voitot.

Eräs tuntemani kaivosmies sanoi tästä näin: Olen kaivannut 3 vuotta, jonka aikana en ole kommunikoinut kenenkään yksin louhineen kanssa.

Tällaiset etsijät ovat samanlaisia ​​kuin 1800-luvun kullankaivostyöläiset. Voit etsiä kimpuasi (meidän tapauksessamme Bitcoinia) vuosia, etkä silti löydä sitä. Toisin sanoen lohkoketjua ei koskaan suljeta, mikä tarkoittaa, että et saa mitään palkintoa.

"Yksinäisillä metsästäjillä" on hieman paremmat mahdollisuudet saada eetteriä ja joitain muita krypto-kolikoita.

Ainutlaatuisen salausalgoritmin vuoksi ETH:ta ei louhita erityisillä prosessoreilla (niitä ei ole vielä keksitty). Tähän käytetään vain näytönohjainkortteja. Lukuisat aikamme maanviljelijät selviävät edelleen Ethereumin ja muiden altcoinien kustannuksella.

Yksi näytönohjain ei riitä täysimittaisen maatilan luomiseen: 4 kpl - kaivostyöläisen "elämisen palkka". luottaa vakaaseen voittoon. Yhtä tärkeää on tehokas jäähdytysjärjestelmä videosovittimille. Älä myöskään unohda sellaista kuluerää kuin sähkölaskuja.

Vaiheittaiset ohjeet suojaavat sinua virheiltä ja nopeuttavat prosessin asennusta.

Vaihe 1. Valitse allas

Maailman suurimmat kryptovaluuttapoolit sijaitsevat Kiinassa sekä Islannissa ja Yhdysvalloissa. Muodollisesti näillä yhteisöillä ei ole valtion sitoutumista, mutta venäjänkieliset poolisivustot ovat harvinaisuus Internetissä.

Koska joudut todennäköisesti louhimaan Ethereumia näytönohjaimella, sinun on valittava yhteisö, joka osallistuu tämän valuutan laskemiseen. Vaikka Ethereum on suhteellisen nuori altcoin, siellä on monia altaita sen kaivostoimintaan. Tulosi suuruus ja sen vakaus riippuvat suurelta osin yhteisön valinnasta.

Valitsemme uima-altaan seuraavien kriteerien perusteella:

  • esitys;
  • työtunnit;
  • mainetta kryptovaluutan kaivostyöntekijöiden keskuudessa;
  • positiivisten arvostelujen läsnäolo riippumattomilla foorumeilla;
  • kätevyys nostaa rahaa;
  • komission koko;
  • voiton laskennan periaate.

Kryptovaluuttamarkkinoilla tapahtuu päivittäin muutoksia. Tämä koskee myös valuuttakurssien hyppyjä ja uuden digitaalisen rahan syntyä - haarukat bitcoin. Myös globaaleja muutoksia tapahtuu.

Niinpä hiljattain tuli tiedoksi, että eetteri siirtyy lähitulevaisuudessa täysin erilaiseen voitonjakojärjestelmään. Lyhyesti sanottuna Etherium-verkoston tulot tulevat tienaamaan kaivostyöläiset, joilla on "paljon ketseä", eli kolikoita, ja aloittelevien kaivostyöläisten on joko suljettava kauppa tai vaihdettava muuhun rahaan.

Mutta tällaiset "pienet asiat" eivät koskaan pysäyttäneet harrastajia. Lisäksi on ohjelma nimeltä Profitable Pool. Se seuraa automaattisesti tällä hetkellä tuottoisimpia altcoineja. Tarjolla on myös hakupalvelu itse altaille sekä niiden reaaliaikaisista arvioista.

Vaihe 2. Asenna ja määritä ohjelma

Kun olet rekisteröitynyt allasverkkosivustolle, sinun on ladattava erityinen kaivosohjelma - älä laske koodia manuaalisesti laskimen avulla. Tällaisia ​​ohjelmia on myös riittävästi. Bitcoinille tämä on - 50 kaivosmies tai CGMiner, lähetykseen - Ethminer.

Asennus vaatii huolellisuutta ja tiettyjä taitoja. Sinun on esimerkiksi tiedettävä, mitä skriptit ovat, ja osattava sovittaa ne niihin komentorivi Sinun tietokoneesi. Tekniset kohdat Suosittelen tarkistamaan asiaa harjoittavien kaivostyöntekijöiden kanssa, koska jokaisella ohjelmalla on omat asennus- ja konfigurointivihjeensä.

Vaihe 3. Rekisteröi lompakko

Jos sinulla ei vielä ole Bitcoin-lompakkoa tai Ethereum-tallennustilaa, sinun on rekisteröitävä ne. Lataamme lompakot virallisista verkkosivustoista.

Joskus uima-altaat itse tarjoavat apua tässä asiassa, mutta ei ilmaiseksi.

Vaihe 4. Aloita louhinta ja seuraa tilastoja

Jäljelle jää vain aloittaa prosessi ja odottaa ensimmäisiä kuitteja. Muista ladata apuohjelma, joka seuraa tietokoneesi pääkomponenttien tilaa - kuormitusta, ylikuumenemista jne.

Vaihe 5. Nosta kryptovaluutta

Tietokoneet toimivat kellon ympäri ja automaattisesti laskeen koodia. Sinun tarvitsee vain varmistaa, että kortit tai muut järjestelmät eivät epäonnistu. Kryptovaluutta virtaa lompakkoosi nopeudella, joka on suoraan verrannollinen hashraten määrään.

Kuinka muuntaa digitaalinen valuutta fiat-valuutaksi? Erillisen artikkelin arvoinen kysymys. Lyhyesti sanottuna eniten nopea tapa- valuutanvaihtopisteet. He ottavat prosenttiosuuden palveluistaan, ja sinun tehtäväsi on löytää kannattavin hinta vähimmäisprovisiolla. Ammattimainen vaihdinten vertailupalvelu auttaa sinua tässä.

– paras tällainen resurssi RuNetissä. Tämä seuranta vertailee yli 300 valuutanvaihtopisteen suorituskykyä ja löytää parhaat tarjoukset sinua kiinnostaville valuuttapareille. Lisäksi palvelu ilmoittaa kryptovaluuttavarannot kassakoneessa. Valvontalistat sisältävät vain todistettuja ja luotettavia vaihtopalveluita.

3. Mitä etsiä valittaessa näytönohjainta kaivostoimintaan

Sinun on valittava näytönohjain viisaasti. Ensimmäinen kohtaamasi tai jo tietokoneellasi oleva tulee myös minun, mutta tämä voima on merkityksetön jopa eettereille.

Tärkeimmät indikaattorit ovat seuraavat: suorituskyky (teho), virrankulutus, jäähdytys, ylikellotusnäkymät.

1) Teho

Kaikki on yksinkertaista täällä - mitä korkeampi prosessorin suorituskyky, sitä parempi hash-koodin laskeminen. Erinomaisen suorituskyvyn tarjoavat kortit, joiden muistikapasiteetti on yli 2 Gt. Ja valitse laitteet, joissa on 256-bittinen väylä. 128-bittiset eivät sovellu tähän tarkoitukseen.

2) Virrankulutus

Valta on tietysti mahtavaa - korkea hashrate ja kaikki se. Mutta älä unohda energiankulutuksen indikaattoreita. Jotkut tuotantotilat "syövät" niin paljon sähköä, että kustannukset tulevat tuskin takaisin tai eivät ollenkaan.

3) Jäähdytys

Vakiokortti koostuu 4-16 kortista. Se tuottaa liikaa lämpöä, joka on haitallista raudalle ja ei toivottavaa viljelijälle itselleen. Asuminen ja työskentely yhden huoneen huoneistossa ilman ilmastointia on lievästi sanottuna epämukavaa.

Laadukas prosessorin jäähdytys on onnistuneen kaivostoiminnan välttämätön edellytys

Siksi, kun valitset kaksi korttia, joilla on sama suorituskyky, aseta etusijalle se, jolla on sama suorituskyky vähemmän lämpötehon ilmaisin (TDP) . Radeon-kortit osoittavat parhaat jäähdytysparametrit. Nämä samat laitteet toimivat pidempään kuin kaikki muut kortit aktiivisessa tilassa ilman kulumista.

Lisäjäähdyttimet eivät ainoastaan ​​poista ylimääräistä lämpöä prosessoreista, vaan pidentävät myös niiden käyttöikää.

4) Ylikellotusmahdollisuus

Ylikellotus on näytönohjaimen suorituskyvyn pakotettu lisäys. Kyky "ylikellottaa korttia" riippuu kahdesta parametrista - GPU-taajuudet ja videomuistin taajuudet. Nämä ovat niitä, joita ylikellotat, jos haluat lisätä laskentatehoa.

Mitkä näytönohjaimet minun pitäisi hankkia? Tarvitset laitteita uusin sukupolvi tai ainakin grafiikkakiihdyttimiä, jotka on julkaistu aikaisintaan 2-3 vuotta sitten. Kaivostyöläiset käyttävät kortteja AMD Radeon, Nvidia, GeForce GTX.

Katso näytönohjainkorttien takaisinmaksutaulukko (tiedot ovat ajan tasalla vuoden 2017 lopusta):

4. Mistä ostaa näytönohjain kaivoskäyttöön – TOP 3 -kaupan katsaus

Kuten jo sanoin, kaivostoiminnan kasvavan suosion myötä näytönohjaimista on tullut niukka hyödyke. Ostaa haluttu laite, joudut käyttämään paljon aikaa ja vaivaa.

Arvostelumme auttaa sinua parhaat pisteet online-myynti.

1) TopComputer

Moskovan hypermarket, joka on erikoistunut tietokoneisiin ja kodinkoneisiin. Se on toiminut markkinoilla yli 14 vuotta ja toimittanut tavaroita kaikkialta maailmasta lähes valmistajan hinnoilla. Tarjolla on nopea toimituspalvelu, ilmainen moskovilaisille.

Kirjoitushetkellä kortteja on myynnissä AMD, Nvidia(8 Gb) ja muita kaivoskäyttöön soveltuvia lajikkeita.

2) Mybitcoinshop

Erikoiskauppa, kauppa yksinomaan kaivostavaroilla. Täältä löydät kaiken, mitä tarvitset kotitilan rakentamiseen - vaaditun kokoonpanon näytönohjaimet, virtalähteet, sovittimet ja jopa ASIC-kaivoskoneet (uuden sukupolven kaivostyöntekijöille). On maksullinen toimitus ja nouto Moskovan varastosta.

Yritys on toistuvasti saanut Venäjän federaation parhaan kaivostyöläisen myymälän epävirallisen tittelin. Nopea palvelu, ystävällinen asenne asiakkaisiin, edistyneet laitteet ovat menestyksen pääkomponentteja.

3) Ship Shop America

Tavaroiden osto ja toimitus Yhdysvalloista. Välittäjäyritys niille, jotka tarvitsevat todella ainutlaatuisia ja huippuluokan kaivostuotteita.

Johtavan peli- ja kaivoskäyttöön tarkoitettujen näytönohjainten valmistajan suora kumppani – Nvidia. Tavaran maksimi odotusaika on 14 päivää.

5. Kuinka lisätä tuloja kaivostoiminnasta näytönohjaimella - 3 hyödyllistä vinkkiä

Kärsimättömät lukijat, jotka haluavat aloittaa kaivostoiminnan heti ja saada tuloja huomisesta aamusta alkaen, kysyvät varmasti - kuinka paljon kaivostyöläiset tienaavat?

Tulot riippuvat laitteista, kryptovaluuttakurssista, poolin tehokkuudesta, maatilan tehosta, hashratesta ja monista muista tekijöistä. Jotkut onnistuvat saamaan jopa kuukausittain 70 000 ruplaa , muut ovat tyytyväisiä 10 dollaria viikolla. Tämä on epävakaa ja arvaamaton liiketoiminta.

Hyödylliset vinkit auttavat sinua kasvattamaan tulojasi ja optimoimaan kulujasi.

Jos louhit valuutan, jonka hinta nousee nopeasti, ansaitset enemmän. Esimerkiksi eetteri maksaa nyt noin 300 dollaria, Bitcoin – lisää 6000 . Mutta sinun on otettava huomioon nykyisen arvon lisäksi myös viikon kasvuvauhti.

Vihje 2. Valitse optimaalinen laitteisto kaivoslaskimella

Kaivoslaskin allassivustolla tai muussa erikoispalvelussa auttaa sinua valitsemaan optimaalisen ohjelman ja jopa näytönohjaimen kaivostoimintaan.

Ydintä ei voi koskaan olla liikaa...

Nykyaikaiset GPU:t ovat hirviömäisiä, nopeita petoja, jotka pystyvät pureskelemaan gigatavuja dataa. Ihminen on kuitenkin ovela ja, vaikka laskentateho kasvaa kuinka paljon, hän keksii yhä monimutkaisempia ongelmia, joten tulee hetki, jolloin joudumme valitettavasti myöntämään, että optimointia tarvitaan 🙁

Tässä artikkelissa kuvataan peruskäsitteitä, jotta on helpompi navigoida GPU-optimoinnin teoriassa ja perussäännöissä, jotta näitä käsitteitä joudutaan käsittelemään harvemmin.

Syitä siihen, miksi GPU:t ovat tehokkaita suurten, käsittelyä vaativien tietomäärien käsittelyssä:

  • niillä on erinomaiset ominaisuudet tehtävien rinnakkaiseen suorittamiseen (monet, monet prosessorit)
  • suuri muistin kaistanleveys

Muistin kaistanleveys- näin paljon tietoa - bitti tai gigatavu - voidaan siirtää aikayksikköä - sekuntia tai prosessorijaksoa kohden.

Yksi optimointitehtävistä on käyttää maksimaalista suorituskykyä - parantaa suorituskykyä läpijuoksu(ihannetapauksessa sen pitäisi olla yhtä suuri kuin muistin kaistanleveys).

Voit parantaa kaistanleveyden käyttöä seuraavasti:

  • lisää tiedon määrää - käytä kaistanleveyttä täysillä (esimerkiksi jokainen stream toimii float4:n kanssa)
  • vähentää latenssia – viivettä toimintojen välillä

Viive– aika, joka kuluu hetkestä, jolloin ohjain pyysi tiettyä muistisolua, ja hetken, jolloin data tuli prosessorin saataville käskyjen suorittamista varten. Itse viiveeseen emme voi vaikuttaa millään tavalla - nämä rajoitukset ovat olemassa laitteistotasolla. Tästä viiveestä johtuen prosessori voi samanaikaisesti palvella useita säikeitä - säie A on pyytänyt varaamaan sille muistia, säie B voi laskea jotain ja säie C voi odottaa kunnes pyydetty data saapuu sille.

Kuinka vähentää latenssia, jos synkronointia käytetään:

  • vähentää lankojen määrää lohkossa
  • lisätä lohkoryhmien määrää

GPU-resurssien täysi käyttö – GPU:n käyttöaste

Optimointia koskevissa huippukeskusteluissa termi esiintyy usein - gpu:n käyttöaste tai ytimen käyttöaste– Se kuvastaa näytönohjaimen resurssien käytön tehokkuutta. Haluaisin erikseen huomauttaa, että vaikka käytät kaikkia resursseja, tämä ei tarkoita, että käytät niitä oikein.

GPU:n laskentateho on satoja laskennallisesti nälkäisiä prosessoreita ohjelmaa luotaessa - ydin - kuorman jakamisen taakka laskee ohjelmoijan harteille. Virhe voi johtaa siihen, että suuri osa näistä arvokkaista resursseista jää käyttämättä. Nyt selitän miksi. Meidän on aloitettava kaukaa.

Muistutan teitä siitä loimesta ( loimi NVidia terminologiassa, aaltorintama – AMD-terminologiassa) on joukko säikeitä, jotka suorittavat samanaikaisesti saman ydintoiminnon prosessorissa. Ohjelmoijan lohkoiksi yhdistämät säikeet jaetaan loimiin säikeiden ajoittimella (jokaiselle moniprosessorille erikseen) - kun yksi loimi toimii, toinen odottaa muistipyyntöjen käsittelyä jne. Jos osa loimisäikeistä suorittaa vielä laskelmia, kun taas toiset ovat jo tehneet kaiken voitavansa, kyseessä on laskentaresurssin tehoton käyttö – jota kutsutaan kansanäänestyksellä tyhjäkäyntikapasiteettiksi.

Jokainen synkronointipiste, jokainen logiikkahaara voi luoda tällaisen tyhjäkäynnin tilanteen. Suurin ero (suorituslogiikan haarautuminen) riippuu loimen koosta. NVidia GPU:lla se on 32, AMD:llä 64.

Voit vähentää usean prosessorin seisokkiaikaa vääntymisen aikana seuraavasti:

  • minimoi esteen odotusaika
  • minimoida suorituslogiikan erot ytimen funktiossa

varten tehokas ratkaisu Tätä ongelmaa varten on järkevää selvittää, kuinka loimet muodostuvat (tapauksessa, jossa on useita ulottuvuuksia). Itse asiassa järjestys on yksinkertainen - ensin X, sitten Y ja lopuksi Z.

ydin käynnistetään lohkoilla, joiden koko on 64x16, langat on jaettu loimiin järjestyksessä X, Y, Z - ts. ensimmäiset 64 elementtiä jaetaan kahteen loimeen, sitten toiseen jne.

Ydin toimii 16x64-lohkoilla. Ensimmäinen ja toinen 16 elementtiä lisätään ensimmäiseen loimeen, kolmas ja neljäs - toiseen loimeen jne.

Kuinka vähentää eroa (muista, että haarautuminen ei aina ole syy kriittiseen suorituskyvyn heikkenemiseen)

  • kun vierekkäisillä virroilla on erilaiset suorituspolut - niitä pitkin on monia ehtoja ja siirtymiä - etsi tapoja uudelleenjärjestelyyn
  • etsi epätasapainoinen lankakuorma ja poista se päättäväisesti (tämä on silloin, kun meillä ei ole vain ehtoja, vaan näiden olosuhteiden vuoksi ensimmäinen säie laskee aina jotain, ja viides ei täytä tätä ehtoa ja on käyttämättömänä)

Näin saat kaiken irti GPU-resursseistasi

GPU-resursseilla on valitettavasti myös rajoituksensa. Ja tarkasti ottaen ennen ydintoiminnon käynnistämistä on järkevää määrittää rajat ja ottaa nämä rajat huomioon kuormaa jaettaessa. Miksi se on tärkeää?

Näytönohjaimet rajoittavat yhden moniprosessorin suorittamien säikeiden kokonaismäärää, yhden lohkon säikeiden enimmäismäärää, yhden prosessorin loimien enimmäismäärää, erityyppisiä muistia koskevia rajoituksia jne. Kaikkia näitä tietoja voidaan pyytää joko ohjelmallisesti, sopivan API:n kautta tai aiemmin SDK:n apuohjelmilla. (deviceQuery-moduulit NVidia-laitteille, CLIinfo - AMD-näytönohjainkorteille).

Yleinen käytäntö:

  • säielohkojen/työryhmien lukumäärän on oltava stream-prosessorien lukumäärän kerrannainen
  • lohkon/työryhmän koon on oltava loimikoon kerrannainen

On syytä ottaa huomioon, että ehdoton minimi on 3-4 loimi/tierintama pyörii samanaikaisesti jokaisessa prosessorissa. Samalla älä unohda laitteistorajoituksia!

Kaikkien näiden yksityiskohtien pitäminen päässäsi käy nopeasti tylsäksi, joten NVidia tarjosi gpu-käyttöasteen laskemiseen odottamattoman työkalun - Excel(!)-laskimen täynnä makroja. Siellä voit syöttää tietoja SM:n säikeiden enimmäismäärästä, rekisterien lukumäärästä ja stream-prosessorissa käytettävissä olevan (jaetun) kokonaismuistin koosta sekä käytetyistä toiminnon käynnistysparametreista - ja se näyttää resurssien käytön tehokkuuden prosenttiosuus (ja repit hiuksiasi irti tajuten, että kaikkien ytimien käyttämiseksi sinulta puuttuu rekistereitä).

Käyttötiedot:
http://docs.nvidia.com/cuda/cuda-c-best-practices-guide/#calculating-occupancy

GPU- ja muistitoiminnot

Näytönohjaimet on optimoitu 128-bittisille muistitoiminnoille. Nuo. ihannetapauksessa jokaisen muistinkäsittelyn tulisi ihanteellisesti muuttaa 4 neljän tavun arvoa kerrallaan. Ohjelmoijan suurin ongelma on se, että nykyaikaiset GPU-kääntäjät eivät osaa optimoida tällaisia ​​asioita. Tämä on tehtävä suoraan toimintokoodissa ja se tuo keskimäärin prosentin murto-osan suorituskyvyn lisäyksen. Muistipyyntöjen tiheydellä on paljon suurempi vaikutus suorituskykyyn.

Ongelma on tämä: jokainen pyyntö palauttaa datan, joka on kooltaan 128 bitin kerrannainen. Ja jokainen säie käyttää siitä vain neljänneksen (jos kyseessä on tavallinen nelitavuinen muuttuja). Kun vierekkäiset säikeet työskentelevät samanaikaisesti muistisoluissa peräkkäin sijaitsevien tietojen kanssa, tämä vähentää muistin hakujen kokonaismäärää. Tätä ilmiötä kutsutaan yhdistetyiksi luku- ja kirjoitusoperaatioiksi ( yhdistetty pääsy – hyvä! sekä lukea että kirjoittaa) – ja koodin oikealla organisoinnilla ( vaivaton pääsy vierekkäiseen muistiin – huono!) voivat parantaa suorituskykyä merkittävästi. Kun järjestät ytimen - muista - vierekkäisen pääsyn - yhden muistirivin elementteihin, sarakeelementtien kanssa työskentely ei ole enää niin tehokasta. Haluatko lisätietoja? Pidin tästä pdf- tai googlesta " muistin yhdistämistekniikat “.

Johtavan aseman "pullonkaula" -kategoriassa vallitsee toinen muistitoiminto - kopioida tietoja isäntämuistista GPU:lle . Kopioiminen ei tapahdu mitenkään, vaan ajurin ja järjestelmän erityisesti varaamalta muistialueelta: kun tulee tiedon kopiointipyyntö, järjestelmä kopioi ne ensin sinne ja lataa vasta sitten GPU:lle. Tiedonsiirtonopeutta rajoittaa väylän kaistanleveys PCI Express xN (jossa N on datalinjojen lukumäärä), joiden kautta nykyaikaiset näytönohjaimet kommunikoivat isännän kanssa.

Hitaan muistin tarpeeton kopioiminen isännässä on kuitenkin joskus kohtuuton hinta. Ratkaisuna on käyttää ns kiinnitetty muisti – erityisesti merkitty muistialue, jotta käyttöjärjestelmä ei pysty suorittamaan sen kanssa mitään toimenpiteitä (esimerkiksi pudota sitä swap/move-kohtaan oman harkintansa mukaan jne.). Tiedonsiirto isännästä näytönohjaimelle tapahtuu ilman osallistumista käyttöjärjestelmä- asynkronisesti, kautta DMA (suora pääsy muistiin).

Ja lopuksi vähän lisää muistista. Jaettu muisti moniprosessorilla on yleensä järjestetty muistipankkeihin, jotka sisältävät 32-bittisiä sanoja - dataa. Pankkien määrä vaihtelee hyvän perinteen mukaan GPU-sukupolvesta toiseen - 16/32 Jos jokainen säie käyttää erillistä datapankkia, kaikki on kunnossa. Muuten saamme useita luku-/kirjoituspyyntöjä yhdelle pankille ja saamme ristiriidan ( jaetun muistipankin ristiriita). Tällaiset ristiriitaiset puhelut sarjotetaan ja suoritetaan siksi peräkkäin eikä rinnakkain. Jos kaikki säikeet käyttävät yhtä pankkia, käytetään "lähetys" -vastausta ( lähettää) eikä ristiriitaa ole. On olemassa useita tapoja käsitellä tehokkaasti pääsyristiriitoja, pidin siitä kuvaus tärkeimmistä tekniikoista, joilla päästään eroon muistipankkien pääsykonflikteista – .

Kuinka nopeuttaa matemaattisia operaatioita? Muista se:

  • Kaksinkertaiset tarkkuuslaskelmat ovat suuren kuormituksen operaatio fp64 >> fp32:lla
  • vakiot muodossa 3.13 koodissa tulkitaan oletusarvoisesti fp64:ksi, jos 3.14f ei ole erikseen määritelty
  • Matematiikan optimoimiseksi olisi hyvä idea tarkistaa oppaista, onko kääntäjällä lippuja
  • Valmistajat sisällyttävät SDK:ihinsa ominaisuuksia, jotka hyödyntävät laitteen ominaisuuksia suorituskyvyn saavuttamiseksi (usein siirrettävyyden kustannuksella).

CUDA-kehittäjien on järkevää kiinnittää erityistä huomiota konseptiin cuda-virta mahdollistaa useiden ytimen toimintojen suorittamisen yhdellä laitteella kerralla tai tietojen asynkronisen kopioinnin isännästä laitteeseen toimintojen suorittamisen aikana. OpenCL ei vielä tarjoa tällaisia ​​toimintoja :)

Romu profilointia varten:

NVifia Visual Profiler on mielenkiintoinen apuohjelma, joka analysoi sekä CUDA- että OpenCL-ytimiä.

P.S. Laajempana optimointioppaana voin suositella kaikenlaista googlaamista parhaiden käytäntöjen opas OpenCL:lle ja CUDA:lle.

  • ,