Mojo Academy · บทเรียน

การเขียนเส้นทางที่ทำงานหนักใหม่ใน Mojo

แปลคอขวดด้วย fn และ SIMD

บทเรียน 2 จาก 413 ขั้นตอน

การเขียนเส้นทางที่ทำงานหนักใหม่ใน Mojo เป็นบทเรียน Mojo Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Mojo Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Mojo Academy มีบทเรียนทั้งหมด 4 บทเรียน

ย้ายเส้นทางที่ทำงานหนัก

ตอนนี้นำลูป Python ที่ช้านั้นมาสร้างใหม่ใน Mojo โดยคงตรรกะเดิมไว้ แต่ได้ ประสิทธิภาพจริงจากโค้ดที่ระบุชนิดข้อมูลและผ่านการคอมไพล์ 🔧

เลือกใช้ fn

เขียนเคอร์เนลเป็นฟังก์ชัน fn ไม่ใช่ def ชนิดข้อมูลที่จำเป็นช่วยให้คอมไพเลอร์สร้างโค้ดเครื่องที่กระชับสำหรับลูปที่ทำงานหนัก

fn sum_squares(data: List[Float64]) -> Float64:
    var total: Float64 = 0.0
    return total

กำกับชนิดข้อมูลทุกตัว

กำหนด ชนิดข้อมูลที่แน่นอนให้ทุกค่า เมื่อไม่ต้องคาดเดาแบบไดนามิกแล้ว Mojo จะปรับปรุงการคำนวณได้เหมือนที่ C ทำ

var total: Float64 = 0.0
var n: Int = len(data)

ย้ายส่วนตัวลูป

คัดลอกการคำนวณด้านในทีละขั้นตอน รักษา การดำเนินการเดิมไว้ เพื่อให้ผลลัพธ์ตรงกับ Python อย่างสมบูรณ์ก่อนปรับปรุงสิ่งใด

for i in range(len(data)):
    total += data[i] * data[i]

ตรวจสอบความถูกต้องก่อน

เรียกใช้เวอร์ชัน Mojo กับข้อมูลนำเข้าเดียวกันแล้วเปรียบเทียบ ความถูกต้องต้องมาก่อนความเร็ว เพราะคำตอบที่ผิดแม้จะเร็วก็ไม่มีประโยชน์

นำ SIMD มาใช้

เมื่อถูกต้องแล้วจึงทำเวกเตอร์ ค่า SIMDจะบรรจุตัวเลขหลายตัวไว้ด้วยกัน ทำให้คำสั่งเดียวประมวลผลหลายองค์ประกอบพร้อมกัน

alias width = 4
var acc = SIMD[DType.float64, width](0)

ประมวลผลเป็นกลุ่มเวกเตอร์

ประมวลผลข้อมูลทีละกลุ่มที่มีขนาดเท่ากับ ความกว้างของ SIMD ในแต่ละรอบจะจัดการทั้ง chunk แทนการจัดการองค์ประกอบเดี่ยว

for i in range(0, n, width):
    var chunk = data.load[width](i)
    acc += chunk * chunk

ลดเวกเตอร์

หลังจบลูป ให้รวมตัวสะสม SIMD เป็นตัวเลขหนึ่งตัวด้วย การลดค่า วิธีนี้จะรวมทุกเลนให้เหลือผลรวมเดียว

var total = acc.reduce_add()

จัดการส่วนท้าย

หากความยาวไม่ใช่พหุคูณพอดีของความกว้าง จะมีองค์ประกอบเหลืออยู่เล็กน้อย ลูปส่วนท้ายขนาดเล็กจะนำมาบวกเพิ่ม เพื่อไม่ให้ข้อมูลตกหล่น

for i in range(n - (n % width), n):
    total += data[i] * data[i]

ตรวจสอบผลลัพธ์อีกครั้ง

เปรียบเทียบผลลัพธ์จากเวกเตอร์กับค่าพื้นฐานของ Python อีกครั้ง ผลลัพธ์ที่ตรงกันยืนยันว่าการเขียน SIMD ใหม่ยังคงคำนวณได้ถูกต้อง

จับเวลาเคอร์เนลใหม่

วัดเคอร์เนล Mojo กับข้อมูลเดียวกัน แม้ทำงานเพียงเธรดเดียว เคอร์เนลที่ระบุชนิดข้อมูลและทำเวกเตอร์ก็มักเร็วกว่าลูป Python มาก

ตรวจสอบอย่างรวดเร็ว

เลือกลำดับที่ถูกต้องสำหรับการเขียนเส้นทางที่ทำงานหนักใหม่ใน Mojo

สรุปทบทวน

คุณย้ายลูปไปเป็น fnที่ระบุชนิดข้อมูล ตรวจสอบความถูกต้อง แล้วทำเวกเตอร์ด้วย SIMD พร้อมจัดการส่วนท้าย ตอนนี้เส้นทางที่ทำงานหนักกลายเป็น Mojo ที่รวดเร็วแล้ว 🎯

เริ่มต้นได้ฟรี

เรียนรู้ Mojo ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

คำถามที่พบบ่อย

บทเรียน “การเขียนเส้นทางที่ทำงานหนักใหม่ใน Mojo” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การเขียนเส้นทางที่ทำงานหนักใหม่ใน Mojo” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Mojo Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Mojo Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การเขียนเส้นทางที่ทำงานหนักใหม่ใน Mojo”

แปลคอขวดด้วย fn และ SIMD คุณปฏิบัติ Mojo Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Mojo Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Mojo Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การเขียนเส้นทางที่ทำงานหนักใหม่ใน Mojo” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Mojo Academy นี้ได้ไหม

ได้ บทเรียน Mojo Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การวิเคราะห์ประสิทธิภาพของพื้นฐาน Python
  2. การเขียนเส้นทางที่ทำงานหนักใหม่ใน Mojo
  3. การทำแกนหลักให้ทำงานขนานและปรับจูน
  4. การส่งมอบโครงการที่เร่งความเร็วแล้ว
← กลับไปที่ Mojo Academy