CUDA Academy · Pelajaran

Elakkan Konflik Bank

Mengapa pelapikan boleh mempercepat akses memori kongsi.

Pelajaran 3 daripada 413 langkah

Elakkan Konflik Bank 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.

Memori Dikongsi Mempunyai Bank

Memori dikongsi dibahagikan kepada 32 bank, satu bagi setiap utas dalam kumpulan warp. Menyebarkan akses merentasi bank tersebut membolehkan kesemua 32 utas membaca pada kelajuan penuh.

Cara Alamat Dipetakan

Perkataan 4 bait berturutan ditempatkan dalam bank berturutan, berulang semula selepas 32. Jadi perkataan 0 berada dalam bank 0 dan perkataan 32 berada dalam bank 0 sekali lagi.

Maksud Konflik Bank

Konflik bank berlaku apabila dua utas dalam kumpulan warp mengakses bank yang sama tetapi perkataan yang berbeza. Perkakasan mesti melaksanakan akses tersebut secara bersiri.

Pensirian Mengurangkan Kelajuan

Konflik N hala menukarkan satu akses pantas kepada N akses perlahan. Konflik 32 hala boleh menjadikan memori dikongsi sama perlahan seperti akses satu demi satu. 🐢

Keadaan Ideal: Langkah Satu

Apabila setiap utas membaca tile[threadIdx.x], setiap utas mengakses bank yang berbeza. Tiada konflik berlaku dan ia berjalan pada jalur lebar penuh.

float v = tile[threadIdx.x];

Perangkap: Langkah 32

Pembacaan dengan langkah 32 menghantar setiap utas ke bank yang sama. Itulah keadaan terburuk, iaitu konflik 32 hala penuh.

float v = tile[threadIdx.x * 32];

Langkah Genap Juga Memudaratkan

Sebarang langkah genap yang berkongsi faktor dengan 32 menyebabkan konflik separa. Langkah sebanyak 2, contohnya, menghasilkan konflik 2-hala merentasi warp.

Pengecualian Siaran

Berita baik: jika semua thread membaca alamat yang sama, perkakasan menyiarkannya sekali gus. Perkataan yang sama tidak menjadi masalah; hanya bank yang sama dengan perkataan berbeza menyebabkan konflik.

Padding Menyelesaikan Masalah

Untuk jubin 2D, tambahkan satu lajur tambahan dengan padding +1. Ini mengalihkan setiap baris supaya capaian lajur tidak lagi semuanya berada dalam satu bank.

__shared__ float tile[32][33];

Mengapa +1 Berkesan

Lajur tambahan menjadikan panjang baris relatif perdana dengan 32. Kini, bergerak ke bawah lajur akan mengunjungi bank yang berbeza setiap kali, lalu menghapuskan konflik.

Buat Profil, Jangan Meneka

Konflik bank tidak kelihatan dalam kod sumber. Gunakan Nsight Compute untuk mengukur konflik memori dikongsi sebelum meluangkan usaha untuk membaikinya.

Semakan Pantas

Mari kita semak perkara yang menjadikan capaian dikongsi pantas.

Imbas Kembali

Anda telah mempelajari bahawa memori dikongsi mempunyai 32 bank, bahawa capaian perkataan berbeza dalam bank yang sama akan disiri, dan bahawa padding +1 membaiki konflik lajur. Seterusnya: memori dikongsi dinamik. 🎯

Percuma untuk bermula

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 “Elakkan Konflik Bank” percuma?

Ya — teks penuh “Elakkan Konflik Bank” 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 “Elakkan Konflik Bank”?

Mengapa pelapikan boleh mempercepat akses 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 “Elakkan Konflik Bank” 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

  1. Isytiharkan Tatasusunan __shared__
  2. Segerakkan dengan __syncthreads
  3. Elakkan Konflik Bank
  4. Memori Kongsi Dinamik
← Kembali ke CUDA Academy