หลายครั้งที่คุณจะได้เห็นไฟล์ชั่วคราวที่จะลบออกจาก Windows หรือเพื่อให้ได้พื้นที่ที่เรียกว่า DirectX shader cache หรือ Shader Cache หากคุณเคยสงสัยว่ามันคืออะไรและทำไมประสิทธิภาพของเกมเมื่อคุณลบมันลดลง คุณเพียงแค่อ่านบทความนี้
GPU เป็นโปรเซสเซอร์เช่นเดียวกับซีพียู แต่ต่างกันตรงที่ความขนานกันเป็นแบบเธรด นั่นคือเหตุผลที่ว่ากันว่าโปรเซสเซอร์กราฟิกเป็นประเภท TLP ในขณะที่ตัวกลางเป็นประเภท ILP สำหรับสิ่งนี้ เราต้องเพิ่มว่าในขณะที่เธรดการดำเนินการในกราฟไม่ได้มุ่งไปที่กระบวนการ แต่ไปที่กราฟิกดั้งเดิมหรือข้อมูล
กล่าวอีกนัยหนึ่ง สามเหลี่ยม พิกเซล หรือส่วนย่อยแต่ละอันมีโปรแกรมเชดเดอร์ของตัวเองสำหรับแต่ละขั้นตอนของไปป์ไลน์ 3 มิติ ซึ่งเขียนด้วยภาษาระดับสูง เช่น HLSL ถ้าเรากำลังพูดถึง DirectX หรือ GLSL ถ้าเรากำลังพูดถึง OpenGL หรือ Vulkan แม้ว่าจะมีบางส่วนที่เป็นเอกสิทธิ์ของบางระบบ เช่น PSGL ของ SONY's เพลย์สเต คอนโซล โปรแกรมเหล่านี้จำเป็นต้องรวบรวมและส่งต่อจากซอร์สโค้ดเป็นไบนารี
Shader Cache คืออะไร?
ปัญหาเกิดขึ้นเมื่อ ตรงกันข้ามกับสิ่งที่เกิดขึ้นกับ CPU โดยที่พวกมันเป็น x86 ทั้งหมด ในกรณีของ GPU ชุดของการลงทะเบียนและคำสั่งนั้นไม่ใช่เรื่องธรรมดา ไม่ใช่ระหว่างแบรนด์ แต่รวมถึงสถาปัตยกรรมของแบรนด์เดียวกันด้วย ซึ่งหมายความว่าจะต้องคอมไพล์โค้ดของ shaders ในขณะที่เราเล่น ทำให้เกิดปัญหาการกระตุกและประสิทธิภาพการทำงาน ดังนั้นไบนารีที่สร้างขึ้นจะถูกเก็บไว้ในไฟล์ที่เมื่อโหลดเกมอีกครั้ง จะถูกโหลดซ้ำในหน่วยความจำวิดีโอของกราฟิกการ์ด ซึ่งเราเรียกว่าแคชเชดเดอร์หรือแคชเชเดอร์
ดังนั้นหากเราอัปเดตกราฟิกการ์ดของเรา สิ่งเหล่านี้จะต้องถูกสร้างขึ้นสำหรับแต่ละเกมของเราอีกครั้ง หากเราลบออกจากฮาร์ดไดรฟ์หรือ SSD เช่นกัน. ยิ่งไปกว่านั้น นี่เป็นหนึ่งในเหตุผลที่ไม่ควรตัดสินกราฟิกการ์ดเมื่อเราเล่นเกมเป็นครั้งแรก โดยเฉพาะอย่างยิ่งถ้าเราต้องการวัดประสิทธิภาพปกติของพวกเขา
VRAM ยังกินเนื้อที่
เหตุการณ์ GPU ของกราฟิกการ์ดของคุณเข้าถึงได้เฉพาะระบบ แรม ผ่านอินเทอร์เฟซ PCI Express และใช้หน่วย DMA ดังนั้นแคช shader จะถูกโหลดพร้อมกับข้อมูลภาพที่จำเป็นในการเขียนฉากจากหน่วยเก็บข้อมูลเป็น RAM และจาก RAM ไปยังหน่วยความจำวิดีโอ แม้ว่าด้วย DirectStorage คาดว่าฮาร์ดแวร์กราฟิกจะสามารถเข้าถึง SSD ได้โดยตรง ลดเวลาแฝงในการเข้าถึงและปัญหาที่ต้องพึ่งพา ซีพียู.
หลายเกมได้รับการพัฒนามาอย่างดีและแคชเชเดอร์ใช้พื้นที่เพียงเล็กน้อย แต่เกมอื่นๆ ไม่ได้มากมายนักและจบลงด้วยการใช้หน่วยความจำกราฟิกจำนวนมาก หมายความว่าถ้าไดรเวอร์มีขีดจำกัดที่เกี่ยวข้องหรือตัวเกมเอง เราพบว่าการรวบรวมใหม่มาแทนที่อันเก่าและปัญหาประสิทธิภาพการทำงานเริ่มต้นกลับมา
ไม่ว่าในกรณีใด เราต้องจำไว้ว่าหากเกมที่เรากำลังเล่นต้องการพื้นที่ใน RAM ของวิดีโอ เกมนั้นจะให้ความสำคัญกับการเรนเดอร์เฟรมปัจจุบันมากกว่า ดังนั้นมันจะพยายามดึงแคช shader ที่เก็บไว้ในหน่วยความจำระบบชั่วคราว นอกจากนี้ โปรดจำไว้ว่าการทิ้งข้อมูลไปยังหน่วยเก็บข้อมูลนั้นเกิดขึ้นอย่างต่อเนื่อง เนื่องจากเมื่อมีการสร้าง shader ของกราฟิกดั้งเดิมแล้ว ก็ไม่มีความจำเป็นต้องทำอีกครั้ง
การติดตามเรย์และแคชเชเดอร์
ในการติดตามรังสีคำถามที่พบบ่อยที่สุดของ GPU คือประเภทบูลีน รังสีนี้ตัดกับกราฟดั้งเดิมหรือไม่ คำตอบไม่ได้ใช่เสมอไป ดังนั้นจึงมีเงื่อนไขที่จะเกิดขึ้นหรือไม่ขึ้นอยู่กับสถานการณ์ ดังนั้น เมื่อเรียกใช้ shader นี้เป็นครั้งแรก จำเป็นต้องคอมไพล์และสร้าง cache shader เพื่อให้ได้ผลลัพธ์ที่เป็นไปได้ทั้งหมด
Shader Cache บนคอนโซล
คอนโซลวิดีโอเกมจะมีส่วนประกอบเหมือนกันเสมอ ตั้งแต่รุ่นแรกที่ออกจากโรงงานไปจนถึงรุ่นสุดท้าย แม้ว่าจะผ่านไปหลายปี แต่คุณสมบัติของมันก็ไม่เปลี่ยนแปลง ตัวอย่างเช่น วันนี้คุณสามารถค้นหารุ่นเก่ากว่าการ์ดกราฟิกที่เก่าที่สุด วิธีหนึ่งในการใช้ประโยชน์จากความไม่เปลี่ยนรูปของฮาร์ดแวร์คือการใช้ shaders ที่เรียกว่าที่คอมไพล์แล้วในการติดตั้งเกม ทำให้ไม่จำเป็นต้องสร้างแคชเชเดอร์สำหรับแต่ละเกม แต่ก็เป็นดาบสองคมด้วย
ตัวอย่างเช่น หากคุณต้องการสร้างคอนโซลที่เข้ากันได้กับเวอร์ชันเก่าและทรงพลังยิ่งขึ้น คุณมีตัวเลือกต่อไปนี้:
- ส่งออก ISA ไปยัง GPU ของระบบใหม่ ทำให้ทำงานเป็น superset ของตัวเก่า นี่คือสิ่งที่ AMD ทำใน PlayStation 5 และ Xbox Series ด้วยสถาปัตยกรรม RDNA 2 เพื่อรันเกมรุ่นก่อนหน้าที่ออกแบบมาสำหรับ GCN ได้อย่างราบรื่น
- รวมวงจรกราฟิกทั้งหมดของระบบก่อนหน้าไว้ในระบบใหม่ นี่คือสิ่งที่ Nintendo ทำบนคอนโซลจนถึง 3DS และ SONY ด้วย PlayStation เครื่องที่สองและบางรุ่นของรุ่นที่สาม
ในระดับอีมูเลเตอร์ สิ่งที่ทำในหลายกรณีคือการนำ shader ที่คอมไพล์แล้วและทำกระบวนการย้อนกลับ สร้างโค้ดระดับกลางที่สามารถสร้าง Shader Cache ที่สร้างขึ้นเพื่อทำงานกับการ์ดกราฟิกของคุณได้ อย่างไรก็ตาม มันไม่ใช่วิทยาศาสตร์ที่แน่นอน และคุณอาจพบข้อบกพร่องทางกราฟิกบางอย่างเมื่อรันเกม
การเพิ่มประสิทธิภาพสำหรับผู้ผลิต GPU
ทั้งสอง NVIDIA รวมถึง เอเอ็มดี มักจะรวมถึงการเพิ่มประสิทธิภาพในไดรเวอร์ล่าสุดสำหรับการตัด-ขอบ เกม. สิ่งเหล่านี้ไม่เพียงรวมถึงการตั้งค่าที่เหมาะสมที่สุดสำหรับประสิทธิภาพที่สูงขึ้น แต่ยังรวมถึงแคช shader ที่ปรับให้เหมาะสมแล้วสำหรับแต่ละเกมและสเปกที่ดีกว่าเกมหลัก และผู้ผลิตทั้งสองต่างก็ให้ความสนใจในการ์ดกราฟิกที่ล้ำหน้าที่สุดของพวกเขาซึ่งมีประสิทธิภาพสูงสุดเท่าที่เป็นไปได้ในเกมที่ทรงพลังที่สุดที่มีอยู่ในปัจจุบัน
ดังนั้นสิ่งเหล่านี้จึงทิ้งเงินไว้ให้กับสตูดิโอพัฒนาต่างๆ ซึ่งปรับแต่งโปรแกรม shader สำหรับสถาปัตยกรรมกราฟิกบางอย่าง และสร้างแคช shader ที่ทำงานได้ดีกว่าที่มาพร้อมกับเกมหลัก สิ่งนี้ทำขึ้นเพื่อสนับสนุนการซื้อโมเดลใหม่และสร้างโปรแกรมที่ล้าสมัย ซึ่งจำเป็นเพื่อให้มีกระแสการบริโภคที่ค้ำจุนอุตสาหกรรม นั่นคือเหตุผลที่เกมหลายๆ เกมที่แทบจะไม่มีการเปลี่ยนแปลงใดๆ