32 คะแนน โดย xguru 2020-12-04 | 17 ความคิดเห็น | แชร์ทาง WhatsApp
  • 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 ที่เร็วคืออะไร?

  1. ทำให้การรันคำสั่งแบบลำดับเร็วขึ้น

  2. รันหลายคำสั่งพร้อมกันแบบขนาน

ในยุค 80 เรื่องนี้ง่ายมาก แค่เพิ่ม clock frequency คำสั่งก็รันได้เร็วขึ้น

คอมพิวเตอร์จะทำงานบางอย่างในแต่ละ clock cycle และ "บางอย่าง" นี้เล็กมาก จึงทำให้คำสั่งหนึ่งอาจต้องใช้หลาย clock cycle

แต่ในยุคปัจจุบัน การเพิ่ม clock frequency มีข้อจำกัด

"จุดจบของกฎของมัวร์"

ดังนั้น ตอนนี้การรันคำสั่งให้ขนานกันได้มากที่สุดจึงสำคัญ

  • Multi-core or Out-of-Order processors?

→ การประมวลผลแบบขนานมีอยู่ 2 แนวทาง

  1. ใส่ CPU core ให้มากขึ้น (ในมุมมองนักพัฒนา คือเพิ่ม thread มากขึ้น)

ตามทฤษฎีแล้ว คอร์ของโปรเซสเซอร์สามารถรันหลาย thread ได้ (software thread)

แต่นี่คือการสลับไปรันระหว่าง thread จึงใช้ในสถานการณ์ที่ต้องรอ I/O หรือเครือข่ายเป็นหลัก

hardware thread ทำให้เร็วขึ้นได้ แต่ผู้พัฒนาต้องเขียนโค้ดเพื่อใช้ประโยชน์จากมัน

โมเดลนี้เหมาะกับ server/cloud

นั่นจึงเป็นเหตุผลที่บริษัทอย่าง Ampere ทำ ARM CPU สำหรับคลาวด์อย่าง Altra Max ที่มี 128 คอร์

Apple ตรงกันข้ามอย่างสิ้นเชิง Apple เป็นบริษัทที่ทำอุปกรณ์สำหรับผู้ใช้คนเดียว

ซอฟต์แวร์เดสก์ท็อปส่วนใหญ่ไม่ได้ถูกสร้างมาให้ใช้ประโยชน์จากหลายคอร์ได้มากนัก

เกมอาจได้ประสิทธิภาพเพิ่มบน 8 คอร์ แต่ 128 คอร์เป็นแค่ความสูญเปล่า

ดังนั้นจึงต้องการคอร์ที่ทรงพลังกว่าจำนวนไม่มาก

  1. การประมวลผลแบบนอกลำดับ (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 เรื่อง

  1. ไม่มีโมเดลธุรกิจที่จะผลักดันการประมวลผลแบบ heterogeneous computing และการออกแบบ SoC

  2. ชุดคำสั่ง x86 CISC ที่ซับซ้อนกลายเป็น legacy และทำให้การปรับปรุงประสิทธิภาพ OoO ทำได้ยาก

→ แน่นอนว่านี่ยังไม่ใช่ game over ยังเพิ่ม clock, เพิ่มการระบายความร้อน, เพิ่มจำนวนคอร์ ได้อีก..

→ Intel แย่กว่านั้นอีก เพราะไม่เพียงแพ้ Firestorm ในความเร็วคอร์ แต่ GPU ที่ใส่มาใน SoC ก็ยังไม่ดี

→ คอร์จำนวนมากแน่นอนว่าเหมาะกับเซิร์ฟเวอร์ แต่ Amazon และ Ampere กำลังบุกด้วย 128 คอร์ ทำให้ Intel/AMD ต้องสู้ทั้งสองด้าน

→ โชคดีที่ Apple ไม่ได้ขายชิปในตลาดเหมือน AMD/Intel

→ อาจยังไม่เกิดขึ้นทันที แต่ผู้ใช้ PC จะค่อยๆ ย้ายไปหา Apple และ Apple จะมีสัดส่วนในตลาด PC มากขึ้นเรื่อยๆ

17 ความคิดเห็น

 
shaha 2022-04-05

เขียนได้ดีมากจริง ๆ

 
hoking337 2020-12-07

ขอบคุณที่สรุปมาได้ดีมากและเข้าใจง่ายสุด ๆ ครับ สุดยอด!

 
dreamydh 2020-12-05

ขอบคุณสำหรับเนื้อหาดี ๆ ครับ

 
xguru 2020-12-05

ขอบคุณครับ!!

 
pilgwon 2020-12-04

อยากซื้อเครื่องที่ใช้ M1 แต่ดูเหมือนว่าคงต้องไปซื้อหุ้นแทน..

ขอบคุณสำหรับบทความดีๆ ครับ!

 
xguru 2020-12-05

ผมก็เห็นด้วยเหมือนกันว่าหุ้น Apple มีมูลค่าในอนาคตสูง

สักวันหนึ่งรู้สึกว่า Apple Car น่าจะออกมาจริง ๆ

 
functor 2020-12-04

Weak memory model กำลังมีความสำคัญมากขึ้นเรื่อย ๆ เลยนะ.. ตอนนี้ Apple กำลังกลายเป็นบริษัทแบบ closed ที่สามารถทำได้หมดจริง ๆ ตั้งแต่ชิป การประกอบ ฮาร์ดแวร์ OS ไปจนถึงแอปทั้งหมดอย่างที่ Jobs เคยฝันไว้

ผมเองก็กำลังคิดว่าอุปกรณ์เครื่องถัดไปจะเป็น Mac mini หรือ MacBook Air ที่ใช้ M1 เหมือนกัน..

 
xguru 2020-12-05

ผมก็เปลี่ยนจาก MacBook Pro ปี 2015 มาเป็น M1 เหมือนกัน.. เขาบอกว่าน่าจะมาไม่ปลายปีนี้ก็ต้นปีหน้านะครับ!

 
hankpark 2020-12-06

วันนี้เพิ่งเช็กดู พบว่าเปิดตัวในประเทศแล้ว!

 
shawnkim 2020-12-04

ว้าว! คุณกูรูสุดยอดจริงๆ!!

 
xguru 2020-12-05

ขอบคุณครับ ;)

 
ffdd270 2020-12-04

ในบทความนั้นยังมีส่วนที่ผู้เขียนเขียนเปรียบเทียบ RISC/CISC อยู่ด้วย ซึ่งแนะนำมากจริง ๆ ค่ะ อธิบายได้ลื่นไหลมากว่า "ทำไมถึงมีโครงสร้างชุดคำสั่งแบบนั้น"

 
xguru 2020-12-06

ดูเหมือนว่าเขาจะเป็นคนที่เขียนได้ดีเป็นพื้นฐานอยู่แล้ว บทความนี้ก็ยาวพอสมควร แต่ก็อ่านได้ลื่นดี

 
jun0683 2020-12-04

ว้าว เนื้อหาดีมาก ขอบคุณครับ

 
xguru 2020-12-05

ขอบคุณครับ!

 
godrm 2020-12-04

ให้ความรู้สึกเหมือนได้กลับไปเรียนวิชาสถาปัตยกรรมคอมพิวเตอร์อีกครั้งเลย 555

สุดท้ายแล้ว Apple ก็มีโครงสร้างที่ทำให้ทำในสิ่งที่ตัวเองถนัดที่สุดได้ดียิ่งขึ้นต่อไปอยู่ดี

 
xguru 2020-12-04

ตอนนี้ Intel กับ AMD จะทำยังไงกันล่ะ..

ใน GeekNews Podcast ตอนที่ 16 ที่โพสต์วันนี้ ผมได้แนะนำสั้น ๆ เกี่ยวกับเคล็ดลับ Memory-Order ของชิป M1 ไปแล้ว แต่บทความนี้ลงรายละเอียดอีกแบบและละเอียดมากครับ

ดูเหมือนว่าในพอดแคสต์สัปดาห์หน้าก็คงจะได้คุยเรื่องนี้กันอีก ^^;