0Pricing
CUDA Academy · Pelajaran

Memori Bersama Dinamis

Tentukan ukuran memori bersama saat peluncuran.

Memori Bersama Dinamis adalah pelajaran CUDA Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.

Saat Ukuran Belum Diketahui

Terkadang ukuran array bersama bergantung pada nilai saat runtime, sehingga Anda tidak dapat menetapkannya secara tetap. CUDA mengatasi hal ini dengan memori bersama dinamis.

Deklarasi extern

Anda mendeklarasikannya dengan extern __shared__ dan tanda kurung siku kosong. Tidak ada ukuran dalam kode, sehingga compiler membiarkannya terbuka.

extern __shared__ float sdata[];

Ukuran Ditetapkan Saat Peluncuran

Anda meneruskan jumlah byte sebagai parameter peluncuran ketiga, di antara jumlah thread dan tanda kurung penutup. Dengan begitu, ukuran ditetapkan saat runtime.

kern<<<blocks, threads, n * sizeof(float)>>>();

Selalu Dalam Satuan Byte

Kesalahan klasik: argumen ketiga tersebut adalah ukuran dalam byte, bukan elemen. Selalu kalikan jumlah elemen Anda dengan sizeof agar hasilnya benar.

Nilai Bawaan adalah Nol Byte

Jika Anda melewatkan argumen ketiga, CUDA mencadangkan memori bersama dinamis sebanyak nol byte. Membaca sdata setelah itu merupakan perilaku yang tidak terdefinisi, jadi jangan pernah melupakannya.

Statis dan Dinamis Bersamaan

Anda dapat menggunakan kedua jenisnya dalam satu kernel. Array statis mempertahankan ukuran tetap, sedangkan blok dinamis menyesuaikan diri dengan argumen peluncuran.

Satu Buffer, Banyak Array

Memori bersama dinamis memberi Anda satu buffer datar. Untuk menampung beberapa array, Anda harus membaginya sendiri menggunakan offset pointer. 🔪

Membagi dengan Offset

Arahkan array kedua ke bagian tertentu di dalam buffer. Pastikan setiap bagian tetap selaras agar nilai float tidak pernah dimulai di tengah kata.

extern __shared__ float buf[];
float* a = buf;
float* b = &buf[blockDim.x];

Mengapa Menggunakan Dinamis

Dengan demikian, satu kernel yang telah dikompilasi dapat melayani banyak ukuran tile. Anda dapat menyesuaikan ukuran memori bersama pada setiap peluncuran tanpa mengompilasi ulang untuk setiap kasus.

Perhatikan Batas Perangkat Keras

Anda tetap tidak boleh melebihi maksimum per blok. Jika meminta terlalu banyak byte saat peluncuran, kernel akan gagal dimulai.

Memilih Alokasi Besar

Untuk melampaui batas bawaan pada GPU yang lebih baru, Anda harus mengaktifkannya dengan cudaFuncSetAttribute sebelum peluncuran. Jika tidak, permintaan besar akan ditolak.

Pemeriksaan Singkat

Mari kita periksa cara menentukan ukuran memori bersama dinamis.

Rangkuman

Anda telah mempelajari bahwa array extern __shared__ memperoleh ukuran byte saat peluncuran, dapat dibagi menjadi beberapa array, dan tunduk pada batas per blok. Kursus selesai! 🎉

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Memori Bersama Dinamis” gratis?

Ya — teks lengkap “Memori Bersama Dinamis” 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 “Memori Bersama Dinamis”?

Tentukan ukuran memori bersama saat peluncuran. 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 4 dari 4.

Berapa lama pelajaran “Memori Bersama Dinamis” 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. Deklarasikan Larik __shared__
  2. Sinkronkan dengan __syncthreads
  3. Hindari Konflik Bank
  4. Memori Bersama Dinamis
← Kembali ke CUDA Academy