0Pricing
CUDA Academy · Pelajaran

Uraikan Perulangan dengan #pragma unroll

Kurangi beban perulangan dan buka peluang ILP.

Uraikan Perulangan dengan #pragma unroll 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.

Perulangan Memiliki Biaya Tersembunyi

Setiap iterasi perulangan menghabiskan pekerjaan untuk penghitung, perbandingan, dan percabangan. Pekerjaan administrasi ini disebut loop overhead, dan terakumulasi dalam perulangan bagian dalam yang sering dijalankan.

Dampak Unrolling

Loop unrolling menyalin isi perulangan beberapa kali per iterasi sehingga perulangan berjalan lebih sedikit. Anda melakukan pekerjaan yang sama dengan lebih sedikit penghitungan dan percabangan.

for (int i = 0; i < n; i += 2) {
    out[i]     = in[i]     * 2;
    out[i + 1] = in[i + 1] * 2;
}

Biarkan Kompilator yang Melakukannya

CUDA memberi Anda petunjuk agar Anda tidak perlu menyalin kode secara manual. Letakkan #pragma unroll tepat sebelum perulangan, lalu kompilator akan melakukan unrolling untuk Anda.

#pragma unroll
for (int i = 0; i < 4; i++)
    sum += a[i];

Pilih Faktor Tertentu

Anda dapat meminta jumlah yang tepat dengan menulis angka setelah pragma. #pragma unroll 4 melakukan unrolling perulangan empat iterasi sekaligus.

#pragma unroll 4
for (int i = 0; i < n; i++)
    acc += w[i] * x[i];

Menonaktifkan Unrolling

Terkadang unrolling penuh membuat kode membengkak atau menghabiskan register. Menulis #pragma unroll 1 memberi tahu kompilator untuk membiarkan perulangan tetap seperti yang ditulis.

#pragma unroll 1
for (int i = 0; i < n; i++)
    process(i);

Jumlah Iterasi Konstan Membantu

Unrolling bekerja paling baik ketika jumlah iterasi diketahui saat kompilasi. trip count tetap memungkinkan kompilator mengembangkan seluruh perulangan menjadi kode berurutan.

Unrolling Menampilkan ILP

Iterasi yang disalin sering kali tidak memiliki ketergantungan satu sama lain. Hal itu memberi penjadwal lebih banyak instruksi independent untuk dijalankan tumpang tindih dan menyembunyikan latensi tanpa biaya tambahan.

Lebih Sedikit Percabangan, Jalur Lebih Cepat

Setelah perulangan di-unroll, perangkat keras lebih jarang memeriksa condition keluar. Lebih sedikit percabangan berarti aliran instruksi yang lebih lancar dan mudah diprediksi.

Pertukaran Register

Lebih banyak nilai aktif per iterasi berarti penggunaan register yang lebih besar. Unrolling agresif dapat menyebabkan register tumpah dan malah menurunkan okupansi, jadi hasilnya tidak selalu lebih baik.

Ukuran Kode Juga Bertambah

Setiap salinan hasil unrolling memperbesar kernel. Kode yang lebih besar dapat membebani instruction cache, sehingga melakukan unrolling penuh pada perulangan besar dapat menjadi bumerang pada perangkat keras nyata.

Ukur Sebelum Memercayainya

Unrolling adalah saran, bukan sihir. Selalu biarkan profiler memastikan bahwa faktor yang dipilih benar-benar membuat kernel dan GPU Anda berjalan lebih cepat.

Pemeriksaan Cepat

Anda ingin kompilator melakukan unrolling penuh pada perulangan kecil dengan jumlah tetap. Apa yang Anda tulis?

Rangkuman: Tukarkan Penghitungan dengan Kecepatan

Anda mempelajari bahwa #pragma unroll mengurangi loop overhead dan menampilkan ILP, tetapi perlu memperhatikan biayanya pada register dan ukuran kode. Ukur setiap faktor untuk memastikannya. 🧩

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Uraikan Perulangan dengan #pragma unroll” gratis?

Ya — teks lengkap “Uraikan Perulangan dengan #pragma unroll” 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 “Uraikan Perulangan dengan #pragma unroll”?

Kurangi beban perulangan dan buka peluang ILP. 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 “Uraikan Perulangan dengan #pragma unroll” 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. Paralelisme Tingkat Instruksi
  2. Uraikan Perulangan dengan #pragma unroll
  3. Pemuatan Tervektorisasi dengan float4
  4. Tekanan Register dan Spill
← Kembali ke CUDA Academy