Bina Histogram
Gunakan operasi atom dengan penswastaan memori kongsi.
Bina Histogram ialah pelajaran CUDA Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran CUDA Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus CUDA Academy merangkumi sejumlah 4 pelajaran.
Perkara yang Dikira oleh Histogram
Histogram mengira bilangan input yang jatuh ke dalam setiap bin. Banyak utas akan cuba menokok bin yang sama, jadi ini ialah masalah operasi atom. 📊
Pendekatan Naif
Setiap utas membaca satu elemen, mencari binnya dan menokok bin tersebut. Tanpa perlindungan, bin yang popular kehilangan kiraan akibat perlumbaan.
Versi Atomic Global
Penyelesaian betul yang paling mudah ialah satu atomicAdd bagi setiap elemen terus ke memori global. Ia berfungsi, tetapi bin yang sibuk menyebabkan utas dilaksanakan secara bersiri.
atomicAdd(&hist[bin], 1);Masalah Persaingan
Apabila data terkumpul dalam beberapa bin, ribuan utas bertumpu pada alamat yang sama. Persaingan itu boleh menjadikan operasi atom global amat perlahan.
Penswastaan sebagai Penyelesaian
Penswastaan memberikan setiap blok histogram peribadinya sendiri dalam memori dikongsi yang pantas. Utas hanya bertembung dalam blok masing-masing, bukan di seluruh grid.
Isytiharkan Histogram Dikongsi
Setiap blok mengisytiharkan tatasusunan dikongsi yang saiznya mengikut bilangan bin. Tatasusunan ini berada pada cip, jadi operasi atom di situ jauh lebih murah berbanding operasi global.
__shared__ int local[NBINS];Langkah 1: Kosongkan Bin
Utas mengosongkan histogram dikongsi secara bekerjasama, kemudian memanggil __syncthreads supaya tiada utas mengira sebelum proses mengosongkan selesai.
local[tid] = 0;
__syncthreads();Langkah 2: Kira Secara Tempatan
Kini setiap utas menaikkan bin masing-masing secara atom dalam memori dikongsi. atomicAdd yang sama digunakan, tetapi pada salinan pantas pada cip dan bukannya salinan global.
atomicAdd(&local[bin], 1);Langkah 3: Cantumkan ke Global
Selepas sekatan, utas menambah setiap bin dikongsi ke dalam histogram global dengan satu atomicAdd bagi setiap bin. Jauh lebih sedikit operasi atom global berbanding sebelumnya.
atomicAdd(&hist[i], local[i]);Mengapa Ini Lebih Pantas
Operasi atom pada memori dikongsi adalah pantas, dan operasi atom global yang mahal kini berlaku sekali bagi setiap bin bagi setiap blok, bukannya sekali bagi setiap elemen.
Perhatikan Bilangan Bin
Histogram peribadi mesti muat dalam memori dikongsi. Jika terdapat terlalu banyak bin, bahagikannya kepada beberapa laluan atau kembali menggunakan operasi atom global.
Semakan Pantas
Satu soalan tentang strategi histogram.
Imbas Kembali: Membina Histogram
Anda membina histogram dengan operasi atom global, kemudian mempercepatkannya menggunakan penswastaan memori dikongsi: kosongkan, kira secara tempatan dan cantumkan. ✅
Pelajari C++ dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Soalan Lazim
Adakah pelajaran “Bina Histogram” percuma?
Ya — teks penuh “Bina Histogram” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus CUDA Academy, tingkat taraf kepada CoddyKit PRO. Kursus CUDA Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Bina Histogram”?
Gunakan operasi atom dengan penswastaan memori kongsi. Anda berlatih CUDA Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan CUDA Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran CUDA Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Bina Histogram” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran CUDA Academy ini?
Ya. Setiap pelajaran CUDA Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Keadaan Perlumbaan pada GPU
- atomicAdd dan Rakan-rakannya
- Bina Histogram
- Operasi Atom Tersuai dengan atomicCAS