By Arnon Puitrakul - 02 ตุลาคม 2023
คำถามที่ตอนเราเด็ก ๆ เราก็สงสัยนะว่า ทำไม คอมพิวเตอร์เราต้องมีการ์ดจอด้วย ทำไมเราถึงไม่เอา CPU ทำงานทุกอย่างไปเลยละ จะได้ไม่ต้องเสียเงินซื้อด้วย เออ อีเด็กบ้านี่มันก็สงสัยไปเรื่อยเนอะ ฮ่า ๆ วันนี้เราเรียนคอมพิวเตอร์มา เราได้คำตอบละ เรามาเล่าให้อ่านกันดีกว่า ทำไมเราจะต้องมี GPU ด้วย ทำไมเราใช้ 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 มันก็มีเรื่องที่มันไม่เก่งอยู่เหมือนกัน
เพื่อจะอธิบายคำตอบของคำถามนี้ได้ เราจะต้องมาอธิบายกันก่อนว่า งานอย่างการรัน 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
โอเคแหละ CPU สมัยใหม่ ก็พยายามที่จะอัดพวกชุดคำสั่ง SIMD เข้ามาเพื่อเร่งความเร็วในการทำ Matrix Operation แต่ถามว่า มันจะเก่งเท่ากับ GPU ที่มีจำนวน Core เยอะกว่าเหรอ ก็ไม่หรอก
ด้วยการประมวลผลลักษณะนี้ เราใช้งานกันเยอะขึ้นเรื่อย ๆ ที่ตลาดใหญ่และเราเห็น ๆ กันคือ การเอามาเล่นเกมใช่ป่ะ ถ้าเราเอา 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 นั่นเอง
แต่อีกหนึ่ง Application ของ GPU ในช่วงไม่กี่ปีที่ผ่านมา คือการเอามาทำงานกับพวก AI ทั้งหลาย โดยเฉพาะการใช้งานกับพวก Artificial Neural Network (ANN) ทั้งหลาย คนที่ทำงานพวกนี้ น่าจะเคยได้ยินมาเหมือนกันว่า ถ้าใช้งาน GPU เราจะทั้ง Train และ Inference Model ได้เร็วขึ้นมาก ๆ
ถามว่า ทำไมมันถึงเป็นแบบนั้นละ อันนี้ เราไม่ขออธิบายลึกนะ แต่ถ้าอยากรู้แนะนำให้ไปอ่านพวกเรื่องของการทำ Backward Propagation กระบวนการนี้ มันคือ Core ของการทำให้ เครื่องมันเรียนรู้ได้เลยแหละ ซึ่งมันต้องการ Matrix Operation มหาศาลมาก ๆ อย่างไม่น่าเชื่อ และ งานพวกนี้ เวลาเราออกแบบ Model จริง ๆ มันก็เกิดจากพวก Perceptron หลาย ๆ อันมาต่อรวมกัน แต่ละอัน มันจะต้องมีการคำนวณพวก Weight และอื่น ๆ อีกมากมาย เราสามารถที่จะ Parallel การคำนวณพวกนี้บางส่วนได้ ทำให้ การที่เราเอา GPU มาใช้ในการคำนวณ เพื่อเร่งความเร็วในการทำงานมัน Works จริง ๆ
และในการใช้งานจริง ๆ ระดับ Enterprise ก็มีการเอา GPU จำนวนเยอะมาก ๆ เอามา Train Model นี่แหละ เช่น Tesla บริษัทผลิตรถ เขาก็มี Super Computer ย่อม ๆ อยู่ในบริษัท เพื่องาน R&D ภายใน เราว่าพวก FSD ทั้งหลาย ก็ออกมาจากคอมพิวเตอร์พวกนี้แหละ
หรือในฝั่งของ Facebook เองเขาก็มี SuperCluster ก็คือพวก Super Computer ย่อม ๆ เหมือนกัน เอาจริง มันไม่น่าย่อมแล้วละเจ้านี้เนี่ย สำหรับการทำงานเหมือนกัน
แต่ถามว่า แล้ว GPU กับ การเอามาใช้งานมันเป็นการใช้งานที่ยั่งยืน ? เราจะเอา GPU มาใช้ในการทำงานกับ AI ได้ไหวจริง ๆ เหรอ ในยุคที่งานวิจัยทางด้าน AI ขึ้นเป็นดอกเห็ด และ Model ที่ซับซ้อนขึ้นเรื่อย ๆ จาก ANN ง่าย ๆ กลายเป็น CNN ยันอะไรไม่รู้อีกมากมาย
แน่นอนว่า มีคนที่ไม่หยุดคิดแน่นอนว่า เราจะเร่งความเร็วมันได้มากกว่านี้ได้ยังไง ไม่ว่าจะเป็นงานทางด้าน 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 มันไม่มีนั่นเอง
เคยสงสัยกันมั้ยว่า Filter ที่เราใช้เบลอภาพ ไม่ว่าจะเพื่อความสวยงาม หรืออะไรก็ตาม แท้จริงแล้ว มันทำงานอย่างไร วันนี้เราจะพาไปดูคณิตศาสตร์และเทคนิคเบื้องหลังกันว่า กว่าที่รูปภาพจะถูกเบลอได้ มันเกิดจากอะไร...
หลังจากดูงาน Google I/O 2024 ที่ผ่านมา เรามาสะดุดเรื่องของการใส่ Watermark ลงไปใน Content ที่ Generate จาก AI วันนี้เราจะมาเล่าให้อ่านกันว่า วิธีการทำ Watermark ใน Content ทำอย่างไร...
ก่อนหน้านี้เราทำ Content เล่าความแตกต่างระหว่าง CPU, GPU และ NPU ทำให้เราเกิดคำถามขึ้นมาว่า เอาเข้าจริง เราจำเป็นต้องมี NPU อยู่ในตลาดจริง ๆ รึเปล่า หรือมันอาจจะเป็นแค่ Hardware ตัวนึงที่เข้ามาแล้วก็จากไปเท่านั้น วันนี้เราจะมาเล่าให้อ่านกัน...
บทความนี้ เราเขียนสำหรับมือใหม่ หรือคนที่ไม่ได้เรียนด้านนี้แต่อยากรู้ละกัน สำหรับวันนี้เรามาพูดถึงคำที่ถ้าเราทำงานกับพวก Developer เขาคุยกันบ่อย ๆ ใช้งานกันเยอะ ๆ อย่าง Database กันว่า มันคืออะไร ทำไมเราต้องใช้ และ เราจะมีตัวเลือกอะไรในการใช้งานบ้าง...