Isäntäpuolen kytkeminen
Varaa, kopioi, käynnistä, kopioi takaisin ja vapauta.
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. ✅
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
- Vektorisumman ydin
- Isäntäpuolen kytkeminen
- Tarkista tulos CPU:lla
- Mittaa ensimmäinen nopeutuksesi