เราเคยอธิบายเรื่องราวของหน่วยความจำแคช (Cache Memory) ที่อยู่ภายในซีพียูกันไปบ้างแล้ว ในต่างที่ต่างเวลา ซึ่งหลายคนก็มีความสงสัยว่าพอมีซีพียูรุ่นใหม่ออกมาและมีความเร็วในการทำงานเพิ่มขึ้น แต่ทำไมขนาดของหน่วยความจำแคชบางรุ่นกลับลดลง บางรุ่นก็มีขนาดของหน่วยความจำแคชเพิ่มขึ้น หรือบางรุ่นก็ยังมีขนาดของแคชอยู่เท่าเดิม เพื่อคลายความสงสัยนี้เราจึงได้นำข้อมูลที่เกี่ยวข้องกับหน่วยความจำแคชที่อยู่ภายในซีพียูมาอธิบายให้ชัดเจนกันอีกครั้ง โดยเราจะใช้ข้อมูลจากซีพียู AMD Ryzen 5 1600X ซึ่งเป็นซีพียูแบบ 6 คอร์ 12 เธรด มาอธิบายครับ แต่หลักการทั้งหมดที่อธิบายมานี้ก็สามารถนำไปใช้กับซีพียูรุ่นอื่น ๆ ทั้งทางฝั่ง AMD หรือ Intel ก็ได้เช่นกันครับ
หน่วยความจำแคชของซีพียูคืออะไร (Cache Memory)
หน่วยความจำแคชของซีพียูคืออะไร อธิบายสั้น ๆ ก็คือเป็นหน่วยความจำความเร็วสูงที่อยู่ภายในตัวของซีพียู และภายในซีพียูหนึ่งตัวก็จะมีแคชอยู่หลายระดับด้วยกันดังในภาพตัวอย่างก็จะเห็นได้ว่ามีหน่วยความจำแคชอยู่ 3 ระดับ Level 1 Cache, Level 2 Cache และ Level 3 Cache หรือบางทีเราก็จะเรียกกันย่อ ๆ ว่า L1 Cache หรือแคช L1 แบบไทย ๆ แต่จำนวน Level หรือลำดับชั้นของหน่วยความจำแคชในซีพียูอาจจะมีไม่เท่ากันครับ บางรุ่นก็จะมีแค่แคช L1 กับ L2 เท่านั้น หรือบางรุ่นก็จะมีมากถึงระดับ L4 ก็มีแต่ว่ามีน้อยครับ และการมีลำดับชั้นของแคชมากเกินไปก็ใช่ว่าจะดี การมีแคชที่ต่างกันก็เป็นเรื่องของสถาปัตยกรรมซีพียู สำหรับในปัจจุบันซีพียูในระดับเดสก์ท็อปที่เราใช้งานกันอยู่โดยมากจะมีหน่วยความจำแคชอยู่ 3 ระดับ ดังภาพต่อไปนี้

ในรูปที่ 1 เป็นการแสดงให้เห็นถึงโครงสร้างอย่างง่าย ๆ สำหรับทำความเข้าใจเรื่องของหน่วยความจำแคช ภาพตัวอย่างเป็นซีพียูแบบ 6 คอร์ จะเห็นได้ว่าภายในคอร์หรือแกนประมวลผลหนึ่งแกนจะมีแคช L1 และแคช L2 รวมอยู่เป็นส่วนหนึ่งของคอร์ซีพียูด้วยเลย และโดยมากแล้วทั้งแคช L1 และแคช L2 จะทำงานด้วยความเร็วของสัญญาณนาฬิกา (Clock Speed) ที่เท่ากับคอร์ของซีพียูซึ่งเป็นความเร็วที่สูงมาก
- Level 1 Cache: หมายถึงแคชระดับที่ 1 และในแคชระดับที่หนึ่งนี้จะแบ่งหน่วยความจำแคชออกเป็นสองส่วนย่อย ๆ ได้แก่ Data Cache และ Instruction Cache ซึ่งบางทีเรามักจะเรียกกันย่อ ๆ ว่า L1-Data หรือ D-Cache หมายถึงแคชสำหรับเก็บข้อมูล และ L1-Inst หรือ I-Cache หมายถึงแคชของชุดคำสั่ง (จำนวนแคช L1 จะมีเท่ากับจำนวนคอร์ของซีพียู)
- Level 2 Cache: แคชระดับที่ 2 มีจำนวนเท่ากับจำนวนคอร์ของซีพียูเช่นกัน ในตัวอย่างนี้จะมี 6 ชุด เท่ากับจำนวนคอร์ของซีพียู ขนาดของแคช L2 จะมีขนาดใหญ่กว่าแคช L1 อยู่พอสมควร
- Level 3 Cache: แคชระดับที่ 3 โดยมากแล้วจะมีขนาดข้อมูลที่ใหญ่กว่าแคช L1 และ L2 หลายเท่าตัวมาก เพราะเป็นพื้นที่สำหรับพักข้อมูลและเป็นพื้นที่สำหรับแชร์ข้อมูลระหว่างคอร์ประมวลผลของซีพียูด้วย

ลำดับชั้นการทำงานของหน่วยความจำแคช
สำหรับลำดับการทำงานของหน่วยความจำแคชก็จะเป็นคล้าย ๆ ในลักษณะนี้ครับ เช่นเรากำลังนั่งหาข้อมูลเพื่อทำรายงานอยู่บนโต๊ะในห้องสมุด แล้วเดินไปเลือกหนังสือที่ต้องการจำนวนหนึ่งมาใส่ในรถเข็นจนเต็ม จากนั้นเราก็แบ่งหนังสือส่วนหนึ่งจากรถเข็นมากองไว้บนโต๊ะ ต่อมาเราก็หยิบหนังสือเล่มหนึ่งจากในกองนั้นขึ้นมาอ่านเพื่อหาข้อมูล
หนังสือที่เรากำลังอ่านถือว่าเป็นแคช L1 ที่อยู่ใกล้และนำข้อมูลมาใช้งานได้สะดวกสุด แต่คราวนี้ถ้าเราไม่พบข้อมูลในหนังสือที่อยู่ในมือ เราก็จะไปค้นกองหนังสือที่อยู่บนโต๊ะเปรียบได้กับแคช L2 และถ้าข้อมูลในแคช L2 ไม่มีอีก เราก็อาจจะไปค้นในรถเข็นเปรียบได้กับแคช L3 และถ้าในรถเข็นไม่มีอีกคราวนี้เราก็ต้องไปหาที่ชั้นหนังสือซึ่งก็อาจจะเปรียบได้กับหน่วยความจำหลักบนเมนบอร์ดหรือ RAM และเราก็ยกให้ห้องสมุดทั้งห้องเป็น HDD หรือ SSD ไปครับ นี่คือภาพรวมลำดับชั้นของหน่วยความจำแคชอย่างง่ายครับ
ส่วนในทางปฏิบัติจริง ๆ ของซีพียูแคช L1 ก็จะทำหน้าที่เก็บข้อมูลและชุดคำสั่งที่จะต้องนำประมวลผล ซึ่งตรงนี้ก็จะมีตัวจัดการตารางเวลาคอยควบคุมการเข้าออกของข้อมูลและคำสั่งอีกครั้งหนึ่ง สำหรับหน่วยความจำแคช L2 ในเบื้องต้นจะทำหน้าที่เก็บข้อมูลระหว่างการประมวลผล หรือข้อมูลในลักษณะที่ต้องมีการเรียกใช้บ่อย ๆ เพื่อนำส่งเข้าไปยังแคช L1 เพื่อรอการประมวลผลอีกที ซึ่งหน่วยความจำแคช L1 และ L2 นี้จะทำงานเฉพาะกับข้อมูลของคอร์ประมวลผลแต่ละคอร์ไม่ยุ่งเกี่ยวกัน ส่วนข้อมูลที่ประมวลผลเสร็จแล้วและเป็นข้อมูลที่จะต้องใช้ร่วมกันจะถูกนำไปไว้ที่แคช L3 (ลองดูรูปที่ 1 และ 2 ประกอบ)

ขนาดของหน่วยความจำแคช
จากรูปที่ 3 ข้อมูลซีพียู AMD Ryzen 5 1600X ที่ได้จากโปรแกรม CPU-Z เราจะสังเกตได้ว่าขนาดของแคช L1 มีขนาดที่ค่อนข้างเล็กมากเพียง 32KB ต่อคอร์ เมื่อเทียบกับแคช L2 ที่มีขนาด 512KB ต่อคอร์ และ L3 ขนาด 8MB สองชุด (รวมเป็น 16MB) และในภาพรวมแล้วเราจะเห็นได้ว่าหน่วยความจำแคชทั้งหมดมีขนาดรวมอยู่ในหลัก MB (เมกะไบต์) เท่านั้น ในขณะที่หน่วยความจำหลักของเราเดี๋ยวนี้ขั้นต่ำก็ว่ากันที่ระดับ 8GB (กิกะไบต์) กันหมดแล้ว
ขนาดของหน่วยความจำแคชที่มีขนาดเพียงหลัก KB (กิโลไบต์) ในแคช L1 และแคช L2 ก็เพราะว่า พื้นที่ตรงนี้มีไว้สำหรับการประมวลผลคำสั่งและข้อมูลทีละชุดเท่านั้นแม้ว่าซอฟต์แวร์ที่เราใช้งานอยู่จะมีขนาดใหญ่โตสักเท่าใดแต่ชุดคำสั่งที่เข้ามาประมวลผลภายในซีพียูนั้นจะมีขนาดที่เล็กมาก ดังนั้นการมีแคช L1 และ L2 ใหญ่ ๆ จึงไม่ได้ช่วยให้ประสิทธิภาพในการทำงานของซีพียูดีขึ้น (ที่สำคัญแคช L1, L2 และ L3 เป็นหน่วยความจำแบบพิเศษที่มีต้นทุนการผลิตสูงมาก และถ้ามีมากเกินความจำเป็นก็จะทำให้ราคาของซีพียูสูงขึ้นด้วยครับ)
ในทางกลับกันการเลือกใช้ขนาดของแคช L1 และ L2 จะต้องผ่านขั้นตอนการออกแบบโดยเทียบกับลักษณะของชุดคำสั่งที่ซีพียูรุ่นนั้น ๆ ทำงานแล้วออกแบบมาให้เหมาะสมจึงจะทำให้การประมวลผลโดยรวมของซีพียูดีขึ้น เพราะการมีหน่วยความจำไม่ว่าจะเป็นส่วนใดหมายความว่าเราต้องเสียเวลาในการกำหนดตำแหน่งการเข้าถึงข้อมูล ถ้าขนาดของหน่วยความจำแคช L1 และ L2 ใหญ่ ก็จะมีตำแหน่งในการเข้าถึงข้อมูลมากมันก็จะเสียเวลาไปกับการค้นหาข้อมูลที่ต้องการด้วยนั่นเอง
ส่วนหน่วยความจำแคช L3 นั้นจะมีขนาดที่ค่อนข้างใหญ่เมื่อเทียบกับแคช L1 และแคช L2 เนื่องจากหน่วยความจำแคช L3 จะทำหน้าที่เป็นพื้นที่พักข้อมูลของซีพียูในระหว่างการประมวลผลซึ่งในปัจจุบันซีพียูส่วนมากจะมีลักษณะเป็นแบบ Multi-Core หรือมีคอร์ประมวลผลมากกว่า 1 คอร์ (บางตำราอาจจะเรียกแกนประมวลผล) เช่นซีพียูรุ่นเล็กอย่าง Intel Core i3-8100 และ AMD Ryzen 3 1200 ที่มีราคาไม่กี่พันบาทก็ยังเป็นซีพียูแบบ 4 คอร์ ซึ่งเหมือนกับมีหลายคนช่วยกันทำงานและงานที่แต่ละคนทำก็จะนำมาพักไว้ที่แคช L3 เพื่อรอย้ายไปเก็บในหน่วยความจำหลัก (RAM) หรืออาจจะถูกนำไปใช้งานต่อจากคอร์ประมวลผลอื่น ๆ

หน่วยความจำแคชความเร็วสำคัญกว่าขนาด
สำหรับหน่วยความจำแคชแล้วความเร็วในการทำงานสำคัญกว่าขนาดครับ ลองดูรูปที่ 4 ซึ่งเป็นการทดสอบด้วยโปรแกรม AIDA64 Memory Benchmark ในช่อง Latecny หรือค่าเวลาหน่วง (เพื่อรอจังหวะการทำงาน) จะเห็นได้ว่าหน่วยความจำแคช L1 มีค่า Latency อยู่ที่ 1.1ns (nano second หรือ 1 ในพันล้านส่วนของวินาที) ในขณะที่แคช L2 มีค่า Latency อยู่ที่ 4.5ns จะเห็นว่าช้ากว่าถึง 3.4ns ส่วนแคช L3 มีค่า Latency 12ns ยิ่งช้ากว่า L1 เป็นสิบเท่า และลองย้อนกลับไปดูด้านบนสุดที่เป็นค่าของ Memory ซึ่งหมายถึง RAM ที่ติดตั้งอยู่บนเมนบอร์ดมีค่า Latency สูงถึง 95.8ns ช้ากว่าแคช L1 ถึง 94.7ns เหมือนกับแคช L1 ทำงานไปได้ 94 ครั้งแล้ว แต่ RAM เพิ่งจะทำงานได้ 1 ครั้งเท่านั้นเอง
หรือถ้าดูเรื่องเวลาแล้วงงก็ลองมาดูเรื่องปริมาณของข้อมูลกันครับ ขอยกตัวอย่างจากช่อง Read ก็แล้วกันนะครับเห็นภาพชัดดี อันแรก Memory หรือ RAM ของระบบซึ่งเป็น DDR4-2400MHz สามารถอ่านข้อมูลได้ที่ 36179MB/s หรือประมาณ 3.61GB/s ในขณะที่แคช L1 สามารถอ่านข้อมูลได้สูงถึง 687.98GB/s จะเห็นได้ว่าต่างถันถึงหกร้อยเกือบเจ็ดร้อยเท่า ส่วนหน่วยความจำแคช L2 ก็จะอ่านได้ช้ากว่าแคข L1 อยู่เล็กน้อยคือที่ 616.88GB/s และถ้าดูที่แคช L3 ก็ทำงานได้ช้าลงอีกอยู่ที่ 379.50GB/s แม้จะช้าแต่ก็ยังเร็วกว่าหน่วยความจำ RAM อย่างมากที่มีความเร็วเพียง 3.61GB/s เท่านั้น ลองดูค่า Write และ Copy เราก็จะเห็นได้ว่าความเร็วทั้งหมดออกมาในรูปแบบเดียวกัน
แล้วเราต้องเลือกใช้ซีพียูจากขนาดของแคชหรือไม่
ในเมื่อหน่วยความจำแคชมีผลต่อประสิทธิภาพในการทำงานโดยรวมของซีพียู แต่ในการเลือกซื้อเลือกใช้ซีพียูเราก็ไม่ต้องไปซีเรียสกับขนาดของหน่วยความจำแคชมากนัก เพราะว่าจุดที่สำคัญในการเลือกใช้ซีพียูก็ยังอยู่ที่จำนวนคอร์จำนวนเธรดของซีพียูที่เราต้องนำไปขับเคลื่อนซอฟต์แวร์หรือเกมที่เราต้องการเล่นมากกว่าครับ เพราะขนาดของหน่วยความจำแคชทางผู้ผลิตซีพียูจะเป็นผู้ออกแบบและกำหนดขนาดให้มีความเหมาะสมและสอดคล้องต่อประสิทธิภาพในการทำงานของซีพียูรุ่นนั้น ๆ อยู่แล้วนั่นเองครับ