CUDA Academy · Oppitunti

Sivulukittu muisti cudaMallocHostilla

Sivulukitut puskurit nopeita DMA-siirtoja varten.

Oppitunti 2/413 vaihetta

Sivulukittu muisti cudaMallocHostilla on ilmainen CUDA Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/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.

Tutustu lukittuun muistiin

Lukittu muisti on isäntämuistia, jota käyttöjärjestelmä lupaa olla koskaan siirtämättä tai sivuttamatta. Koska sen fyysinen osoite pysyy samana, GPU voi lukea sitä suoraan.

Toinen nimi on page-locked

Näet usein termiä page-locked käytettävän lukitun muistin synonyymina. Molemmat tarkoittavat samaa: sivut on lukittu paikoilleen, joten sivutusta ei voi tapahtua.

Varaa se oikein

Pyydä CUDA:lta lukittua muistia käyttämällä funktiota cudaMallocHost. Se palauttaa tavallisen isäntäosoittimen, jota voit lukea ja johon voit kirjoittaa aivan kuten mihin tahansa C++-taulukkoon.

float* h_data;
cudaMallocHost(&h_data, N * sizeof(float));

Käytä sitä tavalliseen tapaan

Palautettu osoitin toimii kuten mikä tahansa isäntäpuskuri, joten CPU-koodisi pysyy ennallaan. Täytät sen ja luet siitä tietoja aivan kuten ennenkin.

for (int i = 0; i < N; ++i) h_data[i] = i * 1.0f;

Ei enää välivaihetta

Koska sivut eivät voi siirtyä, ajuri ohittaa piilossa tehdyn välivaiheen kopioinnin. GPU lukee tiedot suoraan puskuristasi, joten kaksinkertainen kopiointi poistuu.

Nopeammat siirrot

Hyöty näkyy todellisena siirtokaistana. Lukitusta muistista tehdyt siirrot saavuttavat usein yhteyden huippunopeuden ja voivat olla suunnilleen kaksi kertaa sivutettavaa muistia nopeampia.

Vapauta se oikein

Lukittu muisti vaatii oman vastaavan vapautustoimintonsa. Käytä funktiota cudaFreeHost, älä tavallista free-funktiota, jotta vältät kaatumisen ja muistivuodon.

cudaFreeHost(h_data);

Muisti ei ole ilmaista

Lukittuja sivuja ei voi sivuttaa, joten ne varaavat todellista RAM-muistia. Jos lukitset liikaa muistia, muulle järjestelmälle jää liian vähän käyttökelpoista muistia.

Varaus on hitaampaa

Sivujen lukitseminen vaatii työtä, joten cudaMallocHost varaa muistia hitaammin kuin malloc. Käytä samaa lukittua puskuria uudelleen useissa siirroissa sen sijaan, että varaisit sen aina uudelleen.

Todellinen supervoima

Nopeuden lisäksi lukittu muisti mahdollistaa aidosti asynkroniset kopioinnit. Ilman sitä cudaMemcpyAsync ei voi limittyä minkään muun toiminnon kanssa.

Milloin sitä kannattaa käyttää

Lukitse puskurit, joita siirrät usein tai jotka syöttävät suoratoistoja. Yksittäiseen pienen taulukon kopiointiin tavallinen malloc riittää mainiosti. 🙂

Pikatarkistus

Varaat puskurin cudaMallocHost-funktiolla. Miten se pitäisi vapauttaa?

Kertaus

cudaMallocHost lukitsee isäntämuistin sivut, joten GPU lukee ne suoraan. Tämä nopeuttaa kopiointeja ja mahdollistaa asynkronisen limittymisen. Vapauta muisti aina funktiolla cudaFreeHost. 🔒

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 ”Sivulukittu muisti cudaMallocHostilla” ilmainen?

Kyllä – oppitunnin ”Sivulukittu muisti cudaMallocHostilla” 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 ”Sivulukittu muisti cudaMallocHostilla”?

Sivulukitut puskurit nopeita DMA-siirtoja varten. 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 2/4.

Kuinka kauan ”Sivulukittu muisti cudaMallocHostilla”-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. Miksi sivuttamaton muisti on hidasta
  2. Sivulukittu muisti cudaMallocHostilla
  3. cudaMemcpyAsync streamissa
  4. Kaksoispuskuroinnin putki
← Takaisin: CUDA Academy