GPU สมัยใหม่มีหน่วยแรเงาแบบขนานจำนวนมาก ฉันต้องการทราบวิธีจัดการแคชพื้นผิวในสถานการณ์นั้น
GPU สมัยใหม่มีหน่วยแรเงาแบบขนานจำนวนมาก ฉันต้องการทราบวิธีจัดการแคชพื้นผิวในสถานการณ์นั้น
คำตอบ:
ที่ระดับบนสุด GPU จะถูกแบ่งย่อยเป็นหลายแกนหลักของ shader GPU ขนาดเล็กในโน้ตบุ๊กหรือแท็บเล็ตอาจมีเพียงไม่กี่คอร์ในขณะที่ GPU เดสก์ท็อประดับสูงอาจมีหลายสิบ
นอกเหนือจากแกนของ shader แล้วยังมีหน่วยพื้นผิวด้วย พวกมันอาจจะถูกจัดกลุ่มพร้อมกับหน่วยพื้นผิวหนึ่งหน่วยต่อแกนของ shader หรือหน่วยพื้นผิวหนึ่งหน่วยที่แบ่งเป็นสองหรือสามแกนขึ้นอยู่กับ GPU
ชิปทั้งหมดแชร์แคช L2 เดียว แต่หน่วยต่าง ๆ จะมีแคช L1 แต่ละรายการ หน่วยพื้นผิวมีแคชพื้นผิวและหน่วย shader มีแคชสำหรับคำแนะนำและค่าคงที่ / ชุดเครื่องแบบและอาจแคชที่แยกต่างหากสำหรับข้อมูลบัฟเฟอร์ขึ้นอยู่กับว่าโหลดบัฟเฟอร์เป็นเส้นทางแยกจากโหลดเนื้อหรือไม่ (แตกต่างกันไปตามสถาปัตยกรรม GPU)
หน่วยพื้นผิวทำงานอย่างอิสระและไม่พร้อมกันจากแกน shader เมื่อ shader ทำการอ่านเท็กซ์เจอร์มันจะส่งคำร้องขอไปยังหน่วยเท็กซ์เจอร์ผ่านบัสเล็กน้อยระหว่างพวกเขา shader สามารถดำเนินการต่อได้ถ้าเป็นไปได้หรืออาจหยุดชั่วคราวและอนุญาตให้เธรด shader อื่นทำงานในขณะที่รอให้พื้นผิวอ่านเสร็จ
หน่วยพื้นผิวจะรวบรวมคำขอจำนวนมากและทำการคำนวณทางคณิตศาสตร์กับพวกมัน - การเลือกระดับ mip และ anisotropy แปลง UV เป็นพิกัด texel การใช้โหมด clamp / wrap เป็นต้นเมื่อรู้ว่าจำเป็นต้องใช้ Texel ใดมันจะอ่านผ่านทาง ลำดับชั้นของแคชแบบเดียวกับที่หน่วยความจำอ่านทำงานบน CPU (ดูใน L1 ก่อนถ้าไม่มี L2 แล้วตามด้วย DRAM) หากคำขอที่รอดำเนินการจำนวนมากต้องการสิ่งเดียวกันหรือใกล้เคียงกับเท็กซัส (ตามปกติ) คุณจะได้รับประสิทธิภาพมากมายที่นี่เนื่องจากคุณสามารถตอบสนองคำขอที่รอดำเนินการจำนวนมากได้ การดำเนินการทั้งหมดเหล่านี้ถูกไพพ์ไลน์ดังนั้นในขณะที่หน่วยพื้นผิวกำลังรอหน่วยความจำในแบทช์เดียวก็สามารถทำการคำนวณเลขที่อยู่สำหรับการร้องขออีกชุดหนึ่งและอื่น ๆ
เมื่อข้อมูลกลับมาหน่วยพื้นผิวจะถอดรหัสรูปแบบที่บีบอัดทำการแปลง sRGB และการกรองตามความจำเป็นจากนั้นส่งคืนผลลัพธ์กลับไปที่แกนของ shader