Ballot- ja vote-funktiot
Kysely predikaateille koko warpissa.
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. ✨
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
- War pit, lanet ja maskit
- __shfl_down_sync pelkistyksiin
- Ballot- ja vote-funktiot
- Cooperative Groups