CUDA Academy · Pelajaran

printf dalam Kernel

Lihat output daripada urutan peranti.

Pelajaran 3 daripada 413 langkah

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 hellos

Kenal 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! 🎉

Percuma untuk bermula

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

  1. Anatomi Kernel
  2. Pelancaran Kurungan Tiga Sudut
  3. printf dalam Kernel
  4. Penjelasan cudaDeviceSynchronize
← Kembali ke CUDA Academy