Mojo Academy · Pelajaran

Menggabungkan Paralel dan Vektor

Tambahkan threading di atas SIMD.

Pelajaran 3 dari 413 langkah

Menggabungkan Paralel dan Vektor 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.

Dua Jenis Kecepatan

SIMD mengemas banyak nilai ke dalam instruksi satu inti. Utas menyebarkan pekerjaan ke berbagai inti. Menggabungkan keduanya memberikan hasil yang maksimal. ⚡

Lapisan Luar: Utas

Gunakan parallelize pada tingkat luar agar setiap inti memiliki satu chunk data. Itulah pembagian kasar di antara inti.

parallelize[do_chunk](workers)

Lapisan Dalam: Vektor

Di dalam setiap chunk, gunakan vectorize agar satu inti memproses irisannya dalam paket SIMD. Itulah pembagian halus untuk setiap inti.

from algorithm import vectorize

Impor Kedua Pembantu

Kedua alat tersebut berada di modul algorithm, sehingga Anda dapat mengimpornya bersama-sama dan menggabungkannya dalam satu fungsi.

from algorithm import parallelize, vectorize

Worker Chunk

Setiap worker chunk menghitung awal dan akhirnya, lalu menyerahkan irisannya sendiri kepada vectorize untuk melakukan pemindaian SIMD.

fn do_chunk(c: Int):
    var start = c * chunk

Lakukan Vektorisasi pada Rentang Dalam

Di dalam worker, panggil vectorize hanya dengan panjang chunk ini. Lebar SIMD menentukan jumlah lajur yang berjalan secara bersamaan.

vectorize[step, width](end - start)

Beri Ofset ke Data

Langkah dalam mendapatkan indeks lokal, jadi tambahkan awal chunk untuk mencapai posisi yang tepat dalam array penuh.

fn step[w: Int](i: Int):
    out.store[width=w](start + i, ...)

Pilih Lebar SIMD

Sesuaikan lebar vektor dengan lajur perangkat keras menggunakan simdwidthof agar setiap inti memanfaatkan registernya secara penuh.

alias width = simdwidthof[DType.float32]()

Inti Dikalikan Lajur

Keuntungannya berlipat ganda: banyak inti, masing-masing mengerjakan banyak lajur dalam setiap langkah. Hasil perkalian itulah yang membuat kode gabungan sangat cepat.

Jaga agar Chunk Tetap Independen

Penggabungan ini hanya berhasil karena chunk tidak pernah menyentuh data satu sama lain. Independensi menjaga kedua lapisan tetap aman.

Ukur Keuntungan Gabungan

Lakukan tolok ukur pada versi skalar, hanya vektor, dan gabungan. Angka-angka tersebut menunjukkan seberapa besar kontribusi setiap lapisan.

Pemeriksaan Singkat

Anda menggabungkan utas dan SIMD pada beban kerja yang sama.

Rangkuman

Anda membungkus parallelize pada chunk dan memanggil vectorize di dalam setiap chunk, dengan memberikan ofset berdasarkan awal chunk, sehingga perkalian inti dan lajur meningkatkan throughput Anda berkali-kali lipat. 🚀

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 “Menggabungkan Paralel dan Vektor” gratis?

Ya — teks lengkap “Menggabungkan Paralel dan Vektor” 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 Paralel dan Vektor”?

Tambahkan threading di atas SIMD. 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 “Menggabungkan Paralel dan Vektor” 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. Fungsi parallelize
  2. Membagi Pekerjaan Menjadi Potongan
  3. Menggabungkan Paralel dan Vektor
  4. Menghindari Data Race
← Kembali ke Mojo Academy