Asymmetric multiprocessing ความลับการประหยัดพลังงานของ Apple Silicon
ช่วง 2-3 ปีที่ผ่านมา Apple บอกว่า จะ Move on ตัวเองจาก Intel CPU แล้วไฟซบ CPU ที่ทำขึ้นมาเองแทน และจากที่เราเห็นกันมา เรารู้เลยว่า Apple Silicon คือ SoC ที่กินไฟได้ต่ำแบบ ต่ำเตี้ยมาก ๆ เมื่อเราเข้าไปดูที่ลักษณะการออกแบบ CPU Core เราจะเห็นได้เลยว่า เขาออกแบบมาให้มี CPU Core อยู่ทั้งหมด 2 แบบด้วยกัน คือ Performance Core และ Efficiency Core เราเรียกว่า Heterogeneous computing ที่เป็นเบื้องหลังที่ทำให้มันประหยัดไฟ และ มีประสิทธิภาพในการทำงานที่สูงได้
Asymmetric multiprocessing คืออะไร ?
Asymmetric multiprocessing มันคือการใช้งาน หน่วยประมวลผล หรือ Core บนหน่วยประมวลผลมากกว่า 1 ประเภทด้วยกัน ดังนั้น จริง ๆ ถ้าเราใช้งาน CPU ร่วมกับ GPU เราจะเรียกว่า Heterogeneous computing ก็ได้แล้วนะ แต่วันนี้เราจะพูดถึงในส่วนของ CPU เท่านั้น
ยกตัวอย่างใน Apple Silicon ที่มันจะมีการแบ่งออกมาเป็น Performance และ Efficiency Core ในทั้งสองประเภทนี้ ก็จะมีลักษณะ การออกแบบที่แตกต่างกัน เหตุผลหลัก ๆ ของการออกแบบลักษณะนี้บน Apple Silcon คือ การประหยัดพลังงาน และ ประสิทธิภาพในการทำงาน ที่สูงขึ้น
ต่างจาก Symmetric multiprocessing ที่เราใช้งานกันมาเมื่อก่อน ที่เราจะใช้หน่วยประมวลผล หรือ Core บนหน่วยประมวลผลแบบเดียวกันในการทำงานร่วมกัน ถ้าเรานึกภาพไม่ออก ให้เราดูที่พวก CPU ของฝั่ง AMD หรือ Intel Generation ก่อน ๆ ก็ได้ อาจจะมี 8 Cores หรืออะไรพวกนั้น ซึ่งแต่ละ Core บน CPU จะมีลักษณะที่เหมือนกันหมด ไม่ได้แบ่งว่าชั้นเป็น Core อะไร ทำหน้าที่อะไรเป็นพิเศษ
Asymmetric multiprocessing ไม่ใช่เรื่องใหม่บน Apple Silicon
หลาย ๆ คนได้ยินเรื่องการใช้งาน Asymmetric multiprocessing น่าจะช่วงที่ Apple Silicon เปิดตัวครั้งแรกในรุ่น M1 แต่จริง ๆ แล้ว ลักษณะสถาปัตยกรรมการออกแบบลักษณะนี้ Apple ไม่ได้เป็นคนแรกที่เอาเข้ามาใช้งาน
การออกแบบลักษณะนี้จริง ๆ มาจากสถาปัตยกรรมที่ ARM ออกแบบมาใช้ก่อนหน้านี้ คือ big.LITTLE ที่อยู่ในพวก SoC ของอุปกรณ์อย่างโทรศัพท์มือถือ และ Tablet มานานมาก ๆ แล้ว น่าจะมีเกือบ ๆ 10 ปีได้แล้วแหละ
เหตุผลจริง ๆ ที่ทำให้เกิดลักษณะการออกแบบเช่นนี้ขึ้น จริง ๆ เกิดจากเมื่อเราย่อส่วนหน่วยประมวลผลลงไปที่พวกอุปกรณ์เคลื่อนที่ มันมีข้อจำกัดในเรื่องของการบริโภคพลังงาน ถ้ามันใช้พลังงานเยอะ อุปกรณ์ก็จะใช้งานได้ระยะเวลาสั้น ก่อนที่เราจะเสียบชาร์จ หรือ ถ้าเราออกแบบมาให้มันบริโภคพลังงานได้น้อย ๆ ก็จะใช้งานได้อย่างยาวนาน หรือสามารถใช้ Battery ที่ขนาดเล็ก และ เบากว่าได้
ข้อจำกัดของอุปกรณ์เคลื่อนที่ และ ความต้องการของลูกค้าที่ต้องการพลังในการประมวลผลมากขึ้น ทำให้ต้องหาทางเพื่อจะหลุดออกจากข้อจำกัดทั้งสองให้ได้ เลยเกิดไอเดียสุดบรรเจิดขึ้นมาว่า งั้นทำไมเราไม่ใส่ทั้ง Core ที่มีพลังเยอะ ๆ คู่กับ Core ที่ประหยัดไฟไปละ เวลาไหน เราต้องการประหยัดไฟ เราก็ให้ Core ที่ประหยัดไฟกว่าทำงานเป็นหลัก หรือกลับกัน ถ้าเราต้องการพลังในการประมวลผลเยอะ ๆ เราก็ให้ Core ที่แรงทำงานแทน
ตอนนั้นที่ออกมา ก็เลยมีการจับคู่เอา Core ARM Cortex ที่ Version ต่ำกว่า มักจะมีความสามารถ และ พลังในการประมวลผลที่ต่ำกว่า แต่บริโภคพลังงานน้อยกว่ามาใส่เป็น Core ขนาดเล็ก เรียกว่า Little และ Cortex ที่ Version สูงกว่า มาพร้อมกับความสามารถ และ พลังในการประมวลผลที่สูงกว่าแลกมาด้วยการบริโภคพลังงานที่สูงกว่าขึ้นมาใส่เป็น Big ทำให้มันตามชื่อ ARM big.LITTLE นั่นเอง
Performance Core ต่างจาก Efficiency Core ยังไง ?
เรารู้ละว่า มันมี Core ใหญ่ Core เล็กที่มีปริมาณการบริโภคพลังงานที่แตกต่างกัน แล้วถามว่า ด้านในละ มันมีอะไรที่แตกต่างกัน ทำให้มันมีการ บริโภคพลังงาน และ ประสิทธิภาพที่แตกต่างกัน
ในตัว CPU Core เปรียบง่าย ๆ เหมือนกับโรงงานนึงเลย มันจะมีคนทำงาน เราเรียกว่า Execution Unit ซึ่งแต่ละคน ก็จะถนัดทำหน้าที่แตกต่างกันไป เช่น การคำนวณพวกทศนิยมต่าง ๆ ก็จะเป็นหน้าที่ของ Floating Point Unit (FFU) หรือกลุ่มที่ทำหน้าที่คำนวณพวก การดำเนินการทางคณิตศาสตร์และตรรกศาสตร์ เราจะเรียกว่า Arithmetics Logic Unit (ALU) ในสมัยก่อน ใน CPU Core ก็จะมีแค่ Execution Unit อย่างละ 1 ตัวเท่านั้น จนในปัจจุบัน เรามีความสามารถในการสเกลออกมา เพื่อให้มีประเภทละหลาย ๆ ตัวได้แล้ว
ไส้ในของพวกนี้ จริง ๆ มันก็คือ วงจรทางไฟฟ้านั่นแหละ ทำให้การที่เราจะใส่พวก Execution Unit เข้าไป จริง ๆ แล้วมันก็คือ การปริ้นพวกวงจรใส่เข้าไปตรง ๆ บน CPU เลย นั่นทำให้เราไม่สามารถมาเติมพวกนี้ทีหลังได้นะ ตัวอย่างด้านบน เอาแบบ Basic สุด ๆ สำหรับคนที่เรียนคอมพิวเตอร์คือ Full-Adder สำหรับบวกเลข
ดังนั้น ถ้าเราเพิ่ม Execution Unit เข้าไปเยอะขึ้นเรื่อย ๆ ก็ทำให้เราสามารถประมวลผลข้อมูลหลาย ๆ ชุดพร้อม ๆ กันได้เยอะมากขึ้น ทำให้เหมือนประสิทธิภาพของเราก็จะสูงขึ้นตามไปด้วยนั่นเอง แต่อย่างที่บอกคือ มันเป็นวงจรไฟฟ้า ยิ่งเยอะวงจรเราก็ยิ่งใหญ่ขึ้นเรื่อย ๆ ทำให้มันต้องอาศัยไฟฟ้าในการหล่อเลี้ยง และ ใช้งานสูงขึ้นเช่นกัน
อีกสาเหตุที่ทำให้ CPU บริโภคพลังงานเพิ่มมากขึ้นนั่นคือ การเพิ่ม Clock Speed หรือสัญญาณนาฬิกา ค่านี้เป็นการบอกว่า ใน 1 วินาที CPU และ อุปกรณ์ต่าง ๆ ที่พึ่งพาสัญญาณนาฬิกาจะทำงานกี่ครั้งต่อวินาที ยิ่งเยอะ ก็ยิ่งเร็ว และ ยิ่งบริโภคพลังงานมากขึ้นเรื่อย ๆ
ยกตัวอย่างเช่น CPU ของ M1 Pro และ Max เอง ตัว Efficiency Core มันจะวิ่งสูงสุดได้แค่ 2.064 GHz แต่กลับกัน Performance Core ที่เร็วกว่า วิ่งไปได้ไกลถึง 3.220 GHz แถมยังมีพวก Execution Unit ที่เยอะกว่า กว้างกว่า ทำให้มันกินไฟเยอะกว่ามาก แต่ทดแทนงานเบา ๆ ด้วย Efficiency Core ที่กินไฟน้อยกว่าไป ทำให้มันบริโภคพลังงานต่ำมาก ๆ
CPU เลือกงานให้ไปรันใน Core แบบไหนยังไง ?
ในการเลือก Core ที่จะทำงานแต่ละงาน จริง ๆ แล้วใน CPU ทั่ว ๆ ไป เขาจะมีตัว Scheduler อยู่แล้ว มันจะเป็นนักจัดแจง จัดแจงหมดว่า งานนี้จะไปอยู่ Core ไหน อะไรจะไปตรงไหน ถึงจะมีประสิทธิภาพสูงสุดตามที่ผู้สร้างออกแบบมาให้
แต่ความยากของกลุ่มที่ใช้ Core แตกต่างกันคือ แล้วงานแบบไหนมันจะใช้ Core แบบไหนกันละ เท่าที่เราลองดูใน Documentation ของ Apple เอง มันจะมีการเซ็ตค่า QoS ในการทำงานได้ด้วย เราเคยเขียนเล่าเรื่องนี้ไว้แล้ว ลองกลับไปอ่านกันได้
กับถ้าอยากอ่านบทวิเคราะห์ลึก ๆ จริง ๆ เราอ่านเจอเว็บด้านบน ทดลองค่อนข้างละเอียดเหมือนกัน ทำให้รู้เลยว่า การเขียนโปรแกรม หรือคิดวิธีการมาเพื่อจัดการ Core ที่แตกต่างกันแบบนี้ เป็นเรื่องที่ยากมาก ๆ เลยทีเดียว ที่จะทำให้ ได้ประสิทธิภาพสูงสุด แต่ใช้ไฟน้อยที่สุด
สรุป
การออกแบบ CPU หรือ SoC ในสมัยใหม่ รอบ 4-5 ปีนี้ เริ่มออกแบบในลักษณะของ Heterogeneous CPU Core เพิ่มมากขึ้นเรื่อย ๆ จากเดิมแรกเริ่มอยู่ในกลุ่มของพวกโทรศัพท์อย่าง ARM big.LITTLE จน Apple เปิด Apple Silicon ก็ถือว่าเป็นครั้งแรก ๆ ที่สถาปัตยกรรมแบบนี้เข้ามาอยู่ในเครื่องคอมพิวเตอร์ทั่ว ๆ ไป และ ไม่นานฝั่ง Intel ก็สนองตามออกมาอีกเหมือนกัน ก็ต้องรอดูนะว่า แนวทางต่อจากนี้จะไปทางไหน ถือว่าเป็นเรื่องน่าสนใจมาก ๆ ในวงการการออกแบบ CPU เลย