คอมไพเลอร์ของ Shader มีความก้าวร้าวอย่างมากเกี่ยวกับการคลี่คลายเนื่องจาก HW ในช่วงต้นมักไม่มีการควบคุมการไหลและค่าใช้จ่ายใน HW ล่าสุดอาจแตกต่างกันไป หากคุณมีเกณฑ์มาตรฐานคุณกำลังทดสอบและฮาร์ดแวร์ที่เกี่ยวข้องอยู่ให้ลองทำสิ่งต่าง ๆ เพื่อดูว่าเกิดอะไรขึ้น การวนซ้ำแบบไดนามิกของคุณนั้นคล้อยตามการแทรกแซงของนักพัฒนามากกว่าการวนซ้ำแบบคงที่ แต่การปล่อยให้วงไปยังคอมไพเลอร์ยังคงเป็นคำแนะนำที่ดีเว้นแต่คุณจะมีเกณฑ์มาตรฐาน ด้วยมาตรฐานการสำรวจจึงคุ้มค่า (และสนุก)
BTW การสูญเสียที่ยิ่งใหญ่ที่สุดกับลูปแบบไดนามิกบน GPU คือ "เธรด" แต่ละรายการใน wavefront / warp จะเสร็จสิ้นในเวลาที่ต่างกัน เธรดที่หยุดในภายหลังบังคับให้เธรดทั้งหมดที่เสร็จสิ้นก่อนเพื่อเรียกใช้งาน NOP
ลูปซ้อนควรพิจารณาอย่างรอบคอบผ่าน: ฉันใช้ตัวถอดรหัสเอนโทรปีของบล็อกที่เข้ารหัสการทำงานของศูนย์ (สำหรับ JPEG เช่นการบีบอัด) การใช้งานตามธรรมชาติคือการถอดรหัสการรันในลูปภายในที่แน่นหนาซึ่งหมายความว่ามีเธรดเดียวเท่านั้นที่กำลังดำเนินการ โดยการทำให้วนรอบแบนและทดสอบอย่างชัดเจนในแต่ละเธรดหากกำลังถอดรหัสการรันหรือไม่ฉันยังคงเธรดทั้งหมดที่ใช้งานผ่านลูปความยาวคงที่ (บล็อกที่ถอดรหัสมีขนาดเท่ากันทั้งหมด) หากเธรดเหมือนเธรดของ CPU การเปลี่ยนแปลงจะน่ากลัว แต่บน GPU ที่ฉันใช้งานฉันเพิ่มประสิทธิภาพการทำงาน 6 เท่า (ซึ่งยังแย่มาก - ไม่มีบล็อกเพียงพอที่จะทำให้ GPU ไม่ว่าง - แต่มันเป็นข้อพิสูจน์ของแนวคิด)