By Arnon Puitrakul - 22 ตุลาคม 2021
เมื่อวันก่อน Apple ได้ออก Apple Silicon สำหรับ Prosumer ในรุ่นของ M1 Pro และ M1 Max แล้วที่ให้ High Performance Core มาถึง 8 Core ไปเลย หรือก็คือ 2 เท่าของ M1 รุ่นปกติ ซึ่งหลาย ๆ คนก็จะคิดว่า แบบนี้ M1 Pro และ Max ก็จะแรงกว่า M1 รุ่นปกติถึง 2 เท่าละสิ หรือหลาย ๆ ครั้ง เราก็จะโดนการตลาดบอกตัวเลขจำนวน Core ของ CPU มา ทำให้เราเข้าใจคลาดเคลื่อนว่า การที่จำนวน Core เยอะทำให้การทำงานของเราเร็วขึ้น ซึ่งเราจะบอกเลยว่า ทั้งจริง และ ไม่จริง วันนี้เรามาหาคำตอบไปพร้อม ๆ กัน
เราเคยเขียนไว้ในบทความก่อน ๆ แล้วลองไปอ่านกันได้ ถ้าให้เล่าสั้น ๆ คือ มันก็เหมือนกับเราจ้างคนมาทำงานเยอะขึ้น ยิ่งมีหลาย Core เราก็สามารถที่จะทำงานพร้อม ๆ กันได้มากขึ้นนั่นเอง ซึ่งโดยปกติ เราอาจจะคุ้นเคยกับ CPU ที่มีแต่ละ Core ทำงานได้เหมือนกันทุกประการ เราเรียกพวกนี้ว่า homogeneous core เราหา CPU พวกนี้ได้ทั่ว ๆ ไปเลยเช่นจาก Intel ก็จะเป็นตระกูล Core i ทั้งหลาย และถ้าเป็นจาก AMD ก็จะเป็นพวก Ryzen ทั้งหลาย
แต่ถ้าเราไปดูในพวก CPU โทรศัพท์ หรืออันที่พึ่งออกสด ๆ อย่าง M1 ทั้งหลาย เราจะเห็นว่าเขาจะแยกออกมาเป็น High Performance Core และ High Efficiency Core ออกจากกัน หรือก็คือ มี Core อยู่ 2 แบบด้วยกัน เราเรียกพวกนี้ว่า heterogeneous cores นั่นเอง เพื่อความง่ายในการอธิบายเราจะขอยกตัวอย่างด้วย Homogeneous Core ละกัน
อย่างที่เล่าเมื่อครู่ว่า การที่เรามีหลาย ๆ Core มันก็เหมือนกับเวลาเราทำงานพร้อมกันหลาย ๆ คน การทำงานมันจะแตกต่างจากการทำงานคนเดียวแน่นอน มันจะมีหลาย ๆ เรื่องโถมเข้ามา ตั้งแต่ว่า จากเดิมเราทำงานคนเดียว เราไม่ต้องแบ่งงานให้ใคร เราไม่ต้องเลือกว่าจะให้ใครทำงานอะไร แต่พอเราทำให้มันทำงานหลาย ๆ คนพร้อม ๆ กัน เราจะต้องทำการแบ่งงานไปให้แต่ละคน (ในที่นี้คือ CPU Core) จะแบ่งแบบไหนละ นั่นก็จะเป็นปัญหาของ Programmer อีก
แต่แน่นอนว่า การที่เราแบ่งงานออกไป อยู่ดี ๆ งานมันไม่ได้ลอยไปให้อีกคนทำเลย แต่มันจะต้องมีการไปนัดแนะกันว่า โอเคคุณคนนี้ทำส่วนนี้นะ อีกคนไปทำอีกส่วนนะ และเมื่อแต่ละคนงานเสร็จ ก็ต้องเดินไปส่งงานให้กับหัวหน้าใหญ่อีก นั่นแปลว่า การแบ่งงานไม่ได้ทำให้เราได้งานเร็วขึ้น 2 เท่าเมื่อเราเพิ่มคนงาน 2 คน เพราะมันจะมี Overhead ที่เป็นเวลาในการเดินไปสั่งงาน และ เดินมาส่งงานด้วยกัน นั่นทำให้ ถ้าเราแบ่งงานเยอะเกินไป การทำงานอาจจะเร็วขึ้นจริง ๆ แหละ แต่เมื่อรวมกับ Overhead เข้าไปอาจจะทำให้ช้ากว่าการทำงานคนเดียวได้ ดังนั้น Programmer จะต้อง Weight ระหว่างว่าเราจะทำงานกี่คน และเราจะทำงานยังไง เพื่อให้ได้ Performance ที่ดีที่สุดนั่นเอง
ปัญหาการแบ่งคนเป็นปัญหานึง แต่อีกปัญหาที่บรรลัยกว่านั้น น่าจะเป็นการเข้าถึงหน่วยความจำ ให้เรานึกถึงเวลาเราทำงานแล้วมันจะมีแฟ้มเอกสารที่อาจจะใช้กับหลาย ๆ คนอาจจะเป็นเพื่อนร่วมงานในแผนกเดียวกัน หรืออาจจะคนละแผนกเลยก็ตาม การอ่านดูจะเป็นเรื่องง่ายมาก ๆ เพียงแค่เราเดินไปเปิดแฟ้มแล้วก็อ่านได้เลย ก็น่าจะไม่มีอะไร
แต่ปัญหามันเริ่มเกิดเมื่อเรา เขียนข้อมูล ถ้าเราไม่สนอะไรเลย และทำงานคนเดียว ปัญหามันจะไม่เกิดเลย แต่เมื่อเราทำงานพร้อมกันหลาย ๆ คน ทุกคนรุมกันเขียน และอ่านข้อมูลชุดเดียวกันนั่นแหละ ปัญหาเกิดทันที ลองนึกถึงสถานการณ์ที่ A เขียน 5 เข้าไป โดยที่ค่าเดิมเป็น 4 ในขณะเดียวกัน B ก็เข้ามาอ่าน ปัญหาคือ เราจะได้ 4 หรือ 5 ละ ถ้าเกิดตอนที่ A เขียนเสร็จแล้ว B ก็จะได้ 5 ไป แต่ถ้ายัง มันก็จะได้ 4 กลับไป ยังไม่นับว่าถ้าเข้าถึงด้วยหลายคนมากกว่านี้ มันจะวุ่นวายกว่านี้มาก ๆ
ดังนั้นจะเห็นได้เลยว่า การทำงานแบบ Multicore มันเป็นอะไรที่ยุ่งยากมาก ๆ และในงานบางงานมันไม่ได้คุ้มค่าที่จะเขียนเป็น Multicore เลย หรือแย่กว่านั้นบางงานที่เล็กมาก ๆ เขียนเป็น Multicore อาจจะทำให้ Performance โดยรวมแย่ลงเพราะ Overhead ด้วยซ้ำ ทำให้ไม่ใช่ทุกโปรแกรมที่จะทำงานแบบ Multicore แต่เลือกที่จะทำงานแบบ Single Core นั่นเอง
โดยส่วนใหญ่แล้ว โปรแกรมที่จะทำงานแบบ Multicore จะเป็นพวกโปรแกรมที่ใช้งานกันระดับ Professional อย่าง Video Production หรือการเขียนโปรแกรมบางประเภท หรือกระทั่งการทำงานระดับ Server แต่โปรแกรมสำหรับการใช้งานทั่ว ๆ ไปอย่าง Email Client หรือ Word Processing ต่าง ๆ ส่วนใหญ่จะเป็นโปรแกรมที่ทำงานแบบ Single Core ซะเยอะอยู่
ทำให้นำไปสู่คำถามต่อไปว่า แล้วถ้าเราเอาโปรแกรมที่ทำงานแบบ Single Core มาทำงานบน Multicore CPU จะเป็นยังไง ตามหัวเลย ถ้าเทียบง่าย ๆ คือ ถ้าเราเอางานที่ออกแบบมาให้คนเดียวทำ แต่เรามีคนอยู่ เป็นร้อย เราก็จะใช้คนได้คน ๆ เดียวในการทำงานเท่านั้นส่วนคนที่เหลือก็นั่งหมาหงอยไปเท่านั้นเอง ทำให้เราใช้ CPU ได้อย่างไม่เต็มประสิทธิภาพ นั่นเป็นการตอบคำถามส่วนนึงว่า ทำไม CPU Core เยอะถึงไม่ได้เป็นการบอกว่าเราจะทำงานได้อย่างเร็วเสมอ
ถ้าเราบอกว่า งานที่เราต้องทำ มันทำได้แค่คนเดียว แทนที่เราจะจ้างคนเยอะ ๆ มาแล้วทำงานได้แค่เดียวเดียว สู้เราจ้างคนที่เก่งมาก ๆ หรือไม่ก็ทำงานได้เร็วมาก ๆ มาไม่ดีกว่าเหรอ ถ้าเทียบเป็น CPU ก็คือ เราจะต้องหา CPU ที่มีความเร็วสูงขึ้น หรือก็คือ Clock Speed สูงขึ้น หรือ CPU ที่เก่งขึ้นก็คือ CPU ที่มี IPC หรือการ Optimisation ที่ดีขึ้นนั่นเอง นั่นก็จะทำให้การทำงานบน Single Core ดีขึ้นส่งผลให้การทำงานทั่ว ๆ ไปที่ใช้แค่ Core เดียวดีขึ้นตามนั่นเอง
ถ้าเราลองไปดู Spec ของ CPU ในท้องตลาดเราเทียบง่าย ๆ อย่างของ Intel เอง มันก็จะมี CPU สำหรับ Consumer Grade อย่าง Core i3, 5 และ 7 เรายกตัวอย่างง่าย ๆ เอาตัว Top ของ Gen 11 อย่าง i9-11900 เขาใส่มาแค่ 8 Core เท่านั้น แต่ Clock Speed เขาดันไปได้ถึง 5.20 GHz กันเลย
แต่ถ้าเราลองไปดู Server Lineup กับ Workstation Lineup อย่าง Intel Xeon Platinum 8180 เขาจะใส่มาถึง 28 Core เลยมากกว่า i9 หลายเท่าตัวมาก ๆ แต่ ๆ Clock Speed ได้แค่ 3.80 GHz เท่านั้นซึ่งต่างมาก ๆ
ทำให้ถ้าเราสังเกต เราจะเห็นว่า CPU ที่ Core เยอะมักจะมี Clock Speed ต่ำ แต่กลับกัน ถ้า Core น้อย มักจะมี Clock Speed ที่สูงกว่า นึกภาพว่า ถ้าเราจ้างคนกำยำพลังล้น ๆ มาเยอะ ๆ เลย เราจะต้องใช้อาหารเยอะมาก ๆ ในการเลี้ยงทุก ๆ คน ถ้าเทียบเป็น CPU จริง ๆ คือ มันจะกินไฟเยอะมาก ๆ และเมื่อกินไฟเยอะมาก ๆ เข้า ปัญหาที่ตามมาคือ เรื่องความร้อน ทำให้เราจะเจอ CPU ในลักษณะที่เราได้สำรวจกันไป
จะเห็นได้เลยว่า CPU สำหรับ Consumer และ Professional และ Server มันมีการออกแบบที่ต่างกัน คนนึงเน้น Clock Speed เพื่อให้ทำงานแบบ Single Core ได้เร็วกว่า อีกคนเน้นเรื่องจำนวน Core เพราะงานที่ทำมันสามารถดึงประสิทธิภาพของทุก Core ออกมาได้นั่นเอง ทำให้ถ้าเราเอา CPU ของ Server มาเล่นเกม ถึงจะใช้ GPU แรงแค่ไหนอัด ๆ เข้าไป มันก็ไม่ช่วยเพราะ CPU มันตันแล้วนั่นเอง หรือแม้กระทั่งการทำงานทั่ว ๆ ไป ก็อาจจะแพ้ CPU ระดับ Consumer ด้วยซ้ำ ทำให้การเลือกซื้อ CPU ให้เหมาะกับงานของเราเป็นเรื่องสำคัญมาก ๆ
โดยสรุปคือ CPU มันมีจุดประสงค์ในการออกแบบที่ไม่เหมือนกัน ต่างจากที่การตลาดโฆษณาไว้ สิ่งที่เราต้องทำคือ เราจะต้องเข้าใจการทำงานของเราก่อนว่า โปรแกรมที่เราใช้ มันทำงานแบบไหน มันต้องการคนกำยำ หรือ ต้องการคนผอม ๆ เยอะ ๆ ถ้าเอาง่าย ๆ คนทั่ว ๆ ไป ไม่จำเป็นต้องมี Core เยอะ สัก 4-8 Core ก็ถือว่าเยอะมาก ๆ แล้ว แต่ถ้าเราทำงานโดยใช้โปรแกรมระดับ Professional ส่วนใหญ่แล้วการมี CPU Core ยิ่งเยอะยิ่งช่วยให้การทำงานเร็วขึ้นได้ ดังนั้นก็อาจจะมองหา CPU ที่มีมากกว่า 8 Core ในการทำงานก็จะดีมาก ๆ และที่สำคัญ Core เยอะไม่ได้แปลว่าจะทำงานได้เร็วกว่าเสมอนะจ๊ะ !
หลังจากเมื่อหลายอาทิตย์ก่อน Apple ออก Mac รัว ๆ ตั้งแต่ Mac Mini, iMac และ Macbook Pro ที่ใช้ M4 กันไปแล้ว มีหลายคนถามเราเข้ามาว่า เราควรจะเลือก M4 ตัวไหนดีถึงจะเหมาะกับเรา...
จากตอนก่อน เราเล่าเรื่องการ Host Website จากบ้านของเราอย่างปลอดภัยด้วย Cloudflare Tunnel ไปแล้ว แต่ Product ด้าน Zero-Trust ของนางยังไม่หมด วันนี้เราจะมาเล่าอีกหนึ่งขาที่จะช่วยปกป้อง Infrastructure และ Application ต่าง ๆ ของเราด้วย Cloudflare Access กัน...
ทุกคนเคยได้ยินคำว่า Mainframe Computer กันมั้ย เคยสงสัยกันมั้ยว่า มันต่างจากเครื่องคอมพิวเตอร์ที่เราใช้งานกันทั่ว ๆ ไปอย่างไรละ และ Mainframe ยังจำเป็นอยู่มั้ย มันได้ตายจากโลกนี้ไปหรือยัง วันนี้เรามาหาคำตอบไปด้วยกันเลย...
เคยมั้ยเวลา Deploy โปรแกรมสักตัว เราจะต้องมานั่ง Provision Infrastructure ไหนจะ VM และ Settings อื่น ๆ อีกมากมาย มันจะดีกว่ามั้ยถ้าเรามีเครื่องมือบางอย่างที่จะ Automate งานที่น่าเบื่อเหล่านี้ออกไป และลดความผิดพลาดที่อาจจะเกิดขึ้น วันนี้เราจะพาทุกคนมาทำความรู้จักกับ Infrastructure as Code กัน...