CUDA Academy · Pelajaran

Mengapa Memori Pageable Lambat

Gunakan penyangga perantara di balik malloc biasa.

Pelajaran 1 dari 413 langkah

Mengapa Memori Pageable Lambat adalah pelajaran CUDA Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.

Tempat Data Anda Berada

Buffer C++ biasa dari malloc berada di memori host yang dapat dipindahkan. Tampaknya gratis, tetapi GPU tidak dapat menyalin darinya secara langsung, dan detail kecil ini mengurangi kecepatan Anda.

Arti Memori yang Dapat Dipindahkan

Memori disebut dapat dipindahkan ketika sistem operasi dapat memindahkan halamannya atau menukarnya ke disk kapan saja. Fleksibel, tetapi menyulitkan perangkat keras yang memerlukan alamat tetap.

GPU Berkomunikasi melalui DMA

GPU mengambil data menggunakan DMA, yaitu transfer perangkat keras langsung yang memerlukan alamat fisik yang tidak berubah. Halaman yang dapat dipindahkan tidak memenuhi jaminan ini, sehingga tidak dapat digunakan secara langsung.

Langkah Penahapan Tersembunyi

Untuk mengatasinya, driver terlebih dahulu menyalin buffer Anda yang dapat dipindahkan ke buffer penahapan tersembunyi, lalu mengirimkannya ke GPU. Anda membayar penyalinan tambahan yang tidak pernah Anda tulis. 😮

Dua Penyalinan, Bukan Satu

Jadi, satu cudaMemcpy dari memori yang dapat dipindahkan sebenarnya adalah dua penyalinan: dari host ke penahapan, lalu dari penahapan ke perangkat. Pekerjaan ganda inilah yang membuat transfer tersebut terasa lambat.

malloc Biasa

Inilah buffer yang pertama kali biasanya digunakan semua orang. Buffer ini berfungsi, tetapi setiap transfer dari h_data diam-diam melewati jalur penahapan tersebut.

float* h_data = (float*)malloc(N * sizeof(float));
cudaMemcpy(d_data, h_data, bytes, cudaMemcpyHostToDevice);

Mengapa OS Peduli

OS menjaga agar memori dapat dipindahkan sehingga dapat mengalokasikan RAM secara berlebihan dan melayani banyak program sekaligus. Kemudahan inilah yang menghalangi GPU membaca halaman Anda secara langsung.

Bandwidth yang Hilang

Transfer memori yang dapat dipindahkan sering kali hanya mencapai setengah dari bandwidth puncak sambungan Anda. Penyalinan ke penahapan menghabiskan siklus CPU dan lalu lintas memori yang seharusnya dapat digunakan untuk transfer sebenarnya.

Juga Menghalangi Tumpang Tindih

Karena penyalinan ke penahapan bersifat sinkron, transfer memori yang dapat dipindahkan tidak dapat benar-benar tumpang tindih dengan kernel. Anda kehilangan teknik asinkron yang membuat stream berguna.

Saat Dampaknya Tetap Terasa

Untuk satu penyalinan kecil, tidak ada yang menyadarinya. Namun, dalam perulangan yang mengirim data pada setiap iterasi, biaya penahapan terus terakumulasi dan diam-diam mendominasi waktu eksekusi Anda.

Perbaikannya Segera Hadir

Solusinya adalah meminta CUDA menyediakan penyangga yang tidak dapat dipindahkan ke penyimpanan sekunder, yang disebut memori terkunci. GPU membacanya secara langsung, tanpa penahapan dan tanpa penyalinan ganda.

Pemeriksaan Singkat

Mengapa transfer dari memori biasa yang dapat dipindahkan ke penyimpanan sekunder lebih lambat dari yang seharusnya?

Rangkuman

Penyangga yang dapat dipindahkan ke penyimpanan sekunder dapat berpindah, sehingga GPU tidak dapat mengaksesnya secara langsung melalui DMA. Pengandar menahapkannya terlebih dahulu, sehingga penyalinan menjadi dua kali lipat. Perbaikan yang akan dibahas adalah memori terkunci. 🚀

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 “Mengapa Memori Pageable Lambat” gratis?

Ya — teks lengkap “Mengapa Memori Pageable Lambat” 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 “Mengapa Memori Pageable Lambat”?

Gunakan penyangga perantara di balik malloc biasa. 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 1 dari 4.

Berapa lama pelajaran “Mengapa Memori Pageable Lambat” 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. Mengapa Memori Pageable Lambat
  2. Memori Terkunci dengan cudaMallocHost
  3. cudaMemcpyAsync dalam Aliran
  4. Pipeline Penyangga Ganda
← Kembali ke CUDA Academy