Technology

CPU vs GPU มันต่างกันยังไง ทำไมเราต้องมีทั้งคู่

By Arnon Puitrakul - 02 ตุลาคม 2023

CPU vs GPU มันต่างกันยังไง ทำไมเราต้องมีทั้งคู่

คำถามที่ตอนเราเด็ก ๆ เราก็สงสัยนะว่า ทำไม คอมพิวเตอร์เราต้องมีการ์ดจอด้วย ทำไมเราถึงไม่เอา CPU ทำงานทุกอย่างไปเลยละ จะได้ไม่ต้องเสียเงินซื้อด้วย เออ อีเด็กบ้านี่มันก็สงสัยไปเรื่อยเนอะ ฮ่า ๆ วันนี้เราเรียนคอมพิวเตอร์มา เราได้คำตอบละ เรามาเล่าให้อ่านกันดีกว่า ทำไมเราจะต้องมี GPU ด้วย ทำไมเราใช้ CPU อย่างเดียวไม่ได้เหรอ

CPU ทำหน้าที่อะไร ?

ต้องบอกก่อนนะว่า CPU ไม่ใช่กล่องใหญ่ ๆ ที่รวมอุปกรณ์อยู่ข้างในนะ นั่นเคส แต่ CPU มันเป็น Chip อันใหญ่ประมาณนึงที่เราจิ้มไว้ที่ Socket ของ Motherboard ประเด็นนี้ เราเข้าใจตรงกันแล้วนะ ไม่เอานะ ไปบอกว่าเคสคือ CPU นี่ปวดหัวนะ

มาที่หน้าที่ของมันบ้าง ตามชื่อของมันเลย CPU ย่อมาจากคำว่า Central Processing Unit หรือภาษาไทย เราแปลได้ประมาณว่า หน่วยประมวลผลกลาง มันทำหน้าที่ในการประมวลผลทุกอย่างของเครื่อง

มันทำทุกอย่าง ตั้งแต่การประมวลผล คิดง่าย ๆ ว่ามันคือ เครื่องคิดเลขที่หรูหราหมาเห่ามาก ๆ คำนวณได้หลายอย่างมาก ๆ รวมไปถึงพวกการสั่งการอุปกรณ์ต่าง ๆ ด้วย เช่น เราเราเล่นเกม แล้วมันจะต้องโหลดข้อมูลพวก พื้นผิว หรือ Texture เข้ามา มันก็ต้องทำหน้าที่คุยกับ SSD ของเราว่า นาย ๆ เราขอ ข้อมูล Texture ที่ตรงนี้ ๆ หน่อยนะ เราจะรอนะ

ดังนั้น เราจะเห็นว่า CPU เหมือนบอสใหญ่ที่คอยคุมทุกอย่าง เกือบทุกอุปกรณ์ในเครื่องของเราดังนั้น คุยกับทุกคน ทำให้ตัว CPU ออกแบบมาให้รองรับการทำงานที่กว้างขว้างมาก ๆ มีวงจรในการคำนวณหลากหลายประเภท รองรับข้อมูลได้หลากหลายประเภทเช่นเดียวกัน

ถ้าเอาในโครงสร้างจริง ๆ คือมันก็จะมีวงจรสำหรับชุดคำสั่งหลาย ๆ อย่างเช่น การคำนวณเลขทั่ว ๆ ไป การคำนวณพวก Floating Point และอื่น ๆ อีกมากมาย ทำให้ CPU มันเป็นอุปกรณ์ที่ทำได้หลายอย่างมาก ๆ แต่มันไม่ได้ทำงานได้เร็ว และ มีประสิทธิภาพมากเท่าไหร่

ตัวอย่างของงานที่ CPU ทำได้กากมาก ๆ เราต้องพาทุกคนย้อนกลับไปที่ยุคนึงที่ชาว PC ชอบแควะชาว Console ว่า Can you run Crysis?

