CUDA Academy · Pelajaran

Pembacaan Terkonsolidasi versus Berstride

Mengapa pemetaan thread ke alamat sangat penting.

Pelajaran 2 dari 413 langkah

Pembacaan Terkonsolidasi versus Berstride 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.

Semuanya Bergantung pada Pemetaan

Penggabungan akses bergantung pada alamat yang disentuh setiap thread. Pemetaan dari thread ke alamat menentukan apakah satu transaksi dapat melayani seluruh warp.

Pola Terkoalesensi

Ketika thread yang berdekatan membaca alamat yang berdekatan, warp mencakup satu rangkaian yang berurutan. Tata letak yang rapi ini merupakan akses terkoalesensi.

int i = blockIdx.x * blockDim.x + threadIdx.x;
float v = data[i];

Mengapa Ini Lebih Efisien

Thread 0 mengakses indeks 0, thread 1 mengakses indeks 1, dan seterusnya. Semua 32 alamat berada dalam satu baris yang selaras, sehingga GPU hanya memerlukan satu transaksi.

Memasukkan Langkah

Langkah adalah jarak tetap antara alamat yang disentuh oleh thread-thread berturut-turut. Begitu jarak tersebut lebih besar dari satu elemen, penggabungan akses mulai terganggu.

float v = data[i * stride];

Pembacaan Berlangkah Menyebar

Dengan langkah 2, thread 0 membaca 0, thread 1 membaca 2, dan thread 2 membaca 4. Kini warp mencakup memori dua kali lebih luas, sehingga memerlukan lebih banyak transaksi.

Biayanya Meningkat

Gandakan langkahnya dan Anda kurang lebih menggandakan jumlah baris yang disentuh. Langkah yang besar dapat membuat warp memerlukan banyak transaksi, sementara hanya menggunakan sebagian kecil dari setiap baris.

Jebakan Umum

Memberikan satu kolom penuh kepada setiap thread dalam matriks berurutan berdasarkan baris menciptakan langkah yang sangat besar. Kodenya tampak rapi, tetapi diam-diam menyebarkan setiap warp.

float v = matrix[threadIdx.x * width + row];

Transpose Pemetaan

Sering kali solusinya cukup dengan menukar indeks mana yang berubah paling cepat terhadap thread. Biarkan thread yang berurutan menelusuri memori yang berurutan, maka pembacaan kembali tergabung.

float v = matrix[row * width + threadIdx.x];

Offset Juga Merugikan

Bahkan pola yang terkoalesensi dapat terganggu jika dimulai di tengah baris. Offset yang tidak selaras menggeser warp melewati batas, sehingga satu pembacaan terpecah menjadi dua.

Berpikirlah dalam Satuan Warp

Untuk menilai suatu pola, jangan membayangkan satu thread saja. Bayangkan semua 32 lajur sekaligus, lalu tanyakan berapa banyak baris yang dicakup oleh alamat-alamatnya secara bersama-sama. 🔍

Aturan Praktis

Buat indeks yang berubah paling cepat mengikuti threadIdx.x. Kebiasaan sederhana ini membuat sebagian besar pembacaan global Anda terkoalesensi tanpa usaha tambahan.

Pemeriksaan Singkat

Pilih pola akses yang paling baik terkoalesensi.

Ringkasan

Anda telah melihat bahwa pembacaan terkoalesensi menjaga elemen-elemen yang berdekatan tetap bersama, sedangkan langkah menyebarkannya ke berbagai baris. Biarkan threadIdx.x mengendalikan indeks yang berubah paling cepat. 🎉

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 “Pembacaan Terkonsolidasi versus Berstride” gratis?

Ya — teks lengkap “Pembacaan Terkonsolidasi versus Berstride” 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 “Pembacaan Terkonsolidasi versus Berstride”?

Mengapa pemetaan thread ke alamat sangat penting. 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 “Pembacaan Terkonsolidasi versus Berstride” 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. Apa Itu Transaksi Memori
  2. Pembacaan Terkonsolidasi versus Berstride
  3. Larik Struktur versus Struktur Larik
  4. Ukur Bandwidth Efektif
← Kembali ke CUDA Academy