ทำไม Unified Memory เรื่องที่น่าตื่นเต้น
หนึ่งในเรื่องที่เรา Hype สำหรับ M1 ทั้งหลายมาก ๆ นอกจากเรื่องของการออกแบบ Processor แล้ว ยังเป็นเรื่องของการใช้ UMA หรือ Unified Memory Architecture ตอนฟังครั้งแรกคือ เรา Mind-Blown มาก ๆ เพราะเราไม่เคยเห็นการออกแบบ แบบนี้บนเครื่อง Consumer เลย วันนี้เรามาดูกันว่า ทำไมเราถึง ตื่นเต้นอะไรได้ขนาดนั้น
ทำไมเราต้องใช้ Memory
ก่อนหน้าที่เราจะไปเข้าใจในเรื่องของ UMA เราต้องมาทำความเข้าใจกันก่อนว่า ปกติแล้ว ทำไมเครื่องคอมพิวเตอร์ต้องใช้ Memory ละ
ในเครื่องคอมพิวเตอร์ เราจะแบ่ง Memory ออกเป็น 2 ชนิดก็คือ Primary และ Secondary Memory พูดง่าย ๆ คือ Primary Memory เป็นตัวที่ CPU สามารถที่จะเข้าถึงตรง ๆ ได้เลย ตัวอย่างของมันที่เราน่าจะคุ้นเคยกันคือ RAM (Random Access Memory) และ อีกส่วนคือ Secondary Memory จะเป็นเหมือน Backup ของ Primary Memory อีกที หรือเก็บข้อมูลอะไรบางอย่างเพิ่มเติม โดยที่ CPU จะไม่สามารถเข้าถึงได้โดยตรง ตัวอย่างของ Secondary Memory ที่เราคุ้นเคยกันก็เยอะมาก ๆ เช่น SSD (Solid State Drive) และ HDD (Harddisk)
ถามว่า แล้ว ถ้า CPU เข้าถึงมันตรง ๆ ไม่ได้ แล้วเครื่องมันเข้าถึงข้อมูลใน Secondary Memory ได้อย่างไร วิธีที่เครื่องมันทำคือ มันจะส่งคำสั่งไปเพื่อโหลดข้อมูลจาก Secondary Memory มาพักไว้ที่ Primary Memory แล้ว CPU จึงสามารถโหลดมาต่ออีกทอดเพื่อใช้งานได้
ตัวอย่างที่เราเห็นได้ง่าย ๆ เลยคือ การเล่นเกม ที่ว่าทำไมเราใช้ SSD แทน HDD แล้วเกมมันโหลดเร็วขึ้น นั่นก็เพราะ SSD มีความหน่วง (Latency) ในการเข้าถึงข้อมูลที่น้อยกว่า HDD นั่นเอง นอกจากนั้น ความเร็วของมันก็ยังมากกว่าด้วย ทำให้เครื่องสามารถดึงพวก Model และข้อมูลต่าง ๆ ของเกมจาก Secondary Storage (ในที่นี้คือ SSD) ไปที่ Primary Storage (ในที่นี้คือ RAM) เพื่อไปประมวลผลได้เร็วกว่า และนั่นคือเหตุผลส่วนนึงด้วยว่า ทำไมแค่เปลี่ยนจาก HDD และ SSD ถึงได้ Framerate เยอะกว่านิดหน่อย เพราะเดิมที HDD อาจจะส่งข้อมูลให้ RAM ไม่ทัน เลยทำให้ CPU ต้องมีเวลารอข้อมูลมากขึ้น
ถามต่อว่า ทำไมเราถึงต้องทำแบบนี้ละ เราเอาข้อมูลทั้งหมดจาก Secondary Memory มาวางไว้ที่ Primary เลยละ การจะตอบคำถามนี้เราจะต้องทำความเข้าใจในเรื่องของ Memory Hierarchy กัน มันจะเป็นสามเหลี่ยม ที่แบ่ง Memory โดยใช้ ความเร็วในการเข้าถึง, ความจุ และ ราคา โดยที่ Memory ที่อยู่ด้านบน ๆ หน่อยจะมีความเร็วในการเข้าถึงที่สูงมาก ๆ แต่มีความจุที่ต่ำ และ ราคาแพง ถ้าเราลองสังเกตดู เราจะเห็นว่าพวก Secondary จะไปอยู่ส่วนครึ่งล่างหมดเลย แต่ในขณะที่ Primary จะอยู่ด้านบนหมดเลย เช่น RAM หรือกระทั่ง Register ที่อยู่ใน CPU เป็นต้น
CPU ในปัจจุบันเป็นอะไรที่ทำงานได้เร็วมาก ๆ เราอาจจะเคยเห็น CPU ที่มี Clock Speed แบบ 5 GHz กันในพวก Consumer ตัว Top หน่อย ๆ แล้วอย่าง Intel Core i9 ซึ่ง 5 GHz หมายความว่าใน 1 วินาที CPU จะทำงานได้ 5,000,000,000 คำสั่งเลย ทำให้ถ้าเราใช้ Memory ที่ความหน่วงสูง ๆ เช่น 1 วินาที ก็จะทำให้ CPU จะต้องรอข้อมูลจาก Memory นานมาก ๆ สุดท้ายเราก็จะเจออาการคอขวดจาก Memory ไปนั่นเอง นั่นเลยเป็นสาเหตุที่เราต้องการ Memory ที่เร็ว ๆ แต่อย่างที่บอกว่า ความเร็ว มาพร้อมกับราคาที่ต้องจ่าย ทำให้ถามว่า เราจะเอาข้อมูลทั้งหมดไปใส่ไว้ใน Primary Memory เลยได้มั้ย คำตอบคือได้ แต่จ่ายไหวอะป่าวเบเบ้ !! เท่านั้นเอง
RAM vs GPU Memory
ถ้าเราเคยไปซื้อพวก GPU มาก่อน เราจะเจอแบบว่า นี่นะครับ การ์ดจอ นี้มี RAM มาถึง 10GB เลยนะครับ อ้าว แล้วมันต่างจาก RAM ที่เราใส่ในเครื่องของเราอย่างไรละ
จริง ๆ แล้ว GPU หรือการ์ดจอก็เป็นเหมือนคอมพิวเตอร์อีกเครื่องเลย มันมีหน่วยประมวลผลในตัวเลย แต่เป็นหน่วยประมวลผลที่ออกแบบมาให้ทำงานกับพวกงาน Graphic โดยเฉพาะเลย เช่นการคำนวณ Matrix ที่รวดเร็วมาก ๆ อะไรพวกนั้น ทำให้มันจะต้องมี Memory ภายในของมันแยกจาก ตัว CPU ไปอีกที
แต่ความพีคมันยังไม่จบ เรายกตัวอย่างเป็นเคส การเล่นเกม เหมือนเดิม เราบอกว่า Model และ Texture ของเราอยู่ใน SSD ของเรา ที่เป็น Secondary Memory ตัว GPU ไม่สามารถเข้าถึงได้ตรง ๆ สิ่งที่มันทำคือ มันจะต้องไปบอกให้ CPU ไปเอาข้อมูลมา CPU ก็เข้าถึงตรงไม่ได้อีก มันก็ต้องไปโหลดมาจาก จาก SSD มาลง RAM ของ CPU แล้วค่อย Copy ไปหา RAM ของ GPU อีกทีเป็นทอด ๆ ทำให้มันต้องใช้เวลาอยู่เหมือนกัน
Unified Memory เข้ามาแก้ไขปัญหาเรื่องนี้ได้เลย
Apple ได้ Implement UMA หรือ Unified Memory Architecture เข้ามาใน Apple Silicon สิ่งที่มันเป็นก็คือ แทนที่เราจะมี Memory ใน CPU และ GPU แล้วเราจะต้อง Copy มันไปมา เราก็มี Memory อยู่ Pool นึงใหญ่ ๆ เลย แล้วใครอยากจะเข้าถึง หรือจอง ก็ใช้งานได้เลย
ตัวอย่างในเคสเกมเหมือนกัน จากเดิมที่เราจะต้อง Copy หลาย ๆ ทอด ตอนนี้ก็เหลือแค่ CPU ไปสั่ง Copy จาก SSD แล้วมาแปะใน Unified Memory แล้วไปบอก GPU ว่าโอเค ข้อมูลพร้อมแล้ว GPU ก็จะเข้าไปอ่าน Memory ในที่อยู่ที่ CPU วางไว้เลย แล้วทำงานต่อได้เลย โดยที่ไม่ต้องคัดลอกข้อมูลซำ้เลย ทำให้สามารถลดเวลาในการ Transfer ในส่วนนี้ไปได้เยอะมาก ๆ
แต่ความ Challenge คือ โดยทั่ว ๆ ไปแล้ว ถ้าเราเดินไปซื้อคอมพิวเตอร์ทั่ว ๆ ไป เราจะเห็นว่า RAM ที่เราใช้จะอยู่ที่มาตรฐาน DDR4 (ตอนนี้มี DDR5 ออกมาแล้วนะ) แต่ GPU ตอนนี้มันเลยไป GDDR6 ที่เร็วกว่าเยอะมาก คือ ถ้าเป็น RAM DDR4 3200 MHz มันจะได้ 25.6 GB/s แต่ใน GDDR6 ของ GPU จะอยู่ที่ 768 GB/s เลย ห่างกันเยอะมาก ๆ แล้วถ้าเราบอกว่าเราเอา Memory มาวางไว้ใน Pool เดียวกันเลย Memory มันจะต้องเร็วมากพอ เพื่อให้ GPU ทำงานได้อย่างรอเวลาน้อยที่สุด
นั่นทำให้ Unified Memory บน Apple Silicon ต้องเร็วมาก ๆ เพื่อให้มันรัน GPU ได้ อย่างตัวที่เร็วที่สุดของ Apple คือ M1 Max เขาจะมี Bandwidth ของ Unified Memory อยู่ที่ 400 GB/s เลย ที่ Apple เลือกใช้ RAM แบบ LPDDR5 ที่ 6400 MHz ที่ถ้าเราเทียบกับ CPU แล้วเราจะบอกเลยว่า โห เร็วมาก ๆ แล้ว แต่ถ้าเราบอกว่ามันต้องรัน GPU แล้วเราเทียบดู เราจะเห็นว่ามันช้ากว่า GDDR6 บน GPU รุ่นใหม่ ๆ อยู่พอสมควร (หรือถ้าเทียบกับพวก RTX3090 ที่ใช้ GDDR6X ก็คือต่างแบบลิบเลย) แต่ต้องอย่าลืมว่า Unified Memory มันตัดเวลาในการ Copy ข้อมูลไป ทำให้จริง ๆ แล้วการใช้ UMA อาจจะทำให้เร็วขึ้นได้
นอกจากนั้น การที่มันไม่ต้อง Copy นั่นหมายความว่า เราตัด Operation ไปได้เยอะมาก นั่นหมายถึงการใช้ไฟที่น้อยลงด้วย ทำให้มันประหยัดพลังงานเข้าไปอีก แล้วยังแถมอีกว่า อุปกรณ์ทั้งหมด รันอยู่บน SoC เดียวกัน ยิ่งทำให้ Apple ลดพลังงานในการสื่อสารระหว่างอุปกรณ์ไปได้อีก ทำให้ Apple Silicon มีประสิทธิภาพ ต่อ พลังงานสูงมากขึ้นไปอีก
ขนาดก็ทำให้น่าสนใจ
อย่างที่บอกว่า UMA มันทำให้อุปกรณ์ทุกอย่างใน SoC สามารถเข้าถึง Memory ชุดเดียวกันได้ ถ้าเราบอกว่าเครื่องคอมพิวเตอร์เรา RAM 32 GB มันก็ดูปกติใช่มั้ยฮ่ะ แต่ถ้าเราบอกว่า GPU ของเรา RAM 32 GB หรือ 64 GB ไปเลยละ มันเจ๋งมาก ๆ เลยนะ
สำหรับการใช้งานทั่ว ๆ ไปอย่างการทำเอกสาร หรือเล่นเกม พวกนั้นจะไม่ได้ใช้ GPU Memory ที่สูงหรืออะไรเลย แต่ถ้าเราบอกว่า เราทำงานกับพวก Deep Learning Training ต่าง ๆ ที่มี Model ขนาดใหญ่ มันก็จะใช้ Capacity ที่สูง ๆ เช่นแบบ 30 GB อะไรแถว ๆ นั้นเลย แต่ถ้าเราไปหาซื้อ GPU ปกติมา การจะหา GPU ที่มี RAM สัก 30GB ราคาไม่ถูกเลยนะ เราอาจจะต้องไปเล่น GPU สำหรับการทำ Deep Learning โดยเฉพาะเช่นพวก Nvidia Tesla เลยแถว ๆ นั้น เพราะ GPU Consumer อย่างตัว Top สุด ๆ เลยคือ RTX3090 มี Memory แค่ 24 GB เท่านั้นเอง แล้วราคาไม่น่ารักเท่าไหร่ในช่วงนี้
แต่ถ้าเราหันมามองที่ตัว Macbook Pro M1 Max ที่มันยัด Unified Memory ได้ถึง 64GB เราอาจจะให้ตัว Model เราล่อไป 50-60 GB ได้เลยนะ แล้วก็คือให้ GPU ไปใช้มันยังทำได้เลย แต่ราคามันอยู่ที่แสนกว่าบาทเท่านั้นเอง ถือว่าถูกมาก ๆ เมื่อเทียบกับถ้าเราไปหา GPU Memory ประมาณนั้นอาจจะอยู่ที่ตัวและแสนแล้วมั้ง ยังไม่รวมพวก Component อื่น ๆ อีกนะ ถึงความเร็วมันจะได้ไม่เท่า GPU พวกนั้นเลย แต่ในแง่ของความจุ ต่อราคา เรามองว่า Apple Silicon เลยเป็นตัวเลือกที่ไม่เลวเลยละ แถมยังประหยัดพลังงานอีก ก็คือ เรามองว่ามันตอบโจทย์การทำ Deep Learning ใน Model ขนาดกลาง ๆ ถึงใหญ่ ๆ ได้เลย
SSD ที่โคตรเร็ว
อย่างที่เราบอกว่า เวลาเครื่องจะทำงาน มันจะต้องดึงข้อมูลจาก Secondary Memory ในเคสของพวก Macbook ทั้งหลายก็คือ SSD ทำให้มันจะต้องมีเวลาในการดึงข้อมูลเข้ามาอีก ซึ่งใน SSD เองมันก็มีหลายเกรด หลายความเร็วมาก ๆ แต่สิ่งที่ Apple เลือกใช้คือ SSD ที่มีความเร็วสูงมาก ๆ หลักเฉียด ๆ 5,000 MB/s เลยทีเดียว หรือตีคร่าว ๆ ก็เกือบ 5 GB/s เลยทำให้ตัวข้อมูลสามารถถูกอ่านจาก SSD ไปยัง Unified Memory ได้เร็วมาก ๆ
ตัวอย่างนึงที่ทำให้เราเห็นประโยชน์ของ SSD ที่เร็วมาก ๆ กับ Unified Memory คือ เมื่อเราใช้งานเครื่องจน Primary Memory มันเต็ม เครื่องจะเริ่มทำสิ่งที่เรียกว่า Paging หรือก็คือการเอา ข้อมูลจากใน RAM ไปพักไว้ใน SSD ของเราเพื่อให้เรามีที่เหลือใน RAM มากพอที่จะเอาของใหม่ใส่เข้าไปได้ แล้วพอเราสลับกับมาใช้ของที่เอาไปพักอยู่ใน SSD เราก็จะเจออาการที่เครื่องมันหน่วง ๆ เมื่อเราเปิดโปรแกรมเยอะ ๆ เกินไปนั่นเอง
แต่เพราะการ Implement SSD ความเร็วสูง ๆ ทำให้กระบวนการตรงนั้นมันลดเวลาลงได้เยอะมาก ทำให้พวก Apple Silicon มันติดพวก Swap หรือต้องทำ Paging มันไม่รู้สึกอะไรเท่าไหร่เลย เลยทำให้ Unified Memory มันยิ่งโหดเข้าไปอีก เพราะ SSD เป็นตัวซับที่ดี
สรุป
Unified Memory เรียกได้ว่า เป็นอะไรที่เราชอบมาก ๆ เพราะมันทำให้การทำงานในแง่ของ Processing มันทำได้เร็วขึ้นมาก เราเขียนโปรแกรมที่อาศัย Memory Bandwidth ได้เยอะขึ้นมาก ๆ และโปรแกรมหลาย ๆ ตัวในกลุ่มงาน Professional Production ก็อาศัยเรื่องพวกนี้ทำให้ทำงานได้เร็วขึ้นมาก ๆ อย่างที่เราเห็นกันในการทดลองใช้ต่าง ๆ แต่แน่นอนว่า ข้อเสียของมันก็มีเหมือนกัน เพราะ Memory มันถูกฝังมาใน Logic Board ของเราเลย ทำให้การ Upgrade เป็นเรื่องที่ไม่สามารถทำได้เลย ดังนั้นเวลาเราซื้อเครื่องคือเราจะต้องคิดเผื่อพอตัวเลยว่า ในอนาคตอันใกล้เราจะใช้เท่าไหร่