ในวีดีโอนี้ เขาลองอะไรสนุก ๆ ด้วยการ เอา CPU ตัวแรง ๆ จำนวน Core เยอะ ๆ อย่าง Threadripper ไปรัน Crysis เลย เราจะเห็นเลยว่า Framerate ที่ได้มันไม่น่าเล่นได้เท่าไหร่นะ ยังไม่ถึง 30 FPS ด้วยซ้ำ แต่กลับกัน ถ้าเอา GPU มาเล่น แน่นอนว่าเกมเก่าขนาดนั้น กับ GPU ยุคใหม่หน่อยก็กดไป 700 FPS ++ แล้วละ พอจะเห็นแล้วใช่มั้ยครับว่า CPU มันก็มีเรื่องที่มันไม่เก่งอยู่เหมือนกัน

ทำไม CPU รัน Crysis ได้ห่วยขนาดนี้ละ ?

เพื่อจะอธิบายคำตอบของคำถามนี้ได้ เราจะต้องมาอธิบายกันก่อนว่า งานอย่างการรัน Crysis  มันจะต้องทำอะไรบ้าง

อย่างแรก มันจะต้องโหลดข้อมูลที่จำเป็นขึ้นมาก่อน พวก Model, Texture และ Shader ที่จำเป็นขึ้นมา ยกตัวอย่างเช่น เกม Dead Space Remake พวกนี้คือ เขาออกแบบมาสำหรับเครื่อง Console Generation ใหม่ ๆ ที่ใช้งาน SSD เขามียัน Warning ว่าถ้าไม่ได้ใช้ SSD ไปใช้ HDD อาจจะมีอะไรแปลก ๆ ได้

ก็เป็นเพราะขั้นตอนของการโหลดข้อมูลพวกนี้แหละ แน่นอนว่า ข้อมูลก็จะถูกโหลดจาก SSD ของเรา โดยที่ CPU เป็นคนสั่งให้โหลด วิ่งผ่าน CPU แล้วไปไว้ใน RAM สำหรับการรอการใช้งาน (เรื่องนี้ไปศึกษาเพิ่มได้จากเรื่อง Memory Hierachy) Performance ส่วนนึงมันก็จะเกิดจาก SSD เราเร็วเพียงพอที่จะโหลดข้อมูลได้ทันมั้ย และ อีกส่วนเมื่อ CPU เป็นคนโหลด ถามว่า CPU โหลดทันมั้ย

เมื่อพวก ส่วนประกอบของมันมาครบละ มันก็จะถูกประกอบร่างตามที่ Game Developer ทำเอาไว้  แล้วเอากล้องใส่เข้าไปในฉาก ตรงกล้องนี่ก็ยากอีกนะ เพราะอย่าลืมว่า ตอนเราเอาพวก Model และส่วนประกอบอื่น ๆ เข้ามา เราทำเป็น 3D มา แต่เราแสดงผลในรูปแบบ 2D ทำให้เครื่องมันจะต้องประมวลผล เพื่อสร้างภาพ 2D เพื่อเลียนแบบกล้องออกมา ก็ใช้พลังในการประมวลผลมหาศาลแล้วนะ

ได้มุมกล้องออกมา นี่ยังไม่รวมเรื่องแสง เครื่องจะต้องคำนวณว่า ไฟที่ Game Developer ใส่เข้ามาตรงนี้ของ 3D Plane มันตกกระทบกับ Object ในฉากแล้วแสงตรงไหนควรจะมีความเข้มเป็นเท่าไหร่ แสดงผลออกมาเป็นสีแบบไหน

ยิ่งพวกเกมสมัยใหม่หน่อย เริ่มมีการใช้ Ray Tracing ที่คำนวณแสงแบบแม่นยำกว่าเดิมมาก ๆ นั่นก็นำมาสู่การคำนวณมหาศาลมาก ๆ

ถามว่าแล้ว การคำนวณมหาศาลนี่คือการคำนวณแบบไหนเหรอ มันคือ การใช้งานพวกการคำนวณ Matrix เยอะมาก ๆ เพราะพวกข้อมูล Model และ อื่น ๆ ของเรามันเป็น 3D เนอะ การใช้ Matrix เป็นอะไรที่ง่ายที่สุดแล้ว นี่นะ เด็ก ๆ ชอบถามว่า เรียน Matrix เอาไปทำอะไร นี่แหละเอามาทำเกมให้พวกม_งเล่นนี่แหละ !

