CUDA Academy · Oppitunti

Ballot- ja vote-funktiot

Kysely predikaateille koko warpissa.

Oppitunti 3/413 vaihetta

Ballot- ja vote-funktiot on ilmainen CUDA Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu CUDA Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. CUDA Academy-kurssilla on yhteensä 4 oppituntia.

Lanet voivat äänestää

Datan siirtämisen lisäksi warp voi vastata kyllä–ei-kysymyksiin yhdessä. Vote-intrinsit sallivat jokaisen lanen jakaa tosi–epätosi-predikaattinsa yhtenä edullisena operaationa.

Tutustukaa ballot_synciin

Joustavin vote-operaatio on ballot_sync. Se palauttaa 32-bittisen luvun, jossa bitti i on 1 täsmälleen silloin, kun lanen i predikaatti oli tosi.

unsigned bits = __ballot_sync(mask, pred);

Yksi bitti lanea kohden

Palautettu kokonaisluku on pieni warpin bitmap. Bitin i lukeminen kertoo, äänestikö lane i toden puolesta; kaikki tiedot on pakattu yhteen rekisteriin.

Laskekaa tosi-arvot

Haluatteko tietää, kuinka moni lane vastasi kyllä? Laskekaa ballot-tuloksen ykkösbitit. popc laskee asetetut bitit ja antaa warpin tosi-äänien määrän heti.

int yes = __popc(__ballot_sync(mask, pred));

Kaikki tai jokin

Kaksi oikotietä vastaa yleisiin kysymyksiin. all_sync palauttaa toden vain, jos kaikki lanet ovat samaa mieltä, kun taas any_sync palauttaa toden, jos vähintään yksi lane on sitä mieltä.

bool every = __all_sync(mask, pred);

Any tarkoittaa vähintään yhtä

Käyttäkää any_sync-kutsua ennenaikaisiin lopetuksiin: jos jokin lane löysi osuman, koko warp voi reagoida yhdessä ilman lanejen läpikäyntiä yksi kerrallaan.

bool found = __any_sync(mask, pred);

Tietovirran tiivistäminen

Ballot mahdollistaa compaction-käsittelyn: kukin lane päättää, säilyttääkö se alkionsa, äänestää, ja bitmap kertoo, mihin lanejen tulee kirjoittaa pakatussa tulostaulukossa.

Oman paikan löytäminen

Sijoittaakseen arvonsa lane laskee omasta kohdastaan alempana olevat tosi-bitit. Tämä ballot-tuloksen prefix count on sen indeksi tiivistetyssä tuloksessa.

int slot = __popc(bits & ((1u << lane) - 1));

Valitkaa johtajalane

Joskus yhden lanen tulee suorittaa jaettu työ. Ballotin alin asetettu bitti, joka löydetään ffs-kutsulla, on luonteva johtaja, josta koko warp voi olla samaa mieltä.

Välittäkää aina maski

Shufflejen tavoin vote-intrinsit ottavat aktiivisen mask-arvon. Passiiviset lanet tuottavat 0-bitin, joten välittäkää oikea joukko, jotta poissa olevia laneja ei lasketa mukaan.

Edullinen koordinointi

Vote-operaatiot maksavat yhden käskyn eivätkä käytä muistia. Niiden avulla warp voi coordinate-koordinoida päätöksiä paljon atomisia operaatioita tai jaetun muistin lippuja edullisemmin.

Pikatarkistus

Palauttakaa mieleenne, mitä ballot_sync antaa kullekin lanelle.

Kertaus

Kyselitte warpin tilaa ballot- ja vote-operaatioilla: laskitte tosi-arvot, tarkistitte kaikki tai jonkin ja tiivistitte tietovirtoja edullisesti. Seuraavaksi: cooperative groups joustavaan synkronointiin. ✨

Aloita maksutta

Opi C++ tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
30
Oppitunnit
120

Usein kysytyt kysymykset

Onko oppitunti ”Ballot- ja vote-funktiot” ilmainen?

Kyllä – oppitunnin ”Ballot- ja vote-funktiot” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko CUDA Academy-kurssin, päivitä CoddyKit PROhon. CUDA Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Ballot- ja vote-funktiot”?

Kysely predikaateille koko warpissa. Harjoittelet CUDA Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni CUDA Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin CUDA Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Ballot- ja vote-funktiot”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä CUDA Academy-oppitunnilla?

Kyllä. Jokainen CUDA Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. War pit, lanet ja maskit
  2. __shfl_down_sync pelkistyksiin
  3. Ballot- ja vote-funktiot
  4. Cooperative Groups
← Takaisin: CUDA Academy