Pemuatan Tervektorisasi dengan float4
Transaksi yang lebih lebar untuk bandwidth yang lebih besar
Pemuatan Tervektorisasi dengan float4 adalah pelajaran CUDA Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.
Pindahkan Lebih Banyak per Instruksi
Pemuatan biasa mengambil satu nilai setiap kali. vectorized load mengambil beberapa nilai yang bersebelahan dalam satu instruksi yang lebih lebar, sehingga lebih banyak pekerjaan dilakukan per permintaan.
Mengenal float4
CUDA menyediakan tipe vektor bawaan. float4 mengemas empat float menjadi satu paket 16 byte yang dapat Anda muat atau simpan bersama-sama.
float4 v = make_float4(1, 2, 3, 4);
float first = v.x; // also .y .z .wSatu Pemuatan, Empat Float
Membaca float4 dari memori mengambil empat float dalam satu transaksi. Hal ini mengurangi jumlah memory instructions yang harus diterbitkan thread sebanyak empat kali.
float4 a = reinterpret_cast<float4*>(in)[i];Tafsirkan Ulang Pointer
Untuk menggunakan pemuatan vektor pada larik float biasa, Anda perlu melakukan cast pada pointer. reinterpret_cast memungkinkan Anda membaca byte yang sama sebagai elemen float4.
float4* in4 = reinterpret_cast<float4*>(in);
float4 chunk = in4[idx];Penyelarasan Diperlukan
float4 harus berada pada batas 16 byte. Jika data tidak aligned dengan benar, pemuatan tersebut ilegal dan kernel Anda dapat mengalami kerusakan atau membaca data sampah.
cudaMalloc Menyelaraskan untuk Anda
Kabar baik: buffer dari cudaMalloc diselaraskan setidaknya hingga 256 byte. Jadi, larik perangkat yang baru dialokasikan aman dibaca sebagai float4 sejak awal.
Lebih Sedikit Permintaan, Lebih Banyak Bandwidth
Pemuatan yang lebih lebar berarti lebih sedikit permintaan tertunda untuk data yang sama. Hal ini dapat meningkatkan bandwidth yang dicapai ketika kernel dibatasi oleh memori, bukan matematika.
Indekskan dengan Vektor, Bukan Float
Dengan float4, setiap thread kini mencakup empat elemen. index global Anda melangkah melalui slot float4, sehingga jumlah thread total berkurang empat kali.
int i = blockIdx.x * blockDim.x + threadIdx.x;
float4 d = in4[i]; // covers 4 floatsLebar Vektor Lainnya
float4 bukan satu-satunya pilihan. Tipe seperti float2 dan int4 memberi Anda pemuatan berukuran 8 atau 16 byte, sehingga Anda dapat memilih lebar yang sesuai dengan data Anda.
Tangani Sisa Elemen
Jika panjang array bukan kelipatan empat, tangani elemen sisa dengan perulangan skalar biasa setelah bagian yang divektorisasi.
Register yang Digunakan Bertambah
float4 menampung empat nilai, sehingga menggunakan lebih banyak register per utas. Seperti biasa, pastikan peningkatan bandwidth lebih besar daripada penurunan okupansi.
Pemeriksaan Cepat
Anda menafsirkan ulang array float sebagai float4, tetapi kernel mengalami kerusakan. Mengapa?
Ringkasan: Lebih Lebar Lebih Cepat
Anda telah mempelajari bahwa pemuatan float4 memuat empat float sekaligus, sehingga mengurangi instruksi dan meningkatkan bandwidth. Pastikan data tetap selaras dan tangani elemen yang tersisa. 📦
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pemuatan Tervektorisasi dengan float4” gratis?
Ya — teks lengkap “Pemuatan Tervektorisasi dengan float4” 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 “Pemuatan Tervektorisasi dengan float4”?
Transaksi yang lebih lebar untuk bandwidth yang lebih besar 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 3 dari 4.
Berapa lama pelajaran “Pemuatan Tervektorisasi dengan float4” 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
- Paralelisme Tingkat Instruksi
- Uraikan Perulangan dengan #pragma unroll
- Pemuatan Tervektorisasi dengan float4
- Tekanan Register dan Spill