เมื่อ Intel กำลังทิ้ง Hyper-threading มันจะดีจริง ๆ เหรอ

เชื่อหรือไม่ว่า Intel กำลังจะทิ้งสุดยอด Technology อย่าง Hyper-threading ใน CPU Generation ใหม่อย่าง Arrow Lake ทำให้เกิดคำถามว่า การที่ Intel ทำแบบนี้เป็นเรื่องดีสียจาก CPU ใหม่ของ Intel ตัวนี้

CPU ทำงานอย่างไร ?

ก่อนเราจะบอกได้ว่าอะไรดี หรือไม่ดี เราต้องมาทำความเข้าใจกันก่อนว่า Hyper-threading คืออะไร ทำไมมันทำให้เวลาชอบบอกว่า Core ต้องเอามาคูณ 2 นะ เห้ย มันคูณ 2 ได้ยังไง เรามาดูเรื่องนี้กันก่อน

ให้เราคิดภาพว่า CPU มันเป็นเหมือนข้าราชการแนว ๆ ได้ครับท่าน ใช่ครับนายเลย ทำหน้าที่รับคำสั่งเข้ามา ปฏิบัติตามคำสั่ง และ คืนผลลัพธ์กลับไปแค่นั้นเลย มันไม่ได้มีความฉลาดอะไรมากอย่างที่เราคิด หรือจริง ๆ จะคิดว่าเป็นเครื่องคิดเลข on steroid ก็ได้เหมือนกัน

ทำให้การทำงานของมัน ถูกแบ่งออกเป็น 3 ขั้นตอนเท่านั้นคือ Fetch, Decode และ Execute หากใครเคยเรียนพวก Computer Architect มา น่าจะคุ้นเคยกันในชื่อ Instruction Cycle การทำงานของมันเรียบง่ายมากคือ มันจะทำการสั่ง Fetch คำสั่งว่าคำสั่งต่อไปที่จะให้ทำคืออะไรจาก Primary Memory หรือในเครื่องคอมพิวเตอร์ของเราเป็น RAM และ Unified Memory เมื่อมันได้รับคำสั่งมาแล้ว มันจะอ่านว่า คำสั่งนั้นให้ทำอะไร จาก Memory ส่วนไหน เราเรียกขั้นตอนนี้ว่า Decode แล้วค่อยส่งไปที่หน่วยประมวลผล เพื่อทำตามคำสั่งที่ได้รับมา เราเรียกขั้นตอนนี้ว่า Execute

ในการ Execute แต่ละคำสั่งบน CPU จริง ๆ เราไม่ได้มีวงจรเดียวที่ทำทุกอย่าง เรามีวงจรสำหรับ Execute หลายวงจรมาก ๆ เช่น วงจรสำหรับคำนวณจำนวนเต็ม (Arithmetic Logic Unit หรือ ALU) และวงจรสำหรับการคำนวณทศนิยม (Floating Point Unit หรือ FPU) หรือกระทั่งการคำนวณ Vector ทั้งหลายเป็นต้น

ดังนั้น เมื่อ CPU อยู่ระหว่างขั้นตอนการ Execute จะมีวงจรตัวนึงที่ทำงานอยู่ แต่ตัวที่เหลือนั่งว่างเปล่า ๆ หรือกระทั่งที่ เมื่อเรารันคำสั่งเสร็จแล้วกำลังจะขึ้นคำสั่งใหม่ กว่ามันจะได้ Execute มันก็ต้องผ่านการ Fetch และ Decode หากเราเอา Timeline มันมา Plot จริง ๆ เราจะเห็นว่า มี Hardware หลากหลายส่วนใน CPU ที่ว่าง ไม่มีงานทำอยู่ (Idle State) ทำให้เกิดคำถามว่า ถ้าเราสามารถโยนงานให้ CPU รันได้ตลอด ๆ มากขึ้น จะทำให้เราสามารถทำงานได้มากกว่า 1 งานต่อ Clock Cycle ได้หรือไม่ โดยที่ไม่ต้องสร้าง Core ใหม่ให้เปลืองพื้นที่

Hyper-threading คืออะไร ?

จนเมื่อปี 2002 Intel ออก Feature นึงบน CPU ที่เรียกว่า Hyper-threading ออกมาใช้งานกับ CPU ในรุ่น Pentium 4 และ Xeon ในยุคนั้น เรียกว่าเป็นเทคโนโลยีแรก ๆ ที่ทำให้ CPU จาก Intel มีประสิทธิภาพสูงขึ้นมาก ณ เวลานั้น ถามว่าแล้ว Hyper-threading ทำงานยังไงละ อะไรคือทริกที่ทำให้เกิดเทคโนโลยีนี้

ในเมื่อเราคิดปัญหาที่ว่า เราไม่สามารถโยนงานให้ Execution Unit ทำงานได้ทุกตัว และตลอดเวลามากที่สุด และการสร้าง Core ใหม่ก็สร้างต้นทุน และการผลิตที่ยากขึ้นกับ Intel งั้นเราทำให้ CPU แชร์ Execution Unit กันได้มั้ย โดยการก๊อป ส่วนที่ใช้ในการเก็บการ State ของ CPU เป็น 2 ชิ้น เท่านี้ เราก็สามารถทำให้เราสามารถรัน 2 คำสั่งพร้อม ๆ กันใน 1 CPU Core ได้แล้ว นั่นทำให้เวลาเราอ่านสเปกของ CPU ถึงเจอว่า จำนวน Thread มันคือ 2 เท่าของจำนวน Core ก็เพราะมันมีการก๊อปส่วนที่ใช้เก็บ State ออกมาเป็น 2 ตัวต่อ Core นั่นเอง

หากเราลอง Plot การทำงานของแต่ละส่วนบน CPU ออกมา เราจะเห็นว่า เมื่อเราใช้งาน Hyper-threading ทำให้ Utilisation ของส่วนต่าง ๆ บน CPU นั้นทำงานตลอดเวลามากขึ้น หรือพูดง่าย ๆ คือ มี Throughput ในการทำงานสูงขึ้นนั่นเอง

จริง ๆ แล้วเทคโนโลยีการทำ Hyper-threading ไม่ใช่เรื่องใหม่อะไร มีการคิดเรื่องนี้มานานมากแล้วในชื่อของ Simultaneous Multithreading (SMT) ทำให้ Hyper-threading จริง ๆ ก็คือ การเอา SMT มา Implement เป็น Production Hardware จริง ๆ ที่ Intel เอาออกมาขาย โดย ณ วันนั้น Intel เคลมว่า การใช้เทคโนโลยี Intel Hyper-threading ทำให้ใช้พื้นที่บน Die เพิ่มแค่ 5% แต่สามารถเพิ่มประสิทธิภาพได้ 15-30% ด้วยกัน

Hyper-threading อาจจะไม่ช่วย หรือชิบหายกว่าเดิม

แต่ไม่ใช่ว่า การเปิด Hypertheading จะทำให้ทำงานได้เร็วขึ้นอย่างที่ Intel เคลมไว้เสมอไป งานที่มันจะสามารถดึงประสิทธิภาพออกมาได้นั้น จะต้องเป็นงานที่สามารถ Parallel ได้ หรือ งานที่เข้ามาทำนั้นไม่ต้องรองานก่อนหน้า ซึ่งงานส่วนใหญ่ที่เราใช้กันตามบ้านมักเป็นงานที่ต้องรันแบบ Single-Thread ที่ไม่สามารถดึงประสิทธิภาพของการทำ Hyper-threading ได้มากขนาดนั้น งานที่ดึงประสิทธิภาพออกมาได้ ส่วนใหญ่จะเป็นงาน Productivity ต่าง ๆ อย่างการตัดต่อวีดีโอ การ Render งานต่าง ๆ อันนี้คือช่วยเต็ม ๆ เพราะ แต่ละส่วนของ Frame เราสามารถแยกให้ไปทำงานเป็นแบบ Parallel ได้ จึงทำให้ดึงประสิทธิภาพออกมาได้เต็ม ๆ

จริง ๆ อยู่ที่การออกแบบพวก Scheduler ด้วยแหละว่า ถ้าเราเรียนลงไปลึก ๆ ในวิชา​ OS การทำ Scheduling มันแบ่งเป็น Preemptive กับ Non-Preemptive อีกลองไปอ่านต่อดูได้ ลึกลับซับซ้อน ซ่อนเงื่อน แต่ถ้ารู้เราจะ Optimise Low-Level ได้โคตรเก่ง

และต้องอย่าลืมว่า เราแชร์ Execution Unit ชุดเดียวกัน หากทั้ง 2 Thread ต้องการใช้ Execution Unit หรือวงจรส่วนใดส่วนหนึ่งของ CPU พร้อม ๆ กัน คนใดคนหนึ่งต้องรอให้อีกคนทำงานให้เสร็จก่อน ทำให้เป็นเหตุผลว่า ทำไมการใช้ Hyper-threading ถึงไม่ได้ทำให้ได้ Performance เพิ่มเท่าหรือมากกว่า การเพิ่ม Core เข้าไปตรง ๆ

นอกจากนั้น พอเราเพิ่มส่วนประกอบเข้าไป ทำให้มันกินไฟเยอะขึ้น ผลที่ตามมาติด ๆ คือ ร้อนขึ้นด้วยเช่นกัน ดังนั้น เราไม่สามารถบอกได้ ชัด ๆ 100% ว่าการใช้งาน Hyper-threading ทำให้การทำงานเร็วขึ้นหรือไม่ ขึ้นกับงานที่เราทำ แต่ปัจจุบันส่วนใหญ่ Application มักเริ่มออกแบบมาเป็น Multithread Application กันมากขึ้น เช่น การใช้ UI บางอย่าง แต่ละส่วนเราสามารถแยกเป็น Thread ออกไปทำให้ เราสามารถดึงประสิทธิภาพออกมาได้มากกว่าเมื่อก่อนมาก ๆ เลยทีเดียว

นี่ไม่ใช่ครั้งแรกที่ Intel ถอด Hyper-threading ออก

เอ๊ะ แล้วเขาไปตัดออกตอนไหนละ ? จริง ๆ Intel เริ่มมีการตัด Feature นี้ออกตั้งแต่ Processor Gen 12 ขึ้นมาเรื่อย ๆ ละ ถ้าเราลองสังเกตดู จากเดิมสมมุติว่า CPU มี 8 Core ทุกตัวจะมี 16 Thread หมด นั่นเป็นเพราะ ทุก Core ออกแบบมาเหมือนกัน แค่ก๊อป Core ออกมาวางเพิ่มลงไป แต่พอมา Gen 12 ขึ้นไป เราจะเห็นว่ามันมีการแบ่งออกมาเป็น E-Core และ P-Core

โดยที่ E-Core เน้นการทำงานเบา ๆ ไม่รองรับ Hyper-threading และประหยัดพลังงาน เป็นงานที่ทำบน Background พวก Housekeeping มากกว่า ไม่ได้ใช้กำลังในการประมวลผลมากนัก กลับกัน P-Core ออกแบบมาเพื่องานหนัก ๆ ที่ต้องการ Performance สูง ๆ หรือก็คือ Core ปกติที่เราใช้งานกันก่อนหน้านั้นแหละ

Asymmetric multiprocessing ความลับการประหยัดพลังงานของ Apple Silicon
ตั้งแต่ Apple Silicon เปิดตัวมา เรียกเสียงฮือฮ่าได้เยอะมาก ๆ เพราะประสิทธิภาพและการประหยัดพลังงานที่เหลือล้น จนออก M2 ทายาทออกมาแล้ว ความลับนึงที่ทำให้แตกต่างกันนั่นคือการออกแบบ Core ที่มีทั้ง P และ E Core มันต่างกันยังไง อ่านได้ในบทความนี้เลย

เช่นบน CPU แบบ 12 Core เราไม่สามารถบอกว่ามันมี 24 Threads ได้ละ เพราะมันอาจจะเกิดจาก 8P + 4E ที่ มันจะมีทั้งหมด 8x2 = 16 Thread จาก P-Core และ 4 Thread จาก E-Core ทำให้เป็น 20 Thread เท่านั้น ลักษณะของการออกแบบ CPU ให้มี Core ที่แตกต่างกันเราเรียกว่า Asymmetric multiprocessing ซึ่งมีการทำมานานมาก ๆ แล้ว

เราอาจจะเคยเห็น Concept นี้ใน CPU ของ Apple Silicon ที่มีการแบ่งในลักษณะเดียวกัน และอันที่เราคิดว่าเป็นคนแรก ๆ ที่ใช้ลักษณะนี้คือ ARM ที่ออกสถาปัตยกรรมแบบ big.LITTLE ที่มีการแบ่ง CPU Core ตามการใช้งาน เพื่อประหยัดพลังงานสูงสุด

เฉือนคอ Hyper-threading ออกบน Arrow Lake

เมื่อเวลาล่วงเลยผ่านไป 22 ปี หรือปี 2024 นี้ Intel เปิดตัวสถาปัตยกรรม CPU ใหม่ในชื่อว่า Arrow Lake ประเด็นสำคัญคือ มีการตัด Hyper-threading ออกจาก P-Core ของตัวเองด้วย ทำให้ CPU ใน Generation นี้จะไม่มีการติด Hyper-threading เข้ามาให้เราได้ใช้งานกัน ทำให้เกิดคำถามว่า ทำไมถึงเป็นแบบนั้น

เหตุผลแรกคือ การเพิ่มจำนวน Core ซึ่งให้ผลลัพธ์ที่ดีกว่า ทำได้ง่ายกว่าเดิม หากมองย้อนกลับไปในปี 2002 เรายังใช้เทคโนโลยีการผลิตที่ 130nm อยู่เลย ส่งผลให้การเพิ่มวงจรเข้าไปเป็นจำนวนมาก เป็นเรื่องยากและราคาสูงมากกว่าปัจจุบันมาก กลับกันปัจจุบันการเพิ่ม Core ไม่ได้ยากเพราะเรากำลังคุยกันที่ 3nm กันไปแล้วเช่น Apple M4 และ 4nm บน Snapdragon X Series

เหตุผลที่สองคือ ตั้งแต่ Intel Gen 12 ที่ผ่านมาเปลี่ยนไปใช้ Asymmetric multiprocessing โดยการแยก E-Core และ P-Core ออกมา ซึ่งการกระจายงานตัว Scheduler จะทำการโยนงานลงไปใน E-Core, P-Core และ P-Core แบบรัน Hyper-threading ตามลำดับความสำคัญและขนาดของงาน ซึ่งในการใช้งานจริงพบว่า มีน้อยงานมากที่ Hyper-threading จะถูกใช้งานใน P-Core ดังนั้น ความจำเป็นของการใช้มันจึงยิ่งต่ำลง

นำมาสู่เหตุผลที่สาม คือ ประสิทธิภาพการใช้พลังงาน เรื่องนี้เรายกให้เพราะการมาถึงของพวก RISC CPU อย่าง Apple Silicon และ Snapdragon X Series ที่มีประสิทธิภาพต่อการใช้พลังงานที่เหนือชั้นกว่าฝั่ง x86 อย่าง Intel และ AMD มาก ๆ ซึ่งการจะลดการใช้พลังงานได้นั้น มันจำเป็นต้องเอาวงจรบางอย่างออกไป ก่อนหน้านี้มีการทดสอบปิด Hyper-threading ไปแล้ว แต่ก็ยังพบว่ามันก็ยังกินพลังงาน และถ้าเราไม่ได้ใช้มันก็เหมือนกับเราเอาพลังงานไปทิ้งเล่น ๆ ดังนั้น เพื่อทำให้ประสิทธิภาพการใช้พลังงานดีขึ้น การเอาพวกส่วนประกอบที่ใช้ Hypert-hreading ออกไปดูจะเป็นตัวเลือกที่ดี นอกจากนั้น Intel ยังบอกว่า เขาเอาส่วนอื่น ๆ ที่ไม่เกี่ยวข้องกับการเพิ่ม Productivity ออกไปด้วย ทำให้เพิ่มประสิทธิภาพต่อการใช้พลังงาน 15%, 10% ต่อพื้นที่ และ 30% ต่อพลังงานต่อพื้นที่

สรุป : Hypertheading ไม่ได้ไปต่อจริง ๆ เหรอ

ถ้าถามความเห็นเรามองว่า Hyper-threading ไม่น่าจะตายแน่นอน เพราะมันยังมีงานอีกหลาย ๆ แบบที่สามารถดึงประสิทธิภาพของ Hyper-threading ออกมาได้ เช่นงานฝั่ง Server ที่มีการทำ Virtual Machine และพวก Web Server ต่าง ๆ หรือกระทั่งในงาน Production อย่างการทำ Video Editing และ Photography แค่ว่าในงานสำหรับ Consumer ทั่ว ๆ ไป มันไม่เหมาะกับ Hyper-threading เช่นการเล่นเกมปัจจุบันเรา Utilise จำนวน Core ก็เพียงพอแล้ว การเอาออกไปก็เป็นตัวเลือกที่ดี ลดการใช้พลังงาน ลดความร้อนที่เกินขึ้น ต้องรอดูหลังจากที่ออกมาแล้ว มันจะเป็นยังไง เราแอบรู้สึกสนใจการตัดสินใจครั้งนี้ของ Intel มาก