CUDA Academy · Pelajaran

Hubungkan Sisi Host

Alokasikan, salin, luncurkan, salin kembali, lalu bebaskan.

Pelajaran 2 dari 413 langkah

Hubungkan Sisi Host adalah pelajaran CUDA Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar CUDA Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus CUDA Academy mencakup 4 pelajaran total.

Host Juga Memiliki Tugas

Kernel melakukan perhitungan, tetapi CPU host menyiapkan semuanya. Tugasnya adalah mengalokasikan, menyalin masuk, menjalankan, menyalin kembali, dan membebaskan. 🧩

Dua Kelompok Penunjuk

Anda menyimpan penunjuk host untuk larik CPU dan penunjuk perangkat terpisah untuk buffer GPU. Kebiasaan umum adalah menamainya h_A dan d_A.

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

Isi Input di CPU

Pertama, siapkan data di memori host biasa. Di sini Anda cukup menginisialisasi h_A dan h_B dengan nilai yang nanti akan dijumlahkan oleh GPU.

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

Alokasikan di Perangkat

GPU memerlukan buffer sendiri, jadi panggil cudaMalloc untuk setiap larik. Perhatikan bahwa ukuran dinyatakan dalam byte, yang dihitung sebagai jumlah dikalikan sizeof(float).

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

Salin Input ke GPU

Pindahkan larik input ke GPU dengan cudaMemcpy dan arah HostToDevice. Kernel hanya dapat melihat data yang berada di perangkat.

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

Tentukan Bentuk Peluncuran

Pilih jumlah thread per blok, lalu hitung jumlah blok yang mencakup semua elemen. Pembulatan ke atas menjamin setiap elemen memperoleh thread.

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

Jalankan Kernel

Sekarang jalankan kernel dengan sintaks kurung sudut tiga, sambil meneruskan penunjuk perangkat Anda. Pemanggilan ini segera kembali sementara GPU bekerja.

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

Salin Hasil Kembali

Setelah kernel selesai, bawa C kembali dengan cudaMemcpyDeviceToHost. Penyalinan ini juga menunggu peluncuran selesai terlebih dahulu.

cudaMemcpy(h_C, d_C, bytes, cudaMemcpyDeviceToHost);

Bebaskan Memori Perangkat

Memori GPU tidak dikumpulkan secara otomatis, jadi bebaskan setiap buffer dengan cudaFree. Melewatkan langkah ini menyebabkan kebocoran memori hingga proses berakhir.

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

Urutannya Sangat Penting

Selalu ikuti urutan yang sama: alokasikan, salin masuk, jalankan, salin kembali, bebaskan. Menukar langkah dapat membuat kernel membaca data lama atau tidak valid.

Kode Host adalah C++ Biasa

Perhatikan bahwa sisi host hanyalah C++ biasa ditambah beberapa pemanggilan cuda. Tidak ada keajaiban kompilator khusus selain peluncuran kernel.

Pemeriksaan Singkat

Apa yang harus dilakukan sebelum Anda dapat menjalankan kernel vecAdd?

Ringkasan

Anda telah menghubungkan sisi host secara menyeluruh: dua set pointer, cudaMalloc, menyalin data naik, meluncurkan kernel, menyalin data kembali, dan cudaFree. Inilah kode dasar yang menggerakkan setiap kernel. ✅

Gratis untuk memulai

Belajar C++ dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
30
Pelajaran
120

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Hubungkan Sisi Host” gratis?

Ya — teks lengkap “Hubungkan Sisi Host” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus CUDA Academy, upgrade ke CoddyKit PRO. Kursus CUDA Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Hubungkan Sisi Host”?

Alokasikan, salin, luncurkan, salin kembali, lalu bebaskan. Kamu berlatih CUDA Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai CUDA Academy?

Tidak diperlukan pengalaman sebelumnya. CUDA Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Hubungkan Sisi Host” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran CUDA Academy ini?

Ya. Setiap pelajaran CUDA Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Kernel Penjumlahan Vektor
  2. Hubungkan Sisi Host
  3. Verifikasi Hasil pada CPU
  4. Ukur Percepatan Pertama Anda
← Kembali ke CUDA Academy