Dynaaminen jaettu muisti
Määritä jaetun muistin koko käynnistyksen yhteydessä.
Dynaaminen jaettu muisti 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.
Kun kokoa ei vielä tiedetä
Joskus jaetun taulukon koko riippuu ajonaikaisesta arvosta, joten sitä ei voi määrittää kiinteästi koodissa. CUDA ratkaisee tämän käyttämällä dynaamista jaettua muistia.
extern-määritys
Se määritetään käyttämällä extern __shared__ -määritystä ja tyhjiä hakasulkeita. Koodiin ei merkitä kokoa, joten kääntäjä jättää sen avoimeksi.
extern __shared__ float sdata[];Koko määritetään käynnistettäessä
Välitätte tavumäärän kolmantena käynnistysparametrina säiemäärän ja sulkevien hakasulkeiden välissä. Näin koko määritetään ajonaikaisesti.
kern<<<blocks, threads, n * sizeof(float)>>>();Koko ilmoitetaan aina tavuina
Tyypillinen virhe: kolmas argumentti ilmaisee koon tavuina, ei alkioina. Kertokaa määrä aina sizeof-arvolla, jotta koko tulee oikein.
Oletusarvo on nolla tavua
Jos jätätte kolmannen argumentin pois, CUDA varaa dynaamista jaettua muistia nolla tavua. Tällöin sdata:n lukeminen on määrittelemätöntä toimintaa, joten älkää unohtako argumenttia.
Staattinen ja dynaaminen yhdessä
Voitte käyttää molempia tyyppejä samassa kernelissä. Staattisten taulukoiden koot pysyvät kiinteinä, kun taas dynaaminen osa mukautuu käynnistysargumenttiin.
Yksi puskuri, monta taulukkoa
Dynaaminen jaettu muisti antaa käyttöön yhden litteän puskurin. Jos haluatte säilyttää siinä useita taulukkoja, jakakaa puskuri itse osoitinsiirtojen avulla. 🔪
Jakaminen siirtojen avulla
Osoittakaa toinen taulukko puskurin keskelle. Varmistakaa kuitenkin, että jokainen osa on kohdistettu oikein, jotta float ei ala keskeltä sanaa.
extern __shared__ float buf[];
float* a = buf;
float* b = &buf[blockDim.x];Miksi käyttää dynaamista muistia
Sen ansiosta yksi käännetty kernel voi käsitellä monia tilen kokoja. Voitte säätää jaetun muistin koon jokaisessa käynnistyksessä ilman uudelleenkääntämistä.
Huomioikaa laitteiston rajoitus
Ette silti voi ylittää lohkokohtaista enimmäiskokoa. Jos pyydätte käynnistyksessä liian monta tavua, kernel ei yksinkertaisesti käynnisty.
Suurten varausten käyttöönotto
Jos haluatte ylittää uudempien GPU:iden oletusrajan, teidän on otettava toiminto käyttöön cudaFuncSetAttribute-kutsulla ennen käynnistystä. Muutoin suuret pyynnöt hylätään.
Pikatarkistus
Tarkistetaan, miten dynaamisen jaetun muistin koko määritetään.
Kertaus
Opitte, että extern __shared__ -taulukoiden tavukoko määritetään käynnistyksessä, ne voidaan jakaa useiksi taulukoiksi ja niiden on noudatettava lohkokohtaista rajoitusta. Kurssi on suoritettu! 🎉
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 ”Dynaaminen jaettu muisti” ilmainen?
Kyllä – oppitunnin ”Dynaaminen jaettu muisti” 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 ”Dynaaminen jaettu muisti”?
Määritä jaetun muistin koko käynnistyksen yhteydessä. 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 ”Dynaaminen jaettu muisti”-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
- Määritä __shared__-taulukoita
- Synkronoi __syncthreads-funktiolla
- Vältä muistipankkikonflikteja
- Dynaaminen jaettu muisti