CUDA Academy · Pelajaran

Mempartisi Pekerjaan di Seluruh GPU

Strategi dekomposisi domain

Pelajaran 2 dari 413 langkah

Mempartisi Pekerjaan di Seluruh GPU 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.

Banyak GPU, Satu Pekerjaan

Dua GPU dapat menyelesaikan pekerjaan dalam waktu kira-kira setengahnya, tetapi hanya jika pekerjaan tersebut dibagi. Tantangannya adalah mempartisi: menentukan GPU mana yang menangani bagian tertentu.

Dekomposisi Ranah

Strategi klasiknya adalah membagi data, bukan kode. Dengan dekomposisi ranah, setiap GPU mendapat potongan array atau kisi sendiri untuk diproses.

Membagi Array

Untuk array 1D, cukup bagi panjangnya. Berikan potongan elemen pertama kepada GPU 0, potongan berikutnya kepada GPU 1, dan seterusnya.

int chunk = n / count;

Menghitung Setiap Ofset

Setiap GPU memerlukan posisi awal potongannya. Ofset untuk perangkat d adalah d dikalikan ukuran potongan, yang menandai tempat data perangkat tersebut dimulai.

int offset = d * chunk;

Alokasikan per Perangkat

Setiap GPU memerlukan buffer sendiri. Tetapkan perangkat, lalu cudaMalloc ruang hanya untuk potongan kartu tersebut, bukan untuk seluruh array.

cudaSetDevice(d);
cudaMalloc(&dptr[d], chunk * sizeof(float));

Salin Hanya Potongannya

Unggah hanya bagian yang dimiliki setiap GPU. Salin dari host[offset] ke buffer perangkat tersebut agar tidak ada kartu yang menyimpan data yang tidak akan disentuhnya.

Luncurkan pada Setiap Perangkat

Lakukan perulangan pada GPU, tetapkan masing-masing sebagai perangkat saat ini, lalu luncurkan kernel pada potongannya. Peluncuran ini bersifat asinkron, sehingga semua kartu mulai bekerja secara paralel.

Kumpulkan Kembali Hasilnya

Setelah kernel selesai, salin keluaran setiap perangkat kembali ke posisi yang tepat dalam array host menggunakan ofset-nya. Potongan-potongan tersebut kembali membentuk satu hasil.

Perhatikan Sisa Elemen

Jika n tidak dapat dibagi rata, GPU terakhir harus menangani sisa elemen. Berikan elemen tambahan kepadanya agar tidak ada bagian array yang terlewati.

int last = n - offset;

Perhatikan Batasnya

Operasi stencil dan tetangga membaca melintasi tepi potongan. Wilayah halo tersebut harus dibagikan di antara GPU, atau hasil pada batas akan salah.

Seimbangkan Beban

Jika satu GPU lebih cepat, pembagian rata akan menyia-nyiakan kemampuannya. Penyeimbangan beban yang baik memberikan potongan lebih besar kepada kartu yang lebih kuat agar keduanya selesai bersamaan.

Pemeriksaan Cepat

Ingat cara standar untuk menyebarkan satu kumpulan data besar ke beberapa GPU.

Ringkasan

Anda membagi data menjadi beberapa potongan, mengalokasikan dan menyalin per perangkat, meluncurkan pada masing-masing perangkat, lalu mengumpulkan hasilnya. Perhatikan sisa dan wilayah halo. Berikutnya: menyalin langsung dari GPU ke GPU. ✨

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 “Mempartisi Pekerjaan di Seluruh GPU” gratis?

Ya — teks lengkap “Mempartisi Pekerjaan di Seluruh GPU” 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 “Mempartisi Pekerjaan di Seluruh GPU”?

Strategi dekomposisi domain 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 “Mempartisi Pekerjaan di Seluruh GPU” 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. Menghitung dan Memilih Perangkat
  2. Mempartisi Pekerjaan di Seluruh GPU
  3. Akses Memori Peer-to-Peer
  4. Multi-GPU dengan NCCL
← Kembali ke CUDA Academy