การใช้แผนที่พื้นผิวหลายอย่างไม่ดีสำหรับการแคชหรือไม่?


10

หากฉันมีพื้นผิวหลายอย่าง (พูดว่าแผนที่มากกว่า 5 แผนที่) ไปยังหน่วยพื้นผิวเดียวกันมันจะทำงานได้แย่กว่าแคชมากกว่าถ้าฉันมีเพียง 2 หรือ 3 พื้นผิว?

คำตอบ:


16

เพียงเพิ่มคำตอบของ imallettมันเป็นความจริงที่การเพิ่มจำนวนการเข้าถึงข้อมูลพื้นผิวที่แตกต่างใน shader จะเพิ่มแรงกดดันต่อแคชแคชของ GPU แต่มีปัจจัยอื่นอีกหลายอย่างที่สามารถมีอิทธิพลต่อผลกระทบ นอกจากนี้ยังอาจซับซ้อนด้วยความจริงที่ว่าเช่นแคชของ CPU อาจมีแคชหลายชั้นใน GPU เช่น หน่วยพื้นผิว <= L0 <= L1 <= .. หน่วยความจำ

หลีกเลี่ยงการใช้นามแฝง -> ใช้แผนที่ MIP

หากคุณมีฉากที่มีการลดลงของข้อมูลพื้นผิวไม่ว่าจะเป็นเพราะมุมมองหรือการปรับขนาดอย่างง่ายและคุณไม่ได้ใช้การจับคู่ MIP คุณจะได้รับนามแฝง นี่ไม่ได้เป็นเพียงการผลิตสิ่งประดิษฐ์ทางสายตา มันมีโอกาสมากที่จะเป็นปัญหาด้านประสิทธิภาพ

ทันทีที่คุณได้รับนามแฝงที่อยู่การเข้าถึงพื้นผิวจะไม่ต่อเนื่องกันซึ่งไม่เพียง แต่จะจบลงด้วยการแคชแคช แต่ยังแนะนำ DRAM "ตัวแบ่งหน้า" จำนวนมาก (ถูกต้องมากขึ้นแบ่งแถว) ซึ่งอาจมีค่าใช้จ่ายสูง การทำแผนที่ MIP ช่วยลดความไม่ต่อเนื่องกัน

การบีบอัดพื้นผิว

อาจเป็นตัวเลือกที่ชัดเจน แต่ถ้าคุณสามารถใช้การบีบอัดพื้นผิว (เช่น DXTn | ETC * | PVRTC * | ฯลฯ ) กำหนดเป้าหมายจาก 8bpp ลงไปพูด 2bpp คุณสามารถเพิ่มประสิทธิภาพของแบนด์วิดธ์หน่วยความจำ / แคชโดย ปัจจัยของ 4x ถึง 16x ตอนนี้ฉันไม่สามารถพูดกับ GPU ทั้งหมดได้ แต่โครงร่างการบีบอัดพื้นผิวบางส่วน (เช่นที่กล่าวไว้ข้างต้น) นั้นง่ายต่อการถอดรหัสในฮาร์ดแวร์เพื่อให้ข้อมูลสามารถบีบอัดได้ตลอดทั้งลำดับชั้นแคชทั้งหมดและจะแตกในหน่วยพื้นผิวเท่านั้น เพิ่มขนาดของแคชอย่างมีประสิทธิภาพ

ขนาดข้อมูล

เห็นได้ชัดว่าข้อมูลบางอย่างเช่นแสดงเป้าหมายที่ใช้เป็นข้อมูลพื้นผิวในการแสดงผลในภายหลังไม่สามารถใช้การบีบอัดพื้นผิวได้ เมื่อใดก็ตามที่คุณสามารถใช้รูปแบบพิกเซลที่เล็กที่สุดที่จะทำงานเช่นถ้า 32 / 16bpp (A) RGB จะทำไม่ได้ใช้รูปแบบโฟลต 4x32!

การเข้าถึงเบาบาง

สิ่งนี้ค่อนข้างเกี่ยวข้องกับตัวอย่างนามแฝงด้านบน แต่เราเห็นกรณีที่สร้างเป้าหมายการแสดงผลขนาดใหญ่ แต่จากนั้นสุ่มตัวอย่างเบาบางมากเท่านั้น เส้นแคชไม่ว่าจะเป็นในซีพียูหรือ GPU นั้นค่อนข้างยาวดังนั้นหากคุณใช้เพียงหนึ่งพิกเซลในแต่ละบรรทัดแคชคุณจะเสียการถ่ายโอน

นอกจากนี้พื้นผิวที่ถูกบีบอัดของ WRT จะช่วยให้เกิดการบีบอัดโดยการแบ่งปันข้อมูลอย่างมีประสิทธิภาพระหว่างภูมิภาคของ Texel หากคุณไม่มีการเข้าถึงที่สอดคล้องกันนอกจากการลดขนาดหน่วยความจำแล้วการบีบอัดอาจไม่ช่วยได้

พื้นผิวขึ้นอยู่กับการอ่าน

มีปัญหาแคชไม่มากนัก (ยกเว้นว่าการเข้าถึงที่คำนวณได้นั้นไม่ต่อเนื่องกัน) แต่การเข้าถึงพื้นผิวที่ไม่ได้กำหนดโดยตรงโดยพิกัด UV ที่มาพร้อมกับจุดยอดอาจช้ากว่าที่กำหนดไว้โดยตรง

กระเบื้อง / มอร์ตัน VS พื้นผิวที่มีความเข้มงวด

แม้ว่าฉันสงสัยว่าพื้นผิวส่วนใหญ่ทุกวันนี้จะถูกเก็บไว้ในคำสั่งแบบเรียงต่อกันหรือแบบมอร์ตัน (aka Twiddled / Swizzled) (หรือแม้กระทั่งการรวมกันของทั้งคู่) แต่พื้นผิวบางอย่างอาจยังอยู่ในลำดับการสแกน พื้นผิวมีแนวโน้มที่จะนำไปสู่การแบ่งจำนวนแคชที่ขาดหายไป / หน้า โชคไม่ดีที่ฉันไม่รู้ว่าจะระบุได้อย่างไรหากมีการจัดรูปแบบเฉพาะตามวิธีดังกล่าว

(สำหรับการอ่านพื้นหลังลองใช้ความจริงเกี่ยวกับการทำแผนที่พื้นผิวของ Blinn FWIW โดยใช้เวลาไม่กี่ขั้นตอนต่อไปที่จะนำไปใช้การสั่งซื้อแบบ Twiddled-order (เช่น Morton order) ในฮาร์ดแวร์พีซียุคแรก


8

คำตอบขึ้นอยู่กับสิ่งที่คุณหมายถึง ฮาร์ดแวร์ที่ทันสมัย ​​(เช่นที่มีพื้นผิวแบบไร้ขอบ) ไม่ได้สนใจอะไรมากไป คำถามจริงคือหลายวิธีที่คุณใช้

พื้นผิวโดยทั่วไปเก็บข้อมูลในลักษณะที่เป็นมิตรกับแคช (ผมเชื่อว่าเป็นโค้งมอร์ตัน) หากคุณใช้พื้นผิวมากขึ้นคุณจะได้รับแคชมากขึ้นเนื่องจากตอนนี้พื้นผิวแข่งขันกันเพื่อเว้นวรรค

การเขียนโปรแกรมแบบ shader แบบเก่าที่เป็นที่รู้จักและรู้จักกันดีคือก๊อกน้ำแบบสัมผัสช้า อย่าใช้มากเกินไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.