เจาะประเด็น
Hardware / GPU
GPU อ่านหน่วยความจำแบบไหน ถึงได้เร็วเกิน CPU หลายเท่าตัว
ไม่ใช่แค่ "มีแกนเยอะกว่า" แต่สถาปัตยกรรมหน่วยความจำของ GPU มันต่างไปจาก CPU โดยสิ้นเชิง และนี่คือเหตุผลว่าทำไม
ทีมข่าว เอไอไทย.com
⏱ อ่าน 4 นาที
เคยสงสัยไหมว่าทำไมเกมหรือ AI ถึงต้องพึ่ง GPU ขนาดนั้น? คำตอบไม่ได้อยู่ที่ "แรง" แต่อยู่ที่ "วิธีคิดเรื่องข้อมูล" ที่ต่างกันโดยสิ้นเชิง
เรื่องนี้เป็นอะไรที่คนใช้คอมพิวเตอร์มานานอย่างผมว่าคุ้นๆ ดี คือเรามักถูกสอนมาตลอดว่า GPU มันแรงเพราะมันมีแกนประมวลผลเยอะกว่า CPU เป็นร้อยเท่า แล้วจบ แต่จริงๆ แล้วมันลึกกว่านั้นมาก บทความจากบล็อก doubleword.ai เค้าฉีกแนวคิดนี้ทิ้งไปเลย โดยชี้ให้เห็นว่าหัวใจจริงๆ ของความต่างมันอยู่ที่ "สถาปัตยกรรมของหน่วยความจำ" ต่างหาก ที่ทำให้ GPU ทำอะไรบางอย่างได้เร็วกว่า CPU ชนิดถอดด้าม
พูดง่ายๆ คือถ้า CPU เป็นนักปราชญ์ที่อ่านหนังสือทีละเล่ม ละเอียด รอบคอบ ทำอะไรทีละอย่างแล้วต้องคิดให้ลึกซึ้ง GPU ก็คือทีมงานห้องสมุดทั้งทีมที่วิ่งไปหยิบหนังสือเป็นชั้นๆ พร้อมกัน แล้วเอามาเปิดเฉพาะหน้าที่ต้องใช้เท่านั้น มันไม่ได้ "ฉลาดกว่า" แต่มัน "ถึกกว่า" ในแบบที่งานบางประเภทต้องการ
สิ่งที่บทความนี้ชี้ให้เห็นคือ ปัญหาหลักของ CPU ไม่ได้อยู่ที่ความเร็วในการคำนวณ แต่อยู่ที่ "คอขวด" ของการส่งข้อมูล หรือที่เรียกว่า Memory Wall — กำแพงที่ว่าด้วยเรื่องเวลาในการดึงข้อมูลจาก RAM เข้ามาสู่หน่วยประมวลผล ซึ่งมันช้ากว่าความเร็วในการคำนวณภายใน CPU มากๆ เหมือนเรามีเครื่องคิดเลขที่คิดเลขเร็วระดับแสง แต่ต้องรอคนค่อยๆ พิมพ์โจทย์ลงไปทีละตัว CPU แก้ปัญหานี้ด้วยการมีแคช (Cache) หลายชั้น ที่เก็บข้อมูลใกล้ๆ ตัวไว้ก่อน แต่ถ้าข้อมูลที่ต้องการไม่ได้อยู่ในแคช ก็ต้องไปดึงจาก RAM ซึ่งกินเวลานับร้อยรอบสัญญาณนาฬิกา
ประโยคนี้คือกุญแจสำคัญของเรื่องทั้งหมด GPU ไม่ได้พยายามหนีความช้าของ RAM ด้วยการใช้แคชใหญ่ๆ เหมือน CPU แต่ใช้วิธี "ซ่อน" ความช้านั้นด้วยการมีเธรด (threads) จำนวนมหาศาลทำงานพร้อมกัน ถ้าเธรดหนึ่งต้องรอข้อมูลจาก RAM อีกร้อยเธรดก็ยังทำงานต่อไปเรื่อยๆ ไม่ต้องหยุดรอทั้งทีม เหมือนร้านอาหารที่มีพนักงานเสิร์ฟร้อยคน ถ้าคนหนึ่งเดินไปส่งอาหารที่โต๊ะไกลๆ คนอื่นๆ ก็ยังเสิร์ฟโต๊ะใกล้ๆ ต่อไปได้ ร้านไม่เคยหยุดนิ่ง
ความเข้าใจตรงนี้เปลี่ยนวิธีมองการเขียนโปรแกรมไปเลยครับ สิ่งที่บทความนี้สื่อคือ ถ้าคุณยังเขียนโค้ดบน GPU ด้วยวิธีคิดแบบ CPU คุณจะไม่ได้ประโยชน์อะไรเลยจากความแรงของมัน เพราะหัวใจไม่ได้อยู่ที่การลดจำนวนครั้งในการอ่านหน่วยความจำ แต่อยู่ที่การสร้างงานให้มี "เธรด" เยอะพอที่จะกลบเวลารอคอยได้นั่นเอง
นี่คือเหตุผลว่าทำไมงานประเภท Matrix Multiplication หรือการประมวลผลภาพถึงเหมาะกับ GPU มาก เพราะมันเป็นงานที่แตกเป็นชิ้นเล็กๆ อิสระต่อกันได้หมด แต่ถ้าเป็นงานที่ต้องพึ่งพาข้อมูลลำดับก่อนหลังต่อเนื่องกัน เช่น การประมวลผลลิสต์แบบ Linked List หรืองานที่ต้องรอผลก่อนหน้าตลอดเวลา ต่อให้ใช้ GPU ก็อาจช้ากว่า CPU ที่ฉลาดกว่าในการจัดการกับ dependency
สำหรับสาย AI อย่างเรานี่คือเรื่องพื้นฐานที่ควรรู้ไว้ เพราะมันคือเหตุผลว่าทำไมการเทรนโมเดลใหญ่ๆ ถึงต้องใช้ GPU จำนวนมาก ไม่ใช่แค่เพราะมัน "คำนวณเลขเก่ง" แต่เพราะมัน "กินข้อมูลได้เป็นกอบเป็นกำ" ในเวลาเดียวกัน โดยไม่สะดุดกับความหน่วงของหน่วยความจำ ซึ่งเป็นด่านแรกที่ต้องทำความเข้าใจก่อนจะไปสู่เรื่อง CUDA Cores หรือ Tensor Cores อะไรพวกนั้น
แล้วมันแปลว่าอะไร?
การเลือกใช้ GPU ไม่ได้แปลว่าโค้ดทุกอย่างจะเร็วเสมอไป ถ้างานของคุณเป็นแบบ Serial (ทีละขั้นตอน) CPU ยังคงชนะขาด เพราะมันมี Latency ต่ำกว่า แต่ถ้าเป็นงานแบบ Parallel (พร้อมกันได้) GPU คือคำตอบ เพราะมันออกแบบมาเพื่อ "กลบ" ความหน่วงด้วยปริมาณงาน
แล้วทำไมต้องสนใจ?
เพราะในยุคที่ AI โตทุกวัน การเข้าใจว่า Hardware คิดยังไง จะช่วยให้คุณเขียนโค้ดได้ฉลาดขึ้น ไม่ใช่แค่ลอกโค้ดจากตัวอย่างมาแล้วรัน แต่รู้ว่าทำไมมันถึงรันเร็วหรือช้า และจะปรับยังไงให้มันเร็วขึ้นอีก
สรุปให้ฟังแบบไม่ต้องมานั่งง้อ — GPU ไม่ได้ "ฉลาด" กว่า CPU แต่มัน "บ้าพลัง" ในการทำงานซ้ำๆ พร้อมๆ กันได้เป็นหมื่นๆ เธรด และความบ้าพลังนี้แหละที่ชนะใจวงการ AI ไปแล้ว ถ้ายังไม่เข้าใจตรงนี้ ต่อให้ซื้อ GPU แพงๆ มาใช้ก็เหมือนเอาซูเปอร์คาร์ไปขับในซอยแคบๆ นั่นแหละครับ
ที่มา: Hacker News — อ่านต้นฉบับ
ความคิดเห็น 3
กำลังโหลดความคิดเห็น...