Kernel Penjumlahan Vektor
Satu thread menjumlahkan satu pasangan elemen.
Kernel Penjumlahan Vektor adalah pelajaran CUDA Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.
Gagasan Utama
Penjumlahan vektor adalah kernel pertama yang sempurna: setiap output cukup berupa C[i] = A[i] + B[i]. Setiap elemen independen, sehingga semuanya dapat dijalankan sekaligus. 🚀
Satu Thread, Satu Elemen
Caranya sederhana: tetapkan satu thread untuk satu elemen. Alih-alih mengulang seluruh larik, ribuan thread masing-masing melakukan satu penjumlahan secara paralel.
Menandainya sebagai Kernel
Fungsi yang berjalan di GPU adalah kernel, yang ditandai dengan kualifikasi __global__. Kata tersebut memberi tahu nvcc bahwa kode ini dijalankan di perangkat.
__global__ void vecAdd(const float* A, const float* B, float* C, int n) {
// body comes next
}Kernel Mengembalikan void
Kernel selalu memiliki tipe pengembalian void. Tidak ada nilai yang dikembalikan ke CPU, jadi hasil harus ditulis ke memori perangkat.
Menemukan Indeks Thread Ini
Setiap thread menghitung indeks globalnya sendiri agar mengetahui elemen yang harus ditangani. Rumus klasiknya menggabungkan koordinat blok dan thread.
int i = blockIdx.x * blockDim.x + threadIdx.x;Satu Baris Pekerjaan
Setelah thread mengetahui indeksnya, yaitu i, pekerjaan sebenarnya hanya satu baris. Tanpa perulangan, tanpa percabangan, cukup satu penjumlahan per thread.
C[i] = A[i] + B[i];Mengapa Pemeriksaan Batas Penting
Biasanya Anda menjalankan lebih banyak thread daripada jumlah elemen, jadi tambahkan penjaga if (i < n). Tanpanya, thread tambahan akan membaca melewati batas larik dan menyebabkan kerusakan. 🛡️
if (i < n) {
C[i] = A[i] + B[i];
}Kernel Lengkap
Jika digabungkan, seluruh kernel vecAdd hanya terdiri atas beberapa baris. Kodenya kecil, tetapi berjalan pada ribuan thread sekaligus.
__global__ void vecAdd(const float* A, const float* B, float* C, int n) {
int i = blockIdx.x * blockDim.x + threadIdx.x;
if (i < n) C[i] = A[i] + B[i];
}Penunjuk Berada di Perangkat
Penunjuk A, B, dan C harus menunjuk ke memori perangkat. Jika Anda memberikan penunjuk host biasa kepada kernel, kernel akan membaca data yang tidak bermakna atau mengalami kesalahan.
Tandai Input sebagai const
A dan B hanya dibaca, jadi tandai keduanya sebagai const float*. Hal ini mendokumentasikan maksud kode dan memungkinkan kompilator mengoptimalkan input hanya-baca dengan lebih leluasa.
Tidak Perlu Keadaan Bersama
Karena setiap thread menyentuh elemen yang berbeda, tidak ada kondisi balapan dan tidak ada kunci. Independensi inilah yang membuat GPU sangat unggul untuk tugas ini.
Pemeriksaan Singkat
Mengapa kernel penjumlahan vektor memerlukan penjaga if (i < n)?
Ringkasan
Anda telah menulis kernel pertama: __global__ void vecAdd, satu thread per elemen, indeks global, dan pemeriksaan batas. Kode sederhana dengan paralelisme besar. 🎉
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Kernel Penjumlahan Vektor” gratis?
Ya — teks lengkap “Kernel Penjumlahan Vektor” 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 “Kernel Penjumlahan Vektor”?
Satu thread menjumlahkan satu pasangan elemen. 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 1 dari 4.
Berapa lama pelajaran “Kernel Penjumlahan Vektor” 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
- Kernel Penjumlahan Vektor
- Hubungkan Sisi Host
- Verifikasi Hasil pada CPU
- Ukur Percepatan Pertama Anda