CUDA Academy · Oppitunti

Kernelien käynnistäminen kernelistä

Laitetason rekursio ja tarkentaminen

Oppitunti 1/413 vaihetta

Kernelien käynnistäminen kernelistä on ilmainen CUDA Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/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.

Kernelit käynnistävät kerneleitä

Dynaamisen rinnakkaisuuden avulla suoritettava GPU-kernel voi käynnistää itse toisen kernelin ilman paluuta CPU:lle. 🚀

Sama syntaksi laitteella

Käynnistys näyttää samalta kuin isäntäkoneelta tehtävä käynnistys: tutut kolmoissulkeet toimivat suoraan laitekoodissa.

__global__ void child(int* d);
__global__ void parent(int* d) {
    child<<<1, 32>>>(d);
}

Laske tuleva laskenta

Isäntäsäie päättää suorituksen aikana, kuinka paljon työtä tarvitaan, ja käynnistää sitten täsmälleen oikean kokoisen lapsikernelin.

child<<<blocks, threads>>>(buf);

Suunniteltu epäsäännöllisille muodoille

Tämä on hyödyllistä, kun työ riippuu datasta: säie, joka löytää lisää tehtävää, voi käynnistää lisää säikeitä heti.

Rekursio laitteella

Kernel voi jopa käynnistää itsensä, jolloin GPU:lla voidaan käyttää todellista rekursiota hajota ja hallitse -ongelmissa.

__global__ void solve(int lo, int hi) {
    if (hi - lo > 1) solve<<<1, 2>>>(lo, mid);
}

Isäntä- ja lapsivirrat

Jokainen lapsen käynnistys liittyy streamiin. Oletuksena lapset käyttävät isäntäsäikeen lohkon streamia, mutta voitte nimetä oman streamin.

child<<<g, b, 0, myStream>>>(d);

Synkronointi kernelin sisällä

Isäntä voi odottaa lapsiaan kutsumalla laitekoodista cudaDeviceSynchronize-funktiota ja lukea sen jälkeen niiden tulokset.

child<<<1, 64>>>(d);
cudaDeviceSynchronize();

Lapsen implisiittinen valmistuminen

Ilman manuaalista odotustakin kaikkien käynnistettyjen lasten taataan valmistuvan ennen kuin isäntäkernel itse palaa.

Molempien näkemä muisti

Isäntä ja lapsi jakavat globaalin muistin, joten välitetyt osoittimet pysyvät kelvollisina. Paikalliset ja jaetut tiedot eivät kuitenkaan ylitä käynnistysrajaa.

Kääntäkää laitekäynnistystä varten

Teidän on käännettävä koodi käyttäen relocatable device code -asetusta ja linkitettävä laitteen ajonaikainen ympäristö, jotta sisäkkäiset käynnistykset toimivat.

nvcc -rdc=true -lcudadevrt prog.cu

Käynnistyksillä on enimmäissyvyys

Sisäkkäisyyttä rajoitetaan: käynnistyssyvyydellä on enimmäisarvo, ja liian syvälle mentäessä palautetaan virhe uusien kernelien sijaan.

Pikatarkistus

Mistä dynaamisesti käynnistetty kernel saa alkunsa?

Kertaus: laitekäynnistykset

Kernel voi käynnistää muita kerneleitä samalla kolmoissuljesyntaksilla ja jopa itsensä. Jakakaa globaali muisti ja kääntäkää koodi asetuksella -rdc=true. Hienosti tehty! 🎉

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 ”Kernelien käynnistäminen kernelistä” ilmainen?

Kyllä – oppitunnin ”Kernelien käynnistäminen kernelistä” 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 ”Kernelien käynnistäminen kernelistä”?

Laitetason rekursio ja tarkentaminen 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 1/4.

Kuinka kauan ”Kernelien käynnistäminen kernelistä”-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. Kernelien käynnistäminen kernelistä
  2. Milloin dynaaminen rinnakkaisuus kannattaa
  3. Työn tallentaminen graafiksi
  4. Graafien toistaminen yleiskustannusten pienentämiseksi
← Takaisin: CUDA Academy