ทำไมชิป Apple M1 ถึงเร็วมากขนาดนั้น?
(erik-engheim.medium.com)- M1 ไม่ใช่ CPU เพียงตัวเดียว แต่เป็นทั้งระบบที่รวมชิปหลายตัวไว้ในแพ็กเกจซิลิคอนขนาดใหญ่ โดย CPU เป็นแค่ส่วนหนึ่งในนั้น
→ เป็น SoC (System on a Chip) ที่รวม CPU, GPU, หน่วยความจำ, IO controller ฯลฯ ไว้ด้วยกัน
- แทนที่จะใส่คอร์อเนกประสงค์จำนวนมาก จึงใส่ชิปที่ออกแบบมาเฉพาะสำหรับงานบางอย่าง
→ CPU : รัน OS และแอปต่างๆ
→ GPU : ประมวลผลงานกราฟิก เช่น UI ของแอป เกม 2D/3D เป็นต้น
→ ISP (Image Processing Unit) : เพิ่มความเร็วในการประมวลผลภาพ
→ DSP (Digital Signal Processor) : ทำงานที่เน้นการคำนวณทางคณิตศาสตร์มากกว่า CPU เช่น การคลายการบีบอัดไฟล์เพลง
→ NPU (Neural Processing Unit) : เร่งงาน machine learning, การรู้จำเสียง, การประมวลผลกล้อง เป็นต้น
→ Video Encoder/Decoder : จัดการไฟล์/ฟอร์แมตวิดีโอด้วยพลังงานต่ำ
→ Secure Enclave - การเข้ารหัส, การยืนยันตัวตน, ความปลอดภัย
→ UMA (Unified Memory Architecture) : ให้ CPU, GPU และคอร์อื่นๆ แลกเปลี่ยนข้อมูลกันได้อย่างรวดเร็ว
ชิปเหล่านี้จึงเป็นเหตุผลที่ทำให้มันมีประสิทธิภาพยอดเยี่ยมในงานตัดต่อภาพ/วิดีโอ และการเข้ารหัสวิดีโอขนาดใหญ่
- Unified Memory Architecture (UMA) พิเศษอย่างไร?
→ ชิปแบบรวม CPU/GPU ก่อนหน้านี้ทำงานช้า
ทั้งสองฝั่งใช้พื้นที่หน่วยความจำคนละส่วนและใช้กันคนละวิธี
แถม GPU ยังร้อนมาก จึงทำให้การ์ดขนาดใหญ่ที่มีพัดลมระบายความร้อนใหญ่ๆ มักให้ประสิทธิภาพสูง
แต่แบบนั้นก็ต้องคัดลอกข้อมูลระหว่างกันจำนวนมาก จึงต้องใช้บัสอย่าง PCIe
→ Unified Memory ไม่ได้แยกจัดสรรให้ CPU/GPU คนละส่วน แต่ใช้ร่วมกันไปเลย
ต่างจาก Shared Memory ตรงที่ CPU และ GPU เข้าถึงพร้อมกันได้ และเข้าถึงกันได้ด้วยการแลกเปลี่ยนข้อมูลตำแหน่ง จึงไม่ต้องคัดลอกข้อมูล
- ถ้าวิธีแบบ SoC ดีขนาดนี้ แล้วทำไมผู้ผลิตรายอื่นไม่ทำ?
→ กำลังทำอยู่ AMD เริ่มทำในรูปแบบ APU ที่วาง CPU/GPU ไว้บนซิลิคอนไดเดียวกัน
→ แต่การทำจริงยาก เพราะ SoC คือการยกคอมพิวเตอร์ทั้งเครื่องขึ้นไปไว้บนชิปเดียว จึงเหมาะกับผู้ผลิตคอมพิวเตอร์อย่าง HP หรือ Dell มากกว่า
→ โมเดลธุรกิจของ Intel และ AMD คือ CPU อเนกประสงค์ที่คนเอาไปเสียบลงบนเมนบอร์ด PC
แต่ตลาด SoC แบบใหม่ไม่ใช่การเอาผลิตภัณฑ์จริงจากหลาย vendor มาประกอบกัน หากเป็นการประกอบ IP (Intellectual Property) เข้าด้วยกัน
→ แล้ว Intel, AMD, Nvidia จะยอมให้ Dell หรือ HP ไลเซนส์ IP ได้หรือไม่?
→ แน่นอนว่า Intel และ AMD จะขาย SoC สำเร็จรูปก็ได้ แต่ก็อาจเกิดความขัดแย้งทางผลประโยชน์ระหว่างผู้ผลิต CPU/ผู้ผลิต PC/MS (เช่น จะใส่อะไรลงไปบ้าง)
→ แต่สำหรับ Apple นี่เป็นเรื่องง่าย พวกเขาทำทุกอย่างเอง "They control the whole widget"
- ความท้าทายพื้นฐานที่สุดของการทำให้ CPU เร็วขึ้น
→ Firestorm ซึ่งเป็นคอร์ CPU อเนกประสงค์ความเร็วสูงของ M1 นั้นเร็วจริงๆ นี่คือความต่างจาก ARM รุ่นก่อนๆ ที่ช้ากว่าเมื่อเทียบกับ AMD/Intel แบบเดิม
→ Firestorm เอาชนะคอร์ส่วนใหญ่ของ Intel/AMD Ryzen ในด้านความเร็วได้ ซึ่งตามสามัญสำนึกแล้วไม่น่าเกิดขึ้น
→ แล้วกลยุทธ์ในการสร้าง CPU ที่เร็วคืออะไร?
-
ทำให้การรันคำสั่งแบบลำดับเร็วขึ้น
-
รันหลายคำสั่งพร้อมกันแบบขนาน
ในยุค 80 เรื่องนี้ง่ายมาก แค่เพิ่ม clock frequency คำสั่งก็รันได้เร็วขึ้น
คอมพิวเตอร์จะทำงานบางอย่างในแต่ละ clock cycle และ "บางอย่าง" นี้เล็กมาก จึงทำให้คำสั่งหนึ่งอาจต้องใช้หลาย clock cycle
แต่ในยุคปัจจุบัน การเพิ่ม clock frequency มีข้อจำกัด
"จุดจบของกฎของมัวร์"
ดังนั้น ตอนนี้การรันคำสั่งให้ขนานกันได้มากที่สุดจึงสำคัญ
- Multi-core or Out-of-Order processors?
→ การประมวลผลแบบขนานมีอยู่ 2 แนวทาง
- ใส่ CPU core ให้มากขึ้น (ในมุมมองนักพัฒนา คือเพิ่ม thread มากขึ้น)
ตามทฤษฎีแล้ว คอร์ของโปรเซสเซอร์สามารถรันหลาย thread ได้ (software thread)
แต่นี่คือการสลับไปรันระหว่าง thread จึงใช้ในสถานการณ์ที่ต้องรอ I/O หรือเครือข่ายเป็นหลัก
hardware thread ทำให้เร็วขึ้นได้ แต่ผู้พัฒนาต้องเขียนโค้ดเพื่อใช้ประโยชน์จากมัน
โมเดลนี้เหมาะกับ server/cloud
นั่นจึงเป็นเหตุผลที่บริษัทอย่าง Ampere ทำ ARM CPU สำหรับคลาวด์อย่าง Altra Max ที่มี 128 คอร์
Apple ตรงกันข้ามอย่างสิ้นเชิง Apple เป็นบริษัทที่ทำอุปกรณ์สำหรับผู้ใช้คนเดียว
ซอฟต์แวร์เดสก์ท็อปส่วนใหญ่ไม่ได้ถูกสร้างมาให้ใช้ประโยชน์จากหลายคอร์ได้มากนัก
เกมอาจได้ประสิทธิภาพเพิ่มบน 8 คอร์ แต่ 128 คอร์เป็นแค่ความสูญเปล่า
ดังนั้นจึงต้องการคอร์ที่ทรงพลังกว่าจำนวนไม่มาก
- การประมวลผลแบบนอกลำดับ (Out-of-Order Execution, OoO) คือการรันคำสั่งให้ขนานกันมากขึ้นโดยไม่ต้องระบุใช้งานแบบ explicit เหมือน multithread
ในมุมของนักพัฒนา มันดูเหมือนแต่ละคอร์ทำงานได้เร็วขึ้นเอง
การดึงข้อมูลจากตำแหน่งหน่วยความจำหนึ่งตำแหน่งนั้นช้า
แต่จะดึง 1 ไบต์หรือ 128 ไบต์ ก็แทบไม่มีความต่างด้าน delay
ข้อมูลเคลื่อนที่ผ่าน data bus และถ้าบัสกว้าง ก็อ่านหลายไบต์พร้อมกันได้
เวลาทำงาน CPU จะนำชุดคำสั่งหลายก้อนมารันพร้อมกัน แต่คำสั่งเหล่านี้ถูกเขียนมาให้รันตามลำดับ
ไมโครโปรเซสเซอร์สมัยใหม่จึงใช้การประมวลผลแบบ Out-of-Order
กล่าวคือ มันวิเคราะห์หลายคำสั่งเพื่อดูว่ามี dependency ระหว่างกันหรือไม่
01: mul r1, r2, r3 // r1 ← r2 × r3
02: add r4, r1, 5 // r4 ← r1 + 5
03: add r6, r2, 1 // r6 ← r2 + 1
ในคำสั่งด้านบน ข้อ 1 กับ 2 มี dependency กัน แต่คำสั่งที่ 3 ไม่เกี่ยวกับก่อนหน้าเลย
ดังนั้นโปรเซสเซอร์แบบ Out-of-Order จึงสามารถรันคำสั่งที่ 3 แบบขนานได้
ในความเป็นจริง CPU สามารถตรวจจับ dependency ระหว่างคำสั่งได้เป็นร้อยๆ คำสั่ง ไม่ใช่แค่หนึ่งหรือสองคำสั่ง
CPU จะเชื่อมคำสั่งเป็นกราฟของโหนด จากนั้นวิเคราะห์ว่าคำสั่งใดทำงานแบบขนานได้ และจุดใดต้องรอผลก่อนจึงจะรันต่อได้
เหตุผลที่คอร์ Firestrom ของ M1 ทำความเร็วได้มหาศาล ก็เพราะมันทำ Out-of-Order execution ได้ยอดเยี่ยมมาก
ดูเหมือนจะเหนือกว่าผู้เล่นรายอื่นในตลาดกระแสหลัก รวมถึง Intel/AMD ด้วย
- แล้วทำไม Out-of-Order execution ของ AMD และ Intel ถึงช้ากว่า M1?
→ สิ่งที่พูดถึงก่อนหน้านี้ ในความจริงเรียกว่า ROB (Reorder Buffer) และไม่ใช่คำสั่ง machine code ทั่วไป (ที่ CPU ดึงจากหน่วยความจำมาเพื่อประมวลผล)
คำสั่งเหล่านี้อยู่ในสิ่งที่เรียกว่า CPU Instruction Set Architecture (ISA) ซึ่งก็คือสิ่งที่เราเรียกว่า x86, ARM, PowerPC
→ ภายใน CPU จะรันด้วยชุดคำสั่งที่ต่างออกไปโดยสิ้นเชิง ซึ่งโปรแกรมเมอร์มองไม่เห็น เรียกว่า micro-operations (micro-ops หรือ μops) และ ROB ก็เต็มไปด้วย micro-ops เหล่านี้
→ จะมองว่า ARM/x86 instructions คือ public API และ micro-ops คือ private API ก็ได้
→ CISC มีคำสั่งใหญ่และซับซ้อน จึงจำเป็นต้องใช้ micro-ops แต่ RISC จะใช้หรือไม่ใช้ก็ได้
(ตัวอย่างเช่น ARM CPU ขนาดเล็กบางรุ่นไม่ใช้ micro-ops ก็ได้ ไม่ได้แปลว่าทำ OoO ไม่ได้)
→ แล้วทำไมเรื่องนี้จึงสำคัญ? เพราะ "ความเร็วขึ้นอยู่กับว่าเติม ROB ได้เร็วและได้มากแค่ไหน"
→ ยิ่งเติมได้เร็ว ก็ยิ่งมีโอกาสรันคำสั่งจำนวนมากแบบขนานได้มากขึ้น ส่งผลให้ประสิทธิภาพสูงขึ้น
→ machine code จะถูก decoder แยกออกเป็น micro-ops
→ คอร์ของ Intel/AMD มี decoder 4 ตัว
แต่ Apple มี decoder ถึง 8 ตัวแบบ 'บ้าคลั่ง' และ ROB ก็ใหญ่กว่าถึง 3 เท่า จึงบรรจุคำสั่งได้มากกว่าพื้นฐานถึง 3 เท่า
- แล้วทำไม Intel กับ AMD ไม่ใส่ตัวถอดรหัสคำสั่งให้มากกว่านี้?
→ ตรงนี้คือจุดที่ RISC โต้กลับ และการที่คอร์ Firestorm ของ M1 ใช้ ARM RISC นั้นสำคัญมาก
→ คำสั่ง x86 มีความยาว 1~15 ไบต์ ส่วน RISC มีขนาดคงที่
→ ถ้าคำสั่งทุกตัวมีความยาวเท่ากัน ก็แค่ตัดแล้วโยนไปให้ decoder 8 ตัวคนละส่วนได้เลย
→ แต่ x86 ไม่รู้ว่าคำสั่งถัดไปเริ่มตรงไหน จึงไม่มีทางเลือกนอกจากต้องวิเคราะห์แต่ละคำสั่งจริงๆ
→ วิธีที่ Intel และ AMD รับมือปัญหานี้แบบ brute-force คือถอดรหัสที่ทุกจุดเริ่มต้นของคำสั่ง
นั่นหมายถึงต้องทิ้งการเดาผิดหรือความผิดพลาดจำนวนมากอยู่เรื่อยๆ
จึงทำให้การเพิ่ม decoder มากขึ้นเป็นเรื่องยาก แต่สำหรับ Apple นั้นง่ายกว่ามาก
→ โดยพื้นฐานแล้ว นี่ทำให้ที่ clock frequency เท่ากัน มันประมวลผลคำสั่งได้มากกว่า CPU ของ AMD/Intel ถึง 2 เท่า
→ ในโลกจริง x86 มักไม่ได้ใช้คำสั่ง CISC ที่ซับซ้อนมากนัก และมักใช้คำสั่งสั้นๆ คล้าย RISC เป็นหลัก แต่ก็ยังต้องรองรับคำสั่งยาว 15 ไบต์นั้นอยู่ดี จึงยังมีความซับซ้อน
- แต่คอร์ Zen3 ของ AMD ยังเร็วกว่าไม่ใช่หรือ?
→ ใน benchmark นั้น Zen3 เร็วกว่า Firestorm จริง แต่ Zen3 วิ่งที่ 5Ghz ขณะที่ Firestorm อยู่ที่ 3.2Ghz
→ สาเหตุที่ Apple ไม่ดัน clock frequency สูงขึ้น เพราะชิปจะร้อนเกินไป
→ โดยพื้นฐานแล้ว คอร์ Firestorm เหนือกว่า Zen3
→ Zen3 ใช้พลังงานมากกว่าและปล่อยความร้อนมากกว่าเพื่อเอาไปใช้กับเกมได้ แต่ "Apple เลือกที่จะไม่ทำแบบนั้น"
→ หาก Apple ต้องการประสิทธิภาพสูงกว่านี้ ก็จะเพิ่มจำนวนคอร์แทน ซึ่งให้ประสิทธิภาพสูงขึ้นด้วยพลังงานที่น้อยกว่า
- อนาคต
→ AMD/Intel เหมือนต้อนตัวเองเข้ามุมใน 2 เรื่อง
-
ไม่มีโมเดลธุรกิจที่จะผลักดันการประมวลผลแบบ heterogeneous computing และการออกแบบ SoC
-
ชุดคำสั่ง x86 CISC ที่ซับซ้อนกลายเป็น legacy และทำให้การปรับปรุงประสิทธิภาพ OoO ทำได้ยาก
→ แน่นอนว่านี่ยังไม่ใช่ game over ยังเพิ่ม clock, เพิ่มการระบายความร้อน, เพิ่มจำนวนคอร์ ได้อีก..
→ Intel แย่กว่านั้นอีก เพราะไม่เพียงแพ้ Firestorm ในความเร็วคอร์ แต่ GPU ที่ใส่มาใน SoC ก็ยังไม่ดี
→ คอร์จำนวนมากแน่นอนว่าเหมาะกับเซิร์ฟเวอร์ แต่ Amazon และ Ampere กำลังบุกด้วย 128 คอร์ ทำให้ Intel/AMD ต้องสู้ทั้งสองด้าน
→ โชคดีที่ Apple ไม่ได้ขายชิปในตลาดเหมือน AMD/Intel
→ อาจยังไม่เกิดขึ้นทันที แต่ผู้ใช้ PC จะค่อยๆ ย้ายไปหา Apple และ Apple จะมีสัดส่วนในตลาด PC มากขึ้นเรื่อยๆ
17 ความคิดเห็น
เขียนได้ดีมากจริง ๆ
ขอบคุณที่สรุปมาได้ดีมากและเข้าใจง่ายสุด ๆ ครับ สุดยอด!
ขอบคุณสำหรับเนื้อหาดี ๆ ครับ
ขอบคุณครับ!!
อยากซื้อเครื่องที่ใช้ M1 แต่ดูเหมือนว่าคงต้องไปซื้อหุ้นแทน..
ขอบคุณสำหรับบทความดีๆ ครับ!
ผมก็เห็นด้วยเหมือนกันว่าหุ้น Apple มีมูลค่าในอนาคตสูง
สักวันหนึ่งรู้สึกว่า Apple Car น่าจะออกมาจริง ๆ
Weak memory model กำลังมีความสำคัญมากขึ้นเรื่อย ๆ เลยนะ.. ตอนนี้ Apple กำลังกลายเป็นบริษัทแบบ closed ที่สามารถทำได้หมดจริง ๆ ตั้งแต่ชิป การประกอบ ฮาร์ดแวร์ OS ไปจนถึงแอปทั้งหมดอย่างที่ Jobs เคยฝันไว้
ผมเองก็กำลังคิดว่าอุปกรณ์เครื่องถัดไปจะเป็น Mac mini หรือ MacBook Air ที่ใช้ M1 เหมือนกัน..
ผมก็เปลี่ยนจาก MacBook Pro ปี 2015 มาเป็น M1 เหมือนกัน.. เขาบอกว่าน่าจะมาไม่ปลายปีนี้ก็ต้นปีหน้านะครับ!
วันนี้เพิ่งเช็กดู พบว่าเปิดตัวในประเทศแล้ว!
ว้าว! คุณกูรูสุดยอดจริงๆ!!
ขอบคุณครับ ;)
ในบทความนั้นยังมีส่วนที่ผู้เขียนเขียนเปรียบเทียบ RISC/CISC อยู่ด้วย ซึ่งแนะนำมากจริง ๆ ค่ะ อธิบายได้ลื่นไหลมากว่า "ทำไมถึงมีโครงสร้างชุดคำสั่งแบบนั้น"
ดูเหมือนว่าเขาจะเป็นคนที่เขียนได้ดีเป็นพื้นฐานอยู่แล้ว บทความนี้ก็ยาวพอสมควร แต่ก็อ่านได้ลื่นดี
ว้าว เนื้อหาดีมาก ขอบคุณครับ
ขอบคุณครับ!
ให้ความรู้สึกเหมือนได้กลับไปเรียนวิชาสถาปัตยกรรมคอมพิวเตอร์อีกครั้งเลย 555
สุดท้ายแล้ว Apple ก็มีโครงสร้างที่ทำให้ทำในสิ่งที่ตัวเองถนัดที่สุดได้ดียิ่งขึ้นต่อไปอยู่ดี
ตอนนี้ Intel กับ AMD จะทำยังไงกันล่ะ..
ใน GeekNews Podcast ตอนที่ 16 ที่โพสต์วันนี้ ผมได้แนะนำสั้น ๆ เกี่ยวกับเคล็ดลับ Memory-Order ของชิป M1 ไปแล้ว แต่บทความนี้ลงรายละเอียดอีกแบบและละเอียดมากครับ
ดูเหมือนว่าในพอดแคสต์สัปดาห์หน้าก็คงจะได้คุยเรื่องนี้กันอีก ^^;