ในมุมของ Programming เอง ไส้ในจริง ๆ มันก็คือ 3D Array หรือ 4D Array เลยก็มี เช่น เราเก็บข้อมูลพวกสีต่าง ๆ ที่ประมวลผลออกมา เราก็จะมี RGB ไปแล้ว 3 บางอันหนักกว่า เก็บพวก Transparent Channel อีก ก็เป็น Array ขนาด 4D ไปจุกๆ  แล้ว ยังไปอีก เช่นการหา Plane กล้องต่าง ๆ ก็ต้องมีพวก Matrix Operation อีกเยอะมาก ๆ

พวก Object ในฉากสักฉาก อะ เราขำ ๆ นะ สัก 300 Object บวกกับไฟอีก 100 จุด คิดดูว่า มันจะต้องคำนวณมหาศาลขนาดไหน โชคดีที่ การคำนวณพวกนี้ เราสามารถทำงานแบบ Parallel หรือขนานกันไปได้

แต่ CPU โดยปกติแล้วมันทำงานพร้อม ๆ กันไม่ได้นะ พวกเทคโนโลยี Hyperthreading จริง ๆ มันก็ไม่ได้เป็นการทำพร้อม ๆ กัน ไว้เราจะมาอธิบายอีกที แต่สิ่งที่ผู้ผลิต CPU แก้ปัญหาแบบ Bandage Solution คือ การเพิ่ม Core เข้าไปใน CPU ในปัจจุบัน เอา CPU บ้าน ๆ ไว้เล่นเกมเลย เราว่ามีสัก 32 Core อะประมาณนั้น เอ๊ะ งั้น CPU ก็ประมวลผลพวกนี้ได้อะสิ ใช่ฮ่ะ เราเลยรัน Crysis บน CPU เหมือนที่เราเห็นในวีดีโอได้

พอมันเป็นเกมที่คนสามารถ Interact หันมุมกล้องได้อย่างอิสระ แปลว่าการคำนวณที่เราว่ามาทั้งหมดนี้ เราจะต้องทำแบบ Real-time กล่าวคือ เราจะต้องคำนวณหน้างานที่เครื่องผู้เล่นตรง ๆ และ เราคงไม่อยากเล่นเกมที่ Framerate 10 FPS อะไรพวกนั้นแน่นอน ขั้นต่ำ ๆ เลยเราก็อยากเล่นที่ 60 FPS นั่นแปลว่า กระบวนการทั้งหมดที่เราพูดมา ใน 1 วินาที CPU จะต้องทำได้ 60 ภาพออกมา จากวีดีโอ เราก็เห็นแล้วว่า มันเป็นงานที่หนักมาก ๆ สำหรับ CPU

รันโปรแกรมเร็วขึ้นด้วย SIMD บน Apple Silicon โคตรเร็ว
จะเป็นอย่างไร ถ้าเราบอกว่า เราสามารถเขียนโปรแกรมของเราให้เร็วขึ้นแบบก้าวกระโดด โดยเราไม่ต้องแบ่ง Core ไม่ต้อง Overclock CPU ของเรา แต่เราใช้ประโยชน์จากความสามารถ CPU ของเราได้ ผ่านการทำ SIMD

โอเคแหละ CPU สมัยใหม่ ก็พยายามที่จะอัดพวกชุดคำสั่ง SIMD เข้ามาเพื่อเร่งความเร็วในการทำ Matrix Operation แต่ถามว่า มันจะเก่งเท่ากับ GPU ที่มีจำนวน Core เยอะกว่าเหรอ ก็ไม่หรอก

GPU เข้ามาแก้ปัญหา

ด้วยการประมวลผลลักษณะนี้ เราใช้งานกันเยอะขึ้นเรื่อย ๆ ที่ตลาดใหญ่และเราเห็น ๆ กันคือ การเอามาเล่นเกมใช่ป่ะ ถ้าเราเอา CPU มาเล่น ก็เป็นอย่างที่เราเห็น แตกยับ พอมันมีความต้องการเยอะ ๆ มันก็ต้องมีอะไรเข้ามาแก้ปัญหานี้ละ

สิ่ง ๆ นั้นคือ GPU หรือ Graphic Processing Unit มันเป็นอุปกรณ์พิเศษเลย ที่ออกแบบมาเพื่อการประมวลผล Graphic โดยเฉพาะตามชื่อของมันเลย แล้วคำนวณ Graphic คือคำนวณอะไรละ

จริง ๆ ไส้ใน มันไม่ต่างจาก CPU เลย แต่ ๆๆๆ มันถูกถอดพวกชุดคำสั่งหลาย ๆ อย่างออกไป แล้วไปเน้นพวกชุดคำสั่ง และ วงจร สำหรับการทำ Matrix Operation เยอะมาก ๆ ทำให้มันเก่ง ความหลากหลายในการคำนวณมันไม่เท่า CPU แต่ มันคำนวณในเรื่องที่มันเก่งได้ เร็ว และมีประสิทธิภาพสูงมาก ๆ

พอจำนวนคำสั่งน้อยลง การกินไฟก็น้อยลงกว่า CPU Core เยอะ ขนาด และ ราคาก็ต่างกันเยอะ และ อย่างที่เราบอกว่า โชคดีที่งานพวก Graphic มันสามารถทำ Parallel ได้ เลยทำให้ผู้ผลิต CPU เขาก็อัดจำนวน Core ที่ทำให้ประมวลผลพร้อม ๆ กันได้เข้าไปเยอะมาก ๆ ถ้าเป็นของ Nvidia ก็เรียก CUDA Core หรือถ้า AMD เราก็เรียกว่า Stream Core

ถามว่าเยอะกว่า CPU Core ขนาดไหน เรายกตัวอย่าง CPU บ้าน ๆ ก่อนนะ เอาตัวแรง ๆ เลยอย่าง Ryzen 7950X เขามี Core แค่ 16 Core เท่านั้น ตัดภาพไปที่ GPU ตัวแรงสำหรับเล่นเกมกันอย่าง Nvidia RTX 4090 มี 16,384 CUDA Core จะเห็นว่า เลข 16 และ 16,384 นี่คนละเรื่องเลย

ทำให้พอ เราออกแบบ Core ที่ทำงานเฉพาะทางเหมาะกับงานมากขึ้น และ อัดจำนวน Core เข้าไปได้ และ งานรองรับการทำแบบ Parallel ก็ทำให้ประสิทธิภาพในการทำงานของ GPU เลยเหนือว่า CPU ในเรื่องของการคำนวณ และ ประมวลผลทางด้าน Graphic นั่นเอง

GPU as a AI Accelerator

แต่อีกหนึ่ง Application ของ GPU ในช่วงไม่กี่ปีที่ผ่านมา คือการเอามาทำงานกับพวก AI ทั้งหลาย โดยเฉพาะการใช้งานกับพวก Artificial Neural Network (ANN) ทั้งหลาย คนที่ทำงานพวกนี้ น่าจะเคยได้ยินมาเหมือนกันว่า ถ้าใช้งาน GPU เราจะทั้ง Train และ Inference Model ได้เร็วขึ้นมาก ๆ

ถามว่า ทำไมมันถึงเป็นแบบนั้นละ อันนี้ เราไม่ขออธิบายลึกนะ แต่ถ้าอยากรู้แนะนำให้ไปอ่านพวกเรื่องของการทำ Backward Propagation กระบวนการนี้ มันคือ Core ของการทำให้ เครื่องมันเรียนรู้ได้เลยแหละ ซึ่งมันต้องการ Matrix Operation มหาศาลมาก ๆ อย่างไม่น่าเชื่อ และ งานพวกนี้ เวลาเราออกแบบ Model จริง ๆ มันก็เกิดจากพวก Perceptron หลาย ๆ อันมาต่อรวมกัน แต่ละอัน มันจะต้องมีการคำนวณพวก Weight และอื่น ๆ อีกมากมาย เราสามารถที่จะ Parallel การคำนวณพวกนี้บางส่วนได้ ทำให้ การที่เราเอา GPU มาใช้ในการคำนวณ เพื่อเร่งความเร็วในการทำงานมัน Works จริง ๆ

Tesla’s Biggest News At AI Day Was The Dojo Supercomputer, Not The Optimus Robot
Tesla’s Dojo supercomputing technology promises to accelerate the development of self-driving cars by an order of magnitude, and it will start coming online early in 2023.

และในการใช้งานจริง ๆ ระดับ Enterprise ก็มีการเอา GPU จำนวนเยอะมาก ๆ เอามา Train  Model นี่แหละ เช่น Tesla บริษัทผลิตรถ เขาก็มี Super Computer ย่อม ๆ อยู่ในบริษัท เพื่องาน R&D ภายใน เราว่าพวก FSD ทั้งหลาย ก็ออกมาจากคอมพิวเตอร์พวกนี้แหละ

Introducing the AI Research SuperCluster — Meta’s cutting-edge AI supercomputer for AI research
Introducing the AI Research SuperCluster — Meta’s cutting-edge AI supercomputer for AI research

หรือในฝั่งของ Facebook เองเขาก็มี SuperCluster ก็คือพวก Super Computer ย่อม ๆ เหมือนกัน เอาจริง มันไม่น่าย่อมแล้วละเจ้านี้เนี่ย สำหรับการทำงานเหมือนกัน

แต่ถามว่า แล้ว GPU กับ การเอามาใช้งานมันเป็นการใช้งานที่ยั่งยืน ? เราจะเอา GPU มาใช้ในการทำงานกับ AI ได้ไหวจริง ๆ เหรอ ในยุคที่งานวิจัยทางด้าน AI ขึ้นเป็นดอกเห็ด และ Model ที่ซับซ้อนขึ้นเรื่อย ๆ จาก ANN ง่าย ๆ กลายเป็น CNN ยันอะไรไม่รู้อีกมากมาย

ASIC is the next thing?

แน่นอนว่า มีคนที่ไม่หยุดคิดแน่นอนว่า เราจะเร่งความเร็วมันได้มากกว่านี้ได้ยังไง ไม่ว่าจะเป็นงานทางด้าน AI เอง ที่ ณ วันนี้ก็มี TPU (Tensor Processing Unit) ออกมาใช้ในระดับ Exoscale เราสามารถทดลองใช้ผ่านพวก Colab ได้แล้วแบบฟรี ๆ

หรือกระทั่งเรื่องของการ เข้ารหัส และ ถอดรหัส วีดีโอใน Codec ต่าง ๆ เช่น H.264, H.265 และ ล่าสุดเลยคือ AV1 พวกนี้ ผู้ผลิต CPU และ GPU ก็เริ่มแยกส่วนมันออกมา โดยการออกแบบ ชุดคำสั่งเฉพาะสำหรับการ เข้าและถอดรหัสวีดีโอพวกนี้เลย ทำให้การทำงานเหล่านี้ มันทำได้มีประสิทธิภาพสูงขึ้น และ ใช้พลังงานน้อยลงนั่นเอง เช่นพวก Intel QuickSync ของฝั่ง Intel ที่มาช่วยเรื่องการ เข้าและถอดรหัสวีดีโอประเภทต่าง ๆ

อันที่เราว่าชัดมาก ๆ ก็น่าจะเป็นฝั่ง Apple ที่ทำ Apple Silicon ออกมา แล้วยัดพวก Accelerator มาเยอะมาก ๆ ตั้งแต่พวก Secure Enclave ที่เป็นส่วนเฉพาะรองรับการเข้าและถอดรหัสโดยเฉพาะ หรือจะเป็น Media Engine ที่ทำให้เข้าและถอดรหัสวีดีโอได้เร็วขึ้น

หลาย ๆ ค่าย ณ วันนี้เริ่มหันเหมา ผลิต ชุดคำสั่ง และ ชิพ เฉพาะสำหรับการทำงานบางอย่าง (ASIC) มากขึ้นเรื่อย ๆ อย่างไม่น่าเชื่อ ส่วนนึง เราคิดว่า น่าจะเกิดจากเทคโนโลยีการผลิต CPU และ GPU ที่ใกล้ถึงทางตันเข้าไปเรื่อย ๆ ดังนั้น Bandage Solution สำหรับเรื่องนี้ก็คือ การผลิตพวกที่ทำงานเฉพาะทางแล้วเอามารวม ๆ กันทำให้มันทำงานได้มีประสิทธิภาพมากขึ้นได้  ไม่ก็ทำแบบ Nvidia ก็เพิ่ม Core เพิ่มพลังงานที่ต้องการเข้าไป เพิ่มการระบายความร้อนเข้าไป ผลที่ได้คือ การกินไฟแบบมหาศาล และ สายไฟละลาย ฮ่า ๆ

สรุป

โอเค เราว่าเรานอกเรื่องไปไกลมาก ๆ เอาเป็นว่า CPU และ GPU โดยโครงสร้างพื้นฐานมันก็ไม่ต่างกันมากเท่าไหร่ แต่มันออกแบบมาโดยมีจุดประสงค์ที่แตกต่างกัน CPU เราออกแบบมาให้ไม่ต้องทำได้เร็วมาก แต่ทำได้หลาย ๆ อย่างเป็นเป็ด แต่ GPU ถูกออกแบบมาให้ทำงานได้ไม่กี่อย่าง แต่ทำโคตรเร็วกว่ามาก ๆ ทำให้ถามว่า ถ้าเราไม่มี GPU ได้มั้ย คำตอบคือได้ แต่การประมวลผลบางอย่างมันก็จะช้า หรือกลับกัน เราไม่มี CPU ได้มั้ย คำตอบคือไม่ได้ เพราะงานบางอย่าง เช่นการ เรียกข้อมูล หรือชุดคำสั่งบางอย่าง GPU มันไม่มีนั่นเอง

Read Next...

ลองกันอีกสักตั้ง iPad Pro ใช้แทนคอมพิวเตอร์ได้มั้ย

ลองกันอีกสักตั้ง iPad Pro ใช้แทนคอมพิวเตอร์ได้มั้ย

เมื่อ 3 ปีก่อน เรามีความพยายามที่จะใช้ iPad Pro เครื่องเดิมแทนคอมพิวเตอร์ ไหน ๆ ตอนนี้เราเปลี่ยน iPad Pro ใหม่แล้ว เราจะมาลองกันอีกสักตั้งว่า เมื่อเวลาผ่านไป มันใช้งานจริงได้มากขึ้นหรือไม่...

ทำไม iPad ยังเป็น iPad ไม่เป็น Mac

ทำไม iPad ยังเป็น iPad ไม่เป็น Mac

ตั้งแต่ iPad Pro M4 และ iPad Air M2 เปิดตัวและเริ่มจำหน่ายออกไป Reviewer หลายคนเริ่มมองเห็นแล้วว่า ปัญหาจริง ๆ ของ iPad ในรอบหลายปีที่ผ่านมา ไม่ได้เกิดจาก iPad แต่เกิดจาก iPadOS บางเจ้าบอกว่า อยากให้เอา macOS มาใส่ด้วยซ้ำ มันยังไงกันนะ วันนี้เราจะมาเล่าประเด็นและความเห็นจากเราให้ให้อ่านกัน...

Microinverter ต่างจาก String Inverter อย่างไร เลือกแบบไหนดีกว่ากัน

Microinverter ต่างจาก String Inverter อย่างไร เลือกแบบไหนดีกว่ากัน

หลังจากเราเขียนเรื่อง Solar Cell ไปมีคนถามเข้ามาอยู่ว่า ถ้าจะเลือกติดตั้ง Solar ระหว่างการใช้ระบบ String Inverter กับ Microinverter เราจะเลือกตัวไหนดี วันนี้เราจะมาเล่าเปรียบเทียบให้อ่านกันว่าแบบไหน น่าจะเหมาะกับใคร...

ทำไมภาษา Programming สมัยใหม่ ถึงไม่มี Pointer Concept

ทำไมภาษา Programming สมัยใหม่ ถึงไม่มี Pointer Concept

ทำไมภาษาบางตัวอย่างภาษา C มี Pointer ในขณะที่ภาษาใหม่ ๆ หลายตัว ไม่มี ทำไมการ Implement Concept หรือเครื่องมือเหล่านี้ถึงไม่ได้รับความนิยม วันนี้เราจะมาเล่าข้อดีข้อเสียของ Feature นี้ในภาษา Programming กัน...