ประสิทธิภาพ MicroPython จุดประกายการถอดถอนเรื่องความเป็นไปได้ในการใช้งานจริงบนไมโครคอนโทรลเลอร์

ทีมชุมชน BigGo
ประสิทธิภาพ MicroPython จุดประกายการถอดถอนเรื่องความเป็นไปได้ในการใช้งานจริงบนไมโครคอนโทรลเลอร์

การศึกษาเปรียบเทียบประสิทธิภาพของ MicroPython บนไมโครคอนโทรลเลอร์หลากหลายรุ่นเมื่อเร็วๆ นี้ ได้จุดประกายการอภิปรายเกี่ยวกับข้อจำกัดในทางปฏิบัติของภาษานี้และวิธีการทดสอบ การศึกษาได้เปรียบเทียบประสิทธิภาพบนอุปกรณ์ตั้งแต่ ESP8266 ไปจนถึง Raspberry Pi Pico 2W โดยเผยให้เห็นช่องว่างด้านประสิทธิภาพที่สำคัญ ทำให้นักพัฒนาบางคนตั้งคำถามเกี่ยวกับความเหมาะสมของ MicroPython สำหรับแอปพลิเคชันบางประเภท

เวอร์ชันซอฟต์แวร์ที่ทำการทดสอบ:

  • MicroPython 1.25.0 (รุ่นล่าสุดที่เปิดตัวอย่างเป็นทางการ)
  • CPython 3.13 บนแล็ปท็อป
  • CPython 3.9 บน Raspberry Pi 4

ผลการทดสอบประสิทธิภาพทำให้เกิดข้อสงสัย

ผลการทดสอบได้รับการวิพากษ์วิจารณ์อย่างรุนแรงจากชุมชนนักพัฒนา โดยเฉพาะเรื่องเวลาในการประมวลผลอัลกอริทึมทั่วไป การทดสอบ bubble sort ซึ่งเกี่ยวข้องกับการเรียงลำดับตัวเลขสุ่ม 2,000 ตัว ใช้เวลามากกว่า 80 วินาทีบนไมโครคอนโทรลเลอร์ 32 บิต 160MHz บางรุ่น สิ่งนี้ได้กระตุ้นการอภิปรายอย่างเข้มข้นเกี่ยวกับว่าระดับประสิทธิภาพเช่นนี้ทำให้ MicroPython ไม่เหมาะสมสำหรับแอปพลิเคชันที่ต้องการความไวต่อเวลาหรือไม่

สร้างตัวเลขสุ่ม 2000 ตัวและเรียงลำดับโดยใช้ bubble sort บน mcu 32bit 160Mhz ใช้เวลา 80 วินาที? นี่คือเหตุผลที่ micropython เป็นแค่ของเล่น

ผลการทดสอบแสดงให้เห็นว่า Raspberry Pi Pico 2W โดยทั่วไปมีประสิทธิภาพเหนือกว่า ESP32-S3 ในการทดสอบหลายรายการ ซึ่งทำให้หลายคนประหลาดใจเมื่อพิจารณาจากชื่อเสียงของ ESP32 ในฐานะตัวเลือกไมโครคอนโทรลเลอร์ระดับไฮเอนด์

ผลการทดสอบเปรียบเทียบ:

  • Fibonacci (ตัวเลขลำดับที่ 30): Pico 2W ทำงานเสร็จสิ้นในเวลาประมาณครึ่งหนึ่งเมื่อเทียบกับ ESP32-S3
  • Bubble Sort (เรียงลำดับตัวเลข 2,000 ตัว): เวลาในการประมวลผลเกิน 80 วินาทีในไมโครคอนโทรลเลอร์ความเร็ว 160MHz บางตัว
  • Non-recursive Fibonacci: ประสิทธิภาพดีกว่าในทุกอุปกรณ์ที่ทำการทดสอบ

ชุมชนตั้งคำถามเกี่ยวกับวิธีการทดสอบ

นักพัฒนาหลายคนได้แสดงความกังวลเกี่ยวกับแนวทางและขอบเขตของการทดสอบ นักวิจารณ์โต้แย้งว่าการเปรียบเทียบประสิทธิภาพ MicroPython บนแพลตฟอร์มฮาร์ดแวร์ที่แตกต่างกันไม่ได้ให้ข้อมูลเชิงลึกที่มีความหมายเกี่ยวกับประสิทธิภาพของภาษา พวกเขาเสนอว่าการเปรียบเทียบกับโค้ด C ที่เทียบเท่าที่ทำงานบนไมโครโปรเซสเซอร์เดียวกันจะให้ข้อมูลที่มีค่ามากกว่าเกี่ยวกับค่าใช้จ่ายด้านประสิทธิภาพที่แท้จริงของ MicroPython

คนอื่นๆ ชี้ให้เห็นว่าการศึกษาพลาดโอกาสในการทดสอบ emitter ของ MicroPython ที่แตกต่างกันและคุณสมบัติการปรับปรุงประสิทธิภาพที่อาจส่งผลกระทบต่อผลการทดสอบอย่างมีนัยสำคัญ สมาชิกชุมชนบางคนสังเกตว่าอัลกอริทึมแบบเรียกซ้ำโดยไม่มี memoization ที่ทำให้เกิด stack overflow ควรเป็นพฤติกรรมที่คาดหวังมากกว่าจะเป็นข้อจำกัด

การเปรียบเทียบ RAM ของอุปกรณ์:

  • ESP8266: ~80KB RAM
  • ESP32-S3: ~512KB RAM
  • Raspberry Pi Pico 2W: ~264KB RAM
  • Framework Laptop: ~32GB RAM (มากกว่า ESP8266 ถึง 524,288 เท่า)

ผลกระทบในวงกว้างสำหรับการพัฒนาระบบฝังตัว

การอภิปรายขยายไปเกินกว่าตัวเลขประสิทธิภาพดิบไปสู่คำถามพื้นฐานเกี่ยวกับบทบาทของ MicroPython ในการพัฒนาระบบฝังตัว แม้ว่าการศึกษาดั้งเดิมจะยอมรับว่าไมโครคอนโทรลเลอร์มีจุดประสงค์ที่แตกต่างจากคอมพิวเตอร์แบบดั้งเดิม แต่การอภิปรายของชุมชนเผยให้เห็นความแตกแยกที่ลึกซึ้งยิ่งขึ้นเกี่ยวกับการแลกเปลี่ยนประสิทธิภาพที่ยอมรับได้

ตัวอย่างในทางปฏิบัติของผู้เขียนในการสร้างเทอร์โมสแตตแบบกำหนดเองในราคาต่ำกว่า 10 ยูโร แสดงให้เห็นถึงการเข้าถึงได้ของ MicroPython สำหรับโครงการของนักสมัครเล่น อย่างไรก็ตาม นักพัฒนาระดับมืออาชีพยังคงมีความเห็นแตกต่างกันเกี่ยวกับว่าความสะดวกของ syntax ของ Python นั้นสมเหตุสมผลกับการลดประสิทธิภาพในสภาพแวดล้อมการผลิตหรือไม่

การอภิปรายที่กำลังดำเนินอยู่สะท้อนให้เห็นความตึงเครียดในวงกว้างในการพัฒนาระบบฝังตัวระหว่างความง่ายในการใช้งานและประสิทธิภาพที่เหมาะสมที่สุด โดยมี MicroPython อยู่ในใจกลางของการอภิปรายเรื่องการแลกเปลี่ยนนี้

อ้างอิง: Benchmarking MicroPython