CUDA Academy · Oppitunti

Isäntäpuolen kytkeminen

Varaa, kopioi, käynnistä, kopioi takaisin ja vapauta.

Oppitunti 2/413 vaihetta

Isäntäpuolen kytkeminen 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.

Myös isäntäkoneella on tehtävä

Kernel suorittaa laskennan, mutta isäntäkoneen CPU valmistelee kaiken. Sen tehtävänä on varata muisti, kopioida tiedot laitteelle, käynnistää kernel, kopioida tulokset takaisin ja vapauttaa muisti. 🧩

Kaksi osoitinryhmää

Pidät CPU:n taulukoille isäntäosoittimia ja GPU-puskureille erillisiä laiteosoittimia. Yleinen nimeämistapa on h_A ja d_A.

float *h_A, *h_B, *h_C;
float *d_A, *d_B, *d_C;

Täytä syöte CPU:lla

Valmistele ensin tiedot tavallisessa isäntäkoneen muistissa. Tässä alustat vain h_A- ja h_B-muuttujat arvoilla, jotka GPU laskee myöhemmin yhteen.

for (int i = 0; i < n; i++) {
    h_A[i] = i; h_B[i] = 2 * i;
}

Varaa muisti laitteelta

GPU tarvitsee omat puskurinsa, joten kutsu cudaMalloc-toimintoa jokaiselle taulukolle. Huomaa, että koko ilmoitetaan tavuina eli alkioiden määrä kerrottuna sizeof(float)-arvolla.

size_t bytes = n * sizeof(float);
cudaMalloc(&d_A, bytes);

Kopioi syötteet laitteelle

Siirrä syötetaulukot GPU:lle cudaMemcpy-toiminnolla ja HostToDevice-suunnalla. Kernel näkee vain tiedot, jotka sijaitsevat laitteella.

cudaMemcpy(d_A, h_A, bytes, cudaMemcpyHostToDevice);
cudaMemcpy(d_B, h_B, bytes, cudaMemcpyHostToDevice);

Päätä käynnistyksen muoto

Valitse säikeiden määrä lohkoa kohden ja laske sitten, kuinka monta lohkoa tarvitaan kaikkien alkioiden kattamiseen. Pyöristäminen ylöspäin takaa, että jokainen alkio saa säikeen.

int threads = 256;
int blocks = (n + threads - 1) / threads;

Käynnistä kernel

Käynnistä kernel nyt kolmoiskulmasulkeilla ja anna sille laiteosoittimesi. Kutsu palauttaa heti, kun GPU jatkaa työskentelyä.

vecAdd<<<blocks, threads>>>(d_A, d_B, d_C, n);

Kopioi tulos takaisin

Kun kernel on valmis, tuo C takaisin cudaMemcpyDeviceToHost-toiminnolla. Tämä kopiointi odottaa myös ensin käynnistyksen valmistumista.

cudaMemcpy(h_C, d_C, bytes, cudaMemcpyDeviceToHost);

Vapauta laitteen muisti

GPU:n muistia ei kerätä automaattisesti, joten vapauta jokainen puskuri cudaFree-toiminnolla. Jos ohitat tämän, muisti vuotaa prosessin päättymiseen asti.

cudaFree(d_A); cudaFree(d_B); cudaFree(d_C);

Järjestys on ehdoton

Noudata aina samaa järjestystä: varaa, kopioi laitteelle, käynnistä, kopioi takaisin, vapauta. Jos vaihdat vaiheiden järjestystä, kernel lukee vanhentuneita tai virheellisiä tietoja.

Isäntäkoneen koodi on tavallista C++:aa

Huomaa, että isäntäkoneen puoli on tavallista C++-koodia ja muutama cuda-kutsu. Kernelin käynnistystä lukuun ottamatta erityistä kääntäjän taikaa ei tarvita.

Pikatarkistus

Mitä on tapahduttava ennen kuin voit käynnistää vecAdd-kernelin?

Kertaus

Olet kytkenyt isäntäpuolen kokonaisuudessaan: kaksi osoitinjoukkoa, cudaMalloc, kopiointi laitteelle, käynnistys, kopiointi takaisin ja cudaFree. Tämä on jokaisen ytimen tarvitsema perusrakenne. ✅

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 ”Isäntäpuolen kytkeminen” ilmainen?

Kyllä – oppitunnin ”Isäntäpuolen kytkeminen” 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 ”Isäntäpuolen kytkeminen”?

Varaa, kopioi, käynnistä, kopioi takaisin ja vapauta. 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 ”Isäntäpuolen kytkeminen”-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. Vektorisumman ydin
  2. Isäntäpuolen kytkeminen
  3. Tarkista tulos CPU:lla
  4. Mittaa ensimmäinen nopeutuksesi
← Takaisin: CUDA Academy