Menggabungkan SIMD dengan Perulangan
Vektorkan inti kernel.
Menggabungkan SIMD dengan Perulangan adalah pelajaran Mojo 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 Mojo Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Mojo Academy mencakup 4 pelajaran total.
Dari Skalar ke SIMD
Untuk mempercepat kernel, gantilah loop satu per satu dengan loop yang menangani seluruh kumpulan nilai pada setiap langkah menggunakan SIMD.
for i in range(n):
out[i] = a[i] + b[i]Pilih Lebar
Pilih jumlah elemen yang dapat dimuat dalam satu vektor. Lebar adalah jumlah lajur yang diproses bersama pada setiap langkah.
alias width = 4Muat Satu Potongan
Ambil beberapa elemen sekaligus ke dalam nilai SIMD dengan load vektor, bukan membacanya satu per satu.
var va = a.load[width=width](i)Hitung Kumpulan Nilainya
Jalankan matematika kernel pada kedua potongan sekaligus. Seluruh kumpulan dijumlahkan per elemen dalam satu operasi.
var vsum = a.load[width=width](i) + b.load[width=width](i)Simpan Kumpulan Nilainya
Tulis kembali seluruh hasil dengan store vektor, mencakup setiap lajur yang baru saja Anda hitung dalam satu langkah.
out.store[width=width](i, vsum)Melangkah Sesuai Lebar
Loop tervectorisasi maju sesuai lebarnya, bukan satu per satu. Setiap putaran mencakup satu kumpulan penuh elemen.
for i in range(0, n, width):
passBiarkan vectorize Membantu
Pembantu vectorize milik Mojo menyapu closure sepanjang rentang dalam langkah-langkah vektor, sehingga Anda tidak perlu mengelola semuanya secara manual.
from algorithm import vectorizeTulis Closure Potongan
Anda mendefinisikan fungsi kecil berparameter yang menangani satu potongan. Mojo memanggilnya dengan lebar yang tepat saat melakukan penyapuan.
fn body[w: Int](i: Int):
out.store[width=w](i, a.load[width=w](i) + b.load[width=w](i))Jalankan vectorize
Panggil vectorize dengan closure, lebar, dan ukuran Anda. Fitur ini melakukan loop dan bahkan menangani sisa akhir untuk Anda.
vectorize[body, width](n)Perhatikan Sisa Akhir
Jika n bukan kelipatan lebar, beberapa elemen akan tersisa. vectorize membersihkan sisa akhir tersebut agar tidak ada yang terlewat.
Output Sama, Lebih Cepat
Kernel tervectorisasi menghasilkan hasil yang identik, tetapi memproses data dalam langkah besar sehingga selesai jauh lebih cepat.
Pemeriksaan Singkat
Anda melakukan vektorisasi kernel dengan lebar 4, tetapi n adalah 10. Apa yang menangani dua elemen terakhir?
Rangkuman
Lakukan vektorisasi kernel dengan memuat dan menyimpan kumpulan nilai, melangkah sesuai lebar, serta membiarkan vectorize menangani penyapuan dan sisa akhir. 🚀
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Menggabungkan SIMD dengan Perulangan” gratis?
Ya — teks lengkap “Menggabungkan SIMD dengan Perulangan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Mojo Academy, upgrade ke CoddyKit PRO. Kursus Mojo Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Menggabungkan SIMD dengan Perulangan”?
Vektorkan inti kernel. Kamu berlatih Mojo 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 Mojo Academy?
Tidak diperlukan pengalaman sebelumnya. Mojo 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 “Menggabungkan SIMD dengan Perulangan” 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 Mojo Academy ini?
Ya. Setiap pelajaran Mojo 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
- Anatomi Kernel Komputasi
- Menggabungkan SIMD dengan Perulangan
- Mengurangi Lalu Lintas Memori
- Tiling untuk Lokalisasi Cache