เจาะลึกรายละเอียด Apple Silicon เมื่อ Mac เปลี่ยนผ่านจาก x86 สู่ซีพียูออกแบบเอง

by mk
26 June 2020 - 15:00

ข่าวใหญ่ของวงการไอทีสัปดาห์นี้ย่อมเป็นเรื่อง แอปเปิลย้าย Mac จากสถาปัตยกรรม x86 มาเป็น ARM โดยเปลี่ยนมาใช้ซีพียูออกแบบเองที่มีชื่อเรียกรวมๆ ว่า Apple Silicon (ยังไม่มีข้อมูลของซีพียูตัวที่จะใช้จริงๆ)

ประกาศของแอปเปิลทำให้เกิดคำถามตามมามากมาย ซึ่งแอปเปิลเองก็ตอบคำถาม (บางส่วน) ไว้ในเซสซันย่อยของงาน WWDC 2020 เราจึงรวบรวมรายละเอียดมาให้อ่านกันครับ

ทำไมต้องย้ายจาก x86 เป็น ARM

แอปเปิลอธิบายเรื่องนี้ไว้ใน Keynote ตอนเปิดงาน WWDC 2020 ว่าเหตุผลที่เปลี่ยนจากซีพียูสถาปัตยกรรม x86 มาเป็น ARM มีทั้งหมด 3 ประการ ได้แก่

  1. ประสิทธิภาพต่อพลังงาน
  2. ฟีเจอร์ด้านฮาร์ดแวร์
  3. compatibility ของฮาร์ดแวร์ทั้งหมดของบริษัท

ถึงแม้แอปเปิลสร้างชื่อขึ้นมาจากคอมพิวเตอร์ตระกูล Macintosh มายาวนานหลายสิบปี แต่ในรอบ 10 ปีให้หลังก็ปฏิเสธไม่ได้ว่าพระเอกกลายเป็น iPhone ที่มียอดขายสูงกว่ากันหลายเท่า จนหลายคนอาจรู้สึกว่า Mac ถูกทอดทิ้ง ซึ่งก็เป็นแบบนั้นจริงๆ เพราะแอปเปิลหันไปโฟกัสที่ iPhone มากกว่าจริงๆ

ประสิทธิภาพต่อพลังงาน

การที่แอปเปิลหันไปโฟกัสที่ iPhone (และขยายมายังอุปกรณ์ข้างเคียงอย่าง iPad และ Apple Watch) ทำให้นวัตกรรมด้านฮาร์ดแวร์บน iPhone พัฒนาไปอย่างก้าวกระโดด โดยเฉพาะตัว SoC ตระกูล Apple A ที่ต้องยอมรับว่าแอปเปิลทำได้ดีมาก ในแง่ประสิทธิภาพก็สามารถเอาชนะคู่แข่งรายอื่นในท้องตลาด (เช่น Snapdragon) ได้สบายๆ

พัฒนาการที่ต่อเนื่องของชิปตระกูล Apple A (ที่สามารถ "เป็นไปได้" ด้วยปัจจัยทางเศรษฐกิจคือยอดขาย iPhone/iPad รวมกันหลักพันล้านเครื่อง) ทำให้มิติเรื่อง "ประสิทธิภาพต่อพลังงาน" (ไม่ใช่ "ประสิทธิภาพ" เพียงอย่างเดียวที่ x86 ยังทำได้ดีกว่า) ดีขึ้นมากจนถึงระดับที่สามารถใช้ทดแทนซีพียูเดสก์ท็อปแล้ว

จากแผนภาพของแอปเปิลเองก็แสดงให้เห็นว่าชิป Apple Silicon เหนือกว่าชิปในท้องตลาด ตรงที่มีประสิทธิภาพใกล้เคียงกับเดสก์ท็อป ในอัตราการใช้พลังงานใกล้เคียงกับโน้ตบุ๊ก (ในแง่การใช้งานก็ตีความได้ว่า MacBook จะมีแบตเตอรี่ที่ยาวนานขึ้นมาก ในประสิทธิภาพเท่าเดิม)

นอกจากเรื่องประสิทธิภาพต่อวัตต์แล้ว ซีพียูสาย ARM ที่ใช้กันบนมือถือยุคหลังๆ ยังมีแนวคิดเรื่อง asymmetric cores ที่มีคอร์หลายรูปแบบสำหรับงานแต่ละประเภท (ที่เราคุ้นกันในชื่อ big.LITTLE บ้าง คอร์แบบ 4+4 หรือ 6+2 บ้าง) ทำให้ประหยัดพลังงานมากกว่าซีพียูแบบ x86 ที่ทุกคอร์มีสมรรถนะเท่ากัน

แอปเปิลจึงให้เหตุผลว่าการเปลี่ยนมาใช้ซีพียูที่ออกแบบเอง จึงมีประสิทธิภาพต่อพลังงานดีกว่าเพราะปัจจัยนี้ด้วย งานเล็กๆ ก็ให้คอร์เล็กๆ ทำ ไม่ต้องเปลืองไฟใช้คอร์ใหญ่ทำแบบ x86 ในปัจจุบัน (หมายเหตุ: อินเทลเพิ่งเปิดตัว Lakefield ที่ใช้แนวคิดคอร์เล็ก-ใหญ่ แต่คงต้องรออีกสักพักใหญ่ๆ กว่าจะได้เห็นการใช้งานจริง)

ตรงนี้คงต้องรอชิป Apple Silicon วางขายจริงๆ ภายในปีนี้ว่าทำได้ตามที่โม้ไว้แค่ไหน แต่จากฮาร์ดแวร์ทดสอบของแอปเปิลเอง (DTK) ที่ใช้ A12Z SoC ตัวเดียวกับใน iPad Pro 2020 ก็คิดว่าผลิตภัณฑ์จริงไม่น่าจะต่างกันมากนักในเชิงสถาปัตยกรรม

เปลี่ยนเพราะฟีเจอร์จาก SoC ที่ออกแบบเอง

นอกจากปัจจัยเรื่องประสิทธิภาพ/พลังงานแล้ว วงการสมาร์ทโฟนและอุปกรณ์พกพาในช่วงหลังๆ ยังมีชิปหรือนวัตกรรมอื่นๆ ที่เข้ามาทำงานเฉพาะทางบางอย่าง เช่น ชิปถอดรหัสวิดีโอ ชิปเร่งความเร็วคริปโต ชิปประมวลผล AI ฯลฯ ดังที่เห็นในรูปแรกสุดของบทความนี้

แอปเปิลอธิบายว่าเครื่อง Mac ในปัจจุบันประกอบด้วย CPU+GPU ตามมาตรฐาน และชิปพิเศษที่ออกแบบเองคือชิป T2 ที่เอาไว้เก็บข้อมูลลับ (secure enclave) และช่วยประมวลผลงานเฉพาะทางบางอย่าง เช่น สัญญาณภาพหรือความเคลื่อนไหว

แผนการของแอปเปิลคือต้องการรวมทุกอย่างไว้บน SoC ชิ้นเดียว เพื่อประโยชน์ในเชิงสถาปัตยกรรมฮาร์ดแวร์ (เท่าที่ยกตัวอย่างมาคือการทำ unified memory ไม่ต้องแยกแรม CPU/GPU แล้วส่งข้อมูลวิ่งไปมา) และต่อยอดฟีเจอร์เฉพาะทาง (เช่น ตัวถอดรหัสวิดีโอ หรือชิปประมวลผล AI) โดยนำชิปที่มีอยู่แล้วบน iPhone/iPad มาใช้ในเครื่อง Mac ด้วย ไม่ต้องลงทุนใหม่

ฟีเจอร์อื่นที่แอปเปิลพูดถึงคือ ความปลอดภัยที่ระดับฮาร์ดแวร์ ซึ่งมีอยู่แล้วบน iPhone เช่น การคุ้มครองเคอร์เนล ไม่อนุญาตให้รันส่วนขยายของเคอร์เนล (kernel extension) โดย Mac ยุคใหม่จะต้องเขียนไดรเวอร์ผ่าน DriverKit ที่อยู่ใน user space แทน

Device isolation การแยก input–output memory management unit (IOMMU) สำหรับฮาร์ดแวร์แต่ละชิ้น ไม่ต้องมาใช้ IOMMU เดียวกัน

ป้องกันสถานะของหน่วยความจำเป็น write (W) หรือ execute (X) พร้อมกัน ช่วยแก้ปัญหาเรื่องความปลอดภัยของแรม แต่อาจมีปัญหากับ JIT compiler บางตัวที่ต้องใช้งานฟีเจอร์นี้ ซึ่งแอปเปิลแก้ปัญหาด้วยการสลับสถานะ R/X ให้อย่างรวดเร็วแทน

ถ้าลองสังเกตประกาศของแอปเปิลแทบไม่มีคำว่า "เปลี่ยนเป็น ARM" เลยนะครับ แอปเปิลใช้คำว่า "Apple Silicon" ทั้งหมด เพราะความหมายของมันคือการเปลี่ยนจากซีพียู x86 ทั่วไป (Intel) มาเป็นซีพียูที่แอปเปิลออกแบบเอง (ได้ประโยชน์จากเรื่องพลังงาน+ฟีเจอร์) ไม่ใช่การเปลี่ยนมาใช้ซีพียู ARM ทั่วไป (ที่ได้ประโยชน์เฉพาะเรื่องพลังงานอย่างเดียว)

หมายเหตุ: เอาเข้าจริงแล้ว ไมโครซอฟท์ก็มีแนวทางคล้ายกัน เห็นได้จาก Surface Pro X ที่ชิปพิเศษ Microsoft SQ1 ที่ออกแบบร่วมกับ Qualcomm เพียงแต่ไมโครซอฟท์ไม่ได้ลงทุนกับซีพียูของตัวเองมายาวนานเท่ากับแอปเปิล ผลที่ได้รับกลับคืนมาจึงไม่ชัดเจนเท่า

ความเข้ากันได้ของ macOS และ iOS

ปัจจัยสุดท้ายคือเรื่อง compatibility เมื่อแพลตฟอร์มฮาร์ดแวร์ทั้งหมดของแอปเปิลกลายเป็น ARM การพอร์ตโค้ด ฟีเจอร์ หรือแอพจาก iOS (ซึ่งปัจจุบันถือเป็นแพลตฟอร์มที่ใหญ่กว่า macOS มากๆ ในแง่จำนวนผู้ใช้และจำนวนแอพ) จึงทำได้ง่ายขึ้นมาก

แอปเปิลเองก็ไม่ต้องมาคอยพะวง ดูแลแยก 2 สถาปัตยกรรมขนานกันไป (และทำให้ Mac ถูกทอดทิ้งมานานเพราะ iOS สำคัญกว่า ได้ทรัพยากรไปมากกว่า) พอยุบเหลือสถาปัตยกรรมเดียว ฟีเจอร์ของ Mac ย่อมใกล้เคียงกับ iOS มากขึ้น หรืออย่างน้อยก็ไม่ถูกทิ้งห่างเหมือนเดิม

ขั้นตอนการเปลี่ยนผ่าน

การเปลี่ยนผ่านจาก x86 มาสู่ ARM รอบนี้ไม่ใช่เรื่องเจ็บปวดมากนัก เพราะแอปเปิลมีประสบการณ์ตรงจากการเปลี่ยน PowerPC มาเป็น x86 เมื่อ 15 ปีก่อน ขั้นตอนการเปลี่ยนผ่านจึงไม่ต่างกัน

แนวทางเปลี่ยนผ่านของแอปเปิลมี 2 แบบขนานกันไปเช่นเดิม ได้แก่

  • Universal Binary การคอมไพล์โปรแกรมเป็นทั้ง x86 และ ARM รองรับฮาร์ดแวร์ทั้งสองแบบ
  • Rosetta การแปลงไบนารี ARM ไปรันบนฮาร์ดแวร์ x86 จำลอง

แอปเปิลย่อมอยากให้นักพัฒนาแอพเลือกใช้วิธี Universal มากกว่า เพราะคอมไพล์เป็น ARM แบบเนทีฟโดยตรง ซึ่งต้องอาศัยนักพัฒนาปรับแก้แอพใหม่ด้วย Xcode 12 ขึ้นไป แต่ถ้าไม่ได้จริงๆ (เช่น ซอฟต์แวร์ตัวนั้นไม่พัฒนาต่อแล้วแต่ยังมีคนใช้) ก็ยังมีทางออกคือ Rosetta แม้ประสิทธิภาพจะด้อยลงไปบ้าง

ผมคิดว่าการเปลี่ยนผ่านของแอปเปิลรอบนี้น่าจะราบรื่นกว่ารอบที่แล้วมาก เพราะแอปเปิลมีประสบการณ์แล้ว รู้ว่าอุปสรรคอยู่ตรงไหน, คอมพิวเตอร์ยุค 15 ปีให้หลังพัฒนาขึ้นมาก มีทรัพยากรเหลือเฟือสำหรับการรันอีมูเลเตอร์ และที่สำคัญคือตัวสถาปัตยกรรม ARM มีความต่างจาก x86 น้อยกว่า x86 ต่างจาก PowerPC

ตัวอย่างที่แอปเปิลยกมาคือลำดับการวางตำแหน่งเลข (endian) ของ x86 เหมือนกับ ARM ทำให้ไม่ต้องมีปัญหาเรื่องสลับตำแหน่งไบต์เหมือนตอนย้ายจาก PowerPC มาเป็น x86

แต่การเปลี่ยนผ่านก็ย่อมไม่ราบรื่นทั้งหมด 100% เพราะความแตกต่างระหว่างสถาปัตยกรรมย่อมมีอยู่ เช่น Rosetta ไม่รองรับชุดคำสั่งประมวลผลเวกเตอร์ (AVX) ที่มีในซีพียูอินเทล (เพราะ ARM ไม่มีชุดคำสั่งนี้โดยตรง) หรือขนาดของ page file ที่ไม่เท่ากัน (4kB บนซีพียูอินเทล, 16 kB บนซีพียูแอปเปิล)

คำแนะนำของแอปเปิลคือ พยายามอย่าใช้โค้ดที่ระบุสถาปัตยกรรมของซีพียูโดยตรง (เช่น กำหนดเงื่อนไข if ตามสถาปัตยกรรม x86/arm64) หรือเรียกใช้ชุดคำสั่งของซีพียูโดยตรง (เช่น ประมวลผลคำสั่งทางคณิตศาสตร์ด้วย AVX) โดยให้ทำงานผ่านเฟรมเวิร์คของ OS แทน

แอปเปิลบอกว่าพยายามแก้ปัญหาการข้ามสถาปัตยกรรมด้วยเฟรมเวิร์คให้มากที่สุด เช่น งานกราฟิกให้รันผ่าน Metal หรืองานปัญญาประดิษฐ์ให้เรียก Core ML แล้วเฟรมเวิร์คจะไปจัดการเรื่องสถาปัตยกรรมซีพียูให้เอง โดยที่นักพัฒนาไม่ต้องสนใจว่าข้างใต้เป็น x86 หรือ ARM เพราะช่วงแรกๆ จะต้องรองรับทั้งสองสถาปัตยกรรมอยู่ดี

อย่างไรก็ตาม ปัญหาที่น่าจะเจอแน่ๆ คือการเรียกใช้ไลบรารีที่คอมไพล์เป็นไบนารีมาแล้ว (pre-compiled binary) ซึ่งนักพัฒนาอาจไม่มีทางเลือกมากนัก ในช่วงแรกๆ คงไม่มีไบนารีเวอร์ชัน arm64 ให้ใช้งาน ตรงนี้คงต้องอาศัยระยะเวลาในการค่อยๆ เปลี่ยนผ่านไลบรารีไปสู่ ARM

สุดท้าย แอปเปิลย้ำว่าการพอร์ตแอพจาก x86 เป็น ARM จำเป็นต้องรันทดสอบบนฮาร์ดแวร์ Apple Silicon จริงๆ เสมอ แปลว่านักพัฒนาควรต้องหาฮาร์ดแวร์มาทดสอบกัน ไม่ว่าจะเป็นชุด DTK ในช่วงแรก (ที่มีค่ายืม 500 ดอลลาร์) หรือซื้อ Mac เครื่องใหม่ที่เป็น Apple Silicon เมื่อวางขายจริงแล้ว

กล่าวโดยสรุปคือ

  • การเปลี่ยนผ่านน่าจะค่อนข้างราบรื่น สำหรับแอพทั่วๆ ไปที่ไม่มีชุดคำสั่งพิเศษที่โยงกับซีพียู
  • แอพเฉพาะทางหน่อยหรืออิงกับซีพียูมากหน่อย เช่น เกม แอพสายวิทยาศาสตร์ หรือแอพที่เก่ามากๆ ไม่ได้อัพเดตต่อแล้ว ก็คงมีปัญหาอยู่ดี
  • แอปเปิลย่อมจับมือกับผู้พัฒนาแอพสำคัญๆ อย่าง Microsoft Office หรือ Adobe ดังที่เห็นเดโมใน Keynote
  • รายละเอียดของ Apple Silicon ยังมีไม่เยอะนักในตอนนี้ คงต้องรอช่วงที่สินค้าจริงเปิดตัว
  • การเปลี่ยนผ่านย่อมใช้เวลาพอสมควร ใครที่มีประสบการณ์ซื้อ Mac Intel ในช่วงแรกๆ มาแล้วคงรู้ซึ้งกันดีว่า "รอนานอีกสักหน่อยแล้วค่อยซื้อของใหม่จะดีกว่า"

ข้อมูลเพิ่มเติม

นักพัฒนาแอพสาย Mac สามารถหาข้อมูลเพิ่มเติมได้จาก

Blognone Jobs Premium