CUDA Academy · Oppitunti

Synkronointivirheiden havaitseminen synccheckillä

Divergoituvat __syncthreads-kutsut ja vaaratilanteet

Oppitunti 4/413 vaihetta

Synkronointivirheiden havaitseminen synccheckillä on ilmainen CUDA Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/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.

Esteen ehdot

__syncthreads-este toimii vain, jos jokainen lohkon säie saavuttaa sen. Jos osa säikeistä ohittaa sen, toiminta muuttuu määrittelemättömäksi. ⚠️

Eriytyvät esteet

Esteen kutsuminen haarassa, jonka osa säikeistä ohittaa, on eriytyvä synkronointi. Juuri tällaiset vaaratilanteet synccheck-työkalu on suunniteltu havaitsemaan.

Tutustukaa synccheckiin

Suorittakaa compute-sanitizerin synccheck-työkalu havaitaksenne __syncthreadsin ja siihen liittyvien esteiden virheellisen tai eriytyvän käytön.

compute-sanitizer --tool synccheck ./tile

Virheellinen ehdollinen synkronointi

Tässä vain osa säikeistä kutsuu estettä, jolloin muut jäävät jälkeen. synccheck ilmoittaa tämän eriytyväksi __syncthreads-kutsuksi.

if (tid < half) {
    __syncthreads();
}

Oikea toimintatapa

Siirtäkää este haaran ulkopuolelle, jotta kaikki säikeet saavuttavat sen yhdessä, ja jättäkää vain suojattu työ ehdolliseksi.

if (tid < half) {
    sum += tile[tid];
}
__syncthreads();

Esteet silmukoissa

Jokaisen säikeen on suoritettava sama määrä esteitä, joten silmukka, jonka säikeestä riippuva kierrosmäärä sisältää sisäisen synkronoinnin, on vaarallinen.

Varhaiset return-kutsut ovat riskialttiita

Ennen estettä varhaisen return-kutsun suorittava säie ei koskaan saavu esteelle, joten synccheck ilmoittaa muiden säikeiden jäävän odottamaan.

Raportin lukeminen

synccheck ilmoittaa esteen ja eriytyneet säikeet, joten voitte jäljittää, mikä haara tai return-kutsu rikkoi ehdot.

Myös warp-tason synkronointi

synccheck tarkistaa myös __syncwarp-maskit ja ilmoittaa, jos säie osallistuu maskilla, joka ei vastaa sen lanea.

Lisätkää rivitiedot

Kääntäkää ohjelma käyttämällä -lineinfo-valitsinta, jotta synccheck voi osoittaa täsmällisen estekutsun pelkän kernelin nimen sijaan.

nvcc -lineinfo tile.cu -o tile

Yksi työkalu suoritusta kohti

Suorittakaa synccheck omana ajonaan erillään memcheckistä ja racecheckistä, koska kukin sanitizer-työkalu kohdistuu eri virheluokkaan.

Pikatarkistus

Minkä ongelman synccheck-työkalu erityisesti havaitsee?

Kertaus

Opitte esteen ehdot, suorititte synccheck-työkalun ja korjasitte eriytyvät synkronoinnit siirtämällä esteet haarojen ulkopuolelle. Lohkonne pysyy tahdissa. 🙌

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 ”Synkronointivirheiden havaitseminen synccheckillä” ilmainen?

Kyllä – oppitunnin ”Synkronointivirheiden havaitseminen synccheckillä” 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 ”Synkronointivirheiden havaitseminen synccheckillä”?

Divergoituvat __syncthreads-kutsut ja vaaratilanteet 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 4/4.

Kuinka kauan ”Synkronointivirheiden havaitseminen synccheckillä”-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 askellus cuda-gdb:llä
  2. Vuotojen etsiminen memcheckillä
  3. Kilpailutilanteiden etsiminen racecheckillä
  4. Synkronointivirheiden havaitseminen synccheckillä
← Takaisin: CUDA Academy