การเขียนเส้นทางที่ทำงานหนักใหม่ใน Mojo
แปลคอขวดด้วย fn และ SIMD
การเขียนเส้นทางที่ทำงานหนักใหม่ใน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การวิเคราะห์ประสิทธิภาพของพื้นฐาน Python
- การเขียนเส้นทางที่ทำงานหนักใหม่ใน Mojo
- การทำแกนหลักให้ทำงานขนานและปรับจูน
- การส่งมอบโครงการที่เร่งความเร็วแล้ว