printf dalam Kernel
Lihat output daripada urutan peranti.
printf dalam Kernel ialah pelajaran CUDA Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran CUDA Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus CUDA Academy merangkumi sejumlah 4 pelajaran.
Mencetak dari GPU
Percaya atau tidak, anda boleh memanggil printf terus di dalam kernel. Ini cara paling mudah untuk melihat perkara yang dilakukan oleh jalur anda. 👀
__global__ void hi() {
printf("Hello from the GPU\n");
}Setiap Jalur Mencetak
Ingat bahawa kernel berjalan dalam setiap jalur, jadi satu baris printf dilaksanakan sekali bagi setiap jalur. Lancarkan 256 jalur dan anda akan mendapat 256 baris.
hi<<<1, 256>>>(); // 256 hellosKenal Pasti Setiap Jalur
Sertakan threadIdx dalam mesej anda supaya anda boleh membezakan jalur. Jika tidak, output itu hanyalah dinding baris yang serupa.
printf("thread %d\n", threadIdx.x);Susunan Output Tidak Tetap
Jalur berjalan secara selari, jadi susunan cetakan tidak dapat diramalkan. Jangan bergantung pada baris yang tiba mengikut urutan indeks.
Rentetan Format Berfungsi
printf peranti menyokong penentu format biasa seperti %d, %f dan %s. Rasanya sama seperti printf hos.
printf("i=%d val=%f\n", i, x[i]);Output Pergi ke Penimbal
Output peranti disimpan sementara dalam penimbal GPU dan dikosongkan ke konsol anda kemudian, bukannya sebaik sahaja printf berjalan. Itu perkara biasa.
Anda Mesti Menunggu untuk Melihatnya
Oleh sebab pelancaran berlaku secara tak segerak, anda tidak akan melihat cetakan sehingga GPU selesai. Panggil cudaDeviceSynchronize untuk mengosongkan penimbal tersebut.
hi<<<1, 4>>>();
cudaDeviceSynchronize();Hadkan Cetakan Berat
Mencetak daripada jutaan jalur memenuhi penimbal. Hadkan cetakan supaya hanya jalur 0, atau hanya beberapa jalur, yang mencetak.
if (threadIdx.x == 0) printf("block done\n");Sangat Baik untuk Penyahpepijatan Pantas
printf ialah alat penyahpepijatan anda yang terpantas: masukkan satu untuk memeriksa indeks atau nilai, sahkan pepijat, kemudian buangkannya.
printf("i=%d should be < n=%d\n", i, n);Ia Memperlahankan Kernel
Cetakan berat menjejaskan prestasi dengan teruk. Gunakannya untuk mencari masalah, kemudian padamkannya sebelum mengukur kelajuan sebenar.
GPU Lama Mungkin Berbeza
printf peranti memerlukan keupayaan pengiraan yang agak moden (2.0 dan ke atas). Hampir semua GPU semasa menyokongnya dengan baik.
Semakan Pantas
Semak pengetahuan anda tentang printf peranti.
Ringkasan: printf Kernel
Gunakan printf untuk melihat keadaan dalam jalur, tambahkan threadIdx untuk membezakannya, segerakkan untuk mengosongkan output, dan buangkannya sebelum mengukur masa. Alat yang berguna! 🎉
Pelajari C++ dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Soalan Lazim
Adakah pelajaran “printf dalam Kernel” percuma?
Ya — teks penuh “printf dalam Kernel” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus CUDA Academy, tingkat taraf kepada CoddyKit PRO. Kursus CUDA Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “printf dalam Kernel”?
Lihat output daripada urutan peranti. Anda berlatih CUDA Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan CUDA Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran CUDA Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “printf dalam Kernel” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran CUDA Academy ini?
Ya. Setiap pelajaran CUDA Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Anatomi Kernel
- Pelancaran Kurungan Tiga Sudut
- printf dalam Kernel
- Penjelasan cudaDeviceSynchronize