Meluncurkan Kernel dari dalam Kernel
Rekursi dan penyempurnaan di sisi perangkat
Meluncurkan Kernel dari dalam Kernel 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.
Kernel yang Meluncurkan Kernel
Dengan paralelisme dinamis, kernel GPU yang sedang berjalan dapat meluncurkan kernel lain sendiri tanpa perlu kembali ke CPU. 🚀
Sintaks Sama, di Sisi Perangkat
Peluncurannya tampak identik dengan peluncuran dari host: tanda kurung sudut tiga yang sudah dikenal dapat digunakan langsung di dalam kode perangkat.
__global__ void child(int* d);
__global__ void parent(int* d) {
child<<<1, 32>>>(d);
}Hitung Komputasi Masa Depan
Thread induk menentukan saat runtime seberapa banyak pekerjaan yang diperlukan, lalu membuat kernel child dengan ukuran yang tepat.
child<<<blocks, threads>>>(buf);Dirancang untuk Bentuk Tidak Beraturan
Fitur ini sangat berguna ketika pekerjaan bergantung pada data: thread yang menemukan pekerjaan tambahan dapat meluncurkan lebih banyak thread saat itu juga.
Rekursi di Sisi Perangkat
Sebuah kernel bahkan dapat meluncurkan dirinya sendiri, sehingga Anda memperoleh rekursi sungguhan di GPU untuk masalah bagi-dan-taklukkan.
__global__ void solve(int lo, int hi) {
if (hi - lo > 1) solve<<<1, 2>>>(lo, mid);
}Aliran Induk dan Anak
Setiap peluncuran child bergabung ke sebuah aliran. Secara bawaan, child menggunakan aliran blok thread induk, tetapi Anda dapat menentukan aliran sendiri.
child<<<g, b, 0, myStream>>>(d);Sinkronisasi di Dalam Kernel
Induk dapat menunggu child-nya dengan cudaDeviceSynchronize yang dipanggil dari kode perangkat, lalu membaca hasilnya.
child<<<1, 64>>>(d);
cudaDeviceSynchronize();Penyelesaian Child Secara Implisit
Bahkan tanpa menunggu secara manual, semua child yang diluncurkan dijamin selesai sebelum kernel induk itu sendiri selesai.
Memori yang Dapat Dilihat Keduanya
Induk dan child berbagi memori global, sehingga pointer yang diteruskan tetap valid. Namun, data lokal dan data bersama tidak melewati peluncuran.
Kompilasi untuk Peluncuran Perangkat
Anda harus mengompilasi dengan kode perangkat yang dapat direlokasi dan menautkan runtime perangkat agar peluncuran bertingkat benar-benar berfungsi.
nvcc -rdc=true -lcudadevrt prog.cuBatas Peluncuran yang Ketat
Penyarangan memiliki batas: terdapat maksimum kedalaman peluncuran, dan jika terlalu dalam, sistem mengembalikan kesalahan, bukan kernel tambahan.
Pemeriksaan Singkat
Dari mana kernel yang diluncurkan secara dinamis berasal?
Ringkasan: Peluncuran Perangkat
Sebuah kernel dapat meluncurkan kernel lain dengan sintaks kurung siku tiga yang sama, bahkan meluncurkan dirinya sendiri. Bagikan memori global dan kompilasikan dengan -rdc=true. Kerja bagus! 🎉
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 “Meluncurkan Kernel dari dalam Kernel” gratis?
Ya — teks lengkap “Meluncurkan Kernel dari dalam Kernel” 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 “Meluncurkan Kernel dari dalam Kernel”?
Rekursi dan penyempurnaan di sisi perangkat 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 “Meluncurkan Kernel dari dalam Kernel” 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
- Meluncurkan Kernel dari dalam Kernel
- Kapan Paralelisme Dinamis Menguntungkan
- Menangkap Pekerjaan ke dalam Graf
- Memutar Ulang Graf untuk Mengurangi Overhead