Mojo Academy · Pelajaran

Mengoptimalkan Hasil Kali Dalam

Vektorkan dan buka gulungan hasil kali titik.

Pelajaran 3 dari 413 langkah

Mengoptimalkan Hasil Kali Dalam adalah pelajaran Mojo Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.

Inti Hasil Kali Titik

Hasil kali dalam mengalikan dua urutan elemen demi elemen lalu menjumlahkan hasilnya. Mempercepatnya berarti mempercepat seluruh matmul Anda.

var acc: Float32 = 0.0
for k in range(K):
    acc += a[k] * b[k]

Satu Lajur Sekaligus Itu Lambat

Perulangan biasa menangani satu pasangan pada setiap langkah. CPU modern dapat memproses banyak pasangan sekaligus, sehingga kode skalar membiarkan lajur menganggur.

Memperkenalkan SIMD

Nilai SIMD mengemas beberapa angka dan menerapkan satu operasi kepada semuanya secara bersamaan, sehingga pekerjaan nyata dilakukan secara paralel dalam satu instruksi.

var v = SIMD[DType.float32, 4](1, 2, 3, 4)

Muat Satu Potongan Sekaligus

Alih-alih satu float, load seluruh potongan setiap array selebar SIMD dalam satu perpindahan, sehingga siap digunakan untuk perhitungan vektor.

var va = a.load[width=4](k)
var vb = b.load[width=4](k)

Kalikan Seluruh Vektor

Mengalikan dua nilai SIMD menghasilkan vektor berisi hasil perkalian dalam satu langkah. Pekerjaan elemen demi elemen berlangsung di semua lajur secara bersamaan.

var prod = va * vb  # 4 products at once

Akumulasikan ke dalam Vektor

Simpan akumulator SIMD dan tambahkan setiap vektor hasil perkalian ke dalamnya. Jumlah akhir ditunda hingga perulangan selesai.

var acc = SIMD[DType.float32, 4](0)
acc += va * vb

Melangkah Sesuai Lebar

Sekarang perulangan maju sebesar lebar SIMD, bukan satu. Lebar empat lajur berarti jumlah iterasi menjadi seperempatnya.

for k in range(0, K, 4):
    acc += a.load[width=4](k) * b.load[width=4](k)

Lakukan Reduksi di Akhir

Setelah perulangan, gabungkan akumulator lajur menjadi satu angka dengan reduksi horizontal untuk memperoleh hasil kali titik akhir.

var total = acc.reduce_add()

Membuka Gulungan Perulangan

Pembukaan gulungan memproses beberapa lebar pada setiap iterasi, mengurangi beban perulangan dan membuka lebih banyak pekerjaan independen bagi CPU.

Tangani Sisa Elemen

Jika K bukan kelipatan lebar, beberapa elemen akan tersisa. Perulangan ekor kecil menyelesaikannya satu per satu.

for k in range(K - K % 4, K):
    total += a[k] * b[k]

Biarkan Mojo Membantu

Mojo menyediakan pembantu vectorize untuk menerapkan isi yang parameternya berupa lebar pada suatu rentang, sekaligus menangani langkah dan ekornya untuk Anda.

Pemeriksaan Singkat

Setelah perulangan hasil kali titik selebar SIMD, mengapa Anda memanggil reduce_add di akhir?

Rangkuman

Lakukan vektorisasi pada hasil kali dalam dengan memuat potongan SIMD, mengalikan lajur, mengakumulasikan, lalu melakukan reduksi; buka gulungan perulangan dan selesaikan bagian ekor. ⚡

Gratis untuk memulai

Belajar Mojo 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 “Mengoptimalkan Hasil Kali Dalam” gratis?

Ya — teks lengkap “Mengoptimalkan Hasil Kali Dalam” 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 “Mengoptimalkan Hasil Kali Dalam”?

Vektorkan dan buka gulungan hasil kali titik. 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 3 dari 4.

Berapa lama pelajaran “Mengoptimalkan Hasil Kali Dalam” 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

  1. Memodelkan Tensor di Mojo
  2. Membangun Matmul Langkah demi Langkah
  3. Mengoptimalkan Hasil Kali Dalam
  4. Memverifikasi Kebenaran Numerik
← Kembali ke Mojo Academy