โดยทั่วไป GPU สมัยใหม่จะมีส่วนหน้าเดียวที่ประมวลผลสตรีมเชิงเส้นทั้งหมดของคำสั่งจาก CPU ไม่ว่าจะเป็นการออกแบบฮาร์ดแวร์ที่เป็นธรรมชาติหรือหากวิวัฒนาการมาจากยุคสมัยเมื่อมีคำสั่ง CPU core เพียงตัวเดียวที่สร้างขึ้นสำหรับ GPU นั้นเป็นที่ถกเถียงกันอยู่ แต่ตอนนี้มันเป็นความจริงแล้ว ดังนั้นหากคุณสร้างสตรีมเชิงเส้นเดียวของคำสั่ง stateful แน่นอนมันทำให้รู้สึกถึงการสร้างกระแสที่เป็นเส้นตรงในหัวข้อเดียวบน CPU! ขวา?
โดยทั่วไป GPU สมัยใหม่นั้นมีแบ็กเอนด์รวมที่ยืดหยุ่นมากซึ่งสามารถทำงานกับสิ่งต่าง ๆ มากมายในคราวเดียว โดยทั่วไปแล้ว GPU จะทำงานกับจุดยอดและพิกเซลอย่างละเอียด มีความแตกต่างไม่มากนักระหว่างการประมวลผล GPU 1024 จุดยอดในการวาดหนึ่งครั้งและ 512 + 512 จุดยอดในการจับคู่สองแบบที่แตกต่างกัน
นั่นเป็นการแนะนำวิธีที่เป็นธรรมชาติในการทำงานน้อยกว่า: แทนที่จะโยนจุดยอดเยี่ยมจำนวนมากที่ GPU ในการดึงสายเดี่ยวแบ่งโมเดลของคุณออกเป็นส่วน ๆ ทำแบบหยาบ ๆ ในราคาถูกแล้วส่งแต่ละชิ้นถ้าผ่าน การทดสอบการคัด หากคุณทำในสิ่งที่ถูกต้องคุณควรได้รับการเร่งความเร็วที่ดี!
โชคไม่ดีที่ในความเป็นจริงกราฟิก API ปัจจุบันการเรียกสายนั้นแพงมาก คำอธิบายที่เรียบง่ายว่าเพราะเหตุใด: การเปลี่ยนแปลงสถานะของ GPU อาจไม่ตรงกับการเรียกใช้กราฟิก API โดยตรงดังนั้นการเรียก API กราฟิกจำนวนมากเพียงแค่ตั้งค่าสถานะบางอย่างในไดรเวอร์ สถานะที่ถูกทำเครื่องหมายว่ามีการเปลี่ยนแปลงตั้งแต่การวาดครั้งล่าสุดเขียนลงในสตรีมคำสั่งสำหรับ GPU จากนั้นเริ่มการวาดจริง ทั้งหมดนี้เป็นงานที่ทำเพื่อพยายามรับกระแสข้อมูลคำสั่งแบบลีนและค่าเฉลี่ยสำหรับหน่วยส่วนหน้าของ GPU
สิ่งนี้เดือดลงไปคือการที่คุณมีงบประมาณสำหรับการโทรวาดซึ่งจะเรียกเก็บค่าใช้จ่ายโดยสิ้นเชิงของคนขับ (ฉันคิดว่าฉันได้ยินมาว่าทุกวันนี้คุณสามารถหลีกเลี่ยงได้ประมาณ 5,000 ต่อเฟรมสำหรับชื่อเรื่อง 60 FPS) คุณสามารถเพิ่มมันได้ในอัตราร้อยละมากโดยการสร้างสตรีมคำสั่งนี้เป็นชิ้น ๆ แบบขนาน
มีเหตุผลอื่นเช่นกัน (ตัวอย่างเช่น timewarp แบบอะซิงโครนัสสำหรับการปรับปรุงเวลาแฝงของ VR) แต่นี่เป็นเกมที่มีขนาดใหญ่สำหรับเกมที่มีกราฟิคผูกไว้และซอฟต์แวร์ drawcall ที่มีน้ำหนักมากอื่น ๆ