ทำไมไปป์ไลน์ที่ตั้งโปรแกรมได้ (GLSL) เร็วกว่าไปป์ไลน์ที่กำหนดตายตัว?


27

ดังนั้นฉันจึงสอนตัวเองว่า GLSL และกำลังพยายามหาสาเหตุว่าทำไมจึงควรเร็วกว่าฟังก์ชั่นคงที่

เหตุผลที่ฉันมีปัญหาก็คือจากความเข้าใจของฉันผู้สร้างที่คุณสร้างจะแทนที่ส่วนของท่อที่เคยมีมาก่อน ดังนั้นการเสนอเวอร์ชั่นของคุณจะช่วยเร่งความเร็วได้อย่างไร

สิ่งเดียวที่ฉันคิดได้ก็คือถ้าคุณพยายามที่จะบอกว่าสมการแสงของคุณมาก่อนคุณจะต้องทำการคำนวณบน CPU แต่ตอนนี้คุณสามารถทำการคำนวณบน GPU ซึ่งจะเร็วขึ้น

ฉันเข้าใจสิ่งนี้ถูกต้องหรือไม่


คุณกำลังถามว่ามันเร็วกว่าในการสร้างฟังก์ชั่นที่มีอยู่ในเวอร์ชันของคุณเองหรือถ้ามันเร็วกว่าในการลดฟังก์ชั่นที่คุณคำนวณบน CPU
MichaelHouse

ฉันพบโพสต์ใน gamedev.net ที่ตอบคำถามของฉัน
Joey Green

2
ฉันเห็น. คุณควรโพสต์คำตอบเกี่ยวกับที่นี่เพื่อให้ผู้อื่นได้รับประโยชน์ บางทีการชี้แจงคำถามของคุณในกระบวนการ
MichaelHouse

@ joey-green คุณจะกรุณาลิงค์gamedev.netที่นี่ ฉันจะเป็นประโยชน์สำหรับคนที่จะสะดุดกับคำถามนี้
Quazi Irfan

1
เพื่อสร้างความสับสนให้กับเรื่องต่าง ๆ มากขึ้นในการทดสอบของฉันท่อส่งคงที่อาจจริงเร็วกว่าตัวแปลงแสงอย่างน้อยก็ในกรณีง่าย ๆ ดูsol.gfxile.net/instancing.html
Jari Komppa

คำตอบ:


27

ตัวสร้างที่คุณสร้างไม่ได้เป็นไปตามรุ่นของคุณเองของฟังก์ชันไปป์ไลน์ (FFP) แต่เป็นการปรับแต่งจุดสุดยอดและการจัดการพิกเซลเพื่อให้ได้สิ่งที่เจ๋งและซับซ้อน

หลายสิ่งที่คุณทำผ่านโปรแกรมไปป์ไลน์ (PP) จะทำงานได้เร็วกว่าการใช้ FFP ที่เป็นไปได้เนื่องจาก PP จะลดจำนวนการผ่านหรือจำนวน combiner และ cubemap เวทมนต์ที่จำเป็นในการทำให้สิ่งเหล่านี้เป็นสมมุติใน FFP

ลองนึกภาพการใช้สิ่งที่พบได้ทั่วไปเช่นการให้แสงต่อพิกเซลใน FFP โดยมีเพียงข้อมูลจุดยอดที่สอดแทรกและเนื้อสัมผัสตัวอย่างในมือของคุณ มันเป็นไปไม่ได้เลยที่จะทำอย่าง "ซื่อสัตย์" เพียงแค่แฮ็คสำหรับกรณีพิเศษขึ้นอยู่กับ cubemaps ที่คำนวณล่วงหน้าที่ซื่อสัตย์และการผสมอย่างจริงจัง ด้วย PP มันจะกลายเป็นเรื่องของการทำให้สีเป็นจุดของผลิตภัณฑ์ระหว่างทิศทางแสงและจุดยอดปกติ

โดยรวมแล้ว PP จะเปลี่ยนช้าและเป็นไปไม่ได้อย่างรวดเร็วและเป็นไปได้ แต่ถ้าคุณตัดสินใจที่จะเขียน shader เพื่อใช้อัลกอริทึมแบบเดียวกันกับที่ใช้ใน FFP คุณจะพบว่า FFP จะเร็วขึ้นเล็กน้อยเนื่องจากเป็นฮาร์ดแวร์ที่ปรับให้เหมาะสมที่สุด


1
คำตอบที่ดี ... +1
Amir Zadeh

@Green ไม่แน่ใจเรื่องนั้น พลาดจุดใด คำตอบของ Kylotan เหมาะสมกว่าสำหรับคำถามจริง
คริสพูดว่า Reinstate Monica

14

ในทางทฤษฎีแล้วไปป์ไลน์ที่ตั้งโปรแกรมได้จะช้ากว่าฟังก์ชั่นไปป์ไลน์ที่ตายตัว ตัวประมวลผลวัตถุประสงค์ทั่วไปไม่สามารถแข่งขันกับตัวประมวลผลเคสพิเศษ ไปป์ไลน์ฟังก์ชั่นคงที่ดั้งเดิมนั้นมีขนาดเล็กกว่าประตูลอจิกจำนวนมากในหนึ่งบรรทัดซึ่งเร็วที่สุดเท่าที่จะเป็นไปได้ในทางทฤษฎี

อย่างไรก็ตามวันนี้ไปป์ไลน์ที่ตั้งโปรแกรมได้เป็นบรรทัดฐาน ดังนั้นฮาร์ดแวร์จึงมุ่งไปที่ไปป์ไลน์ที่ตั้งโปรแกรมได้ การสูญเสียประสิทธิภาพเริ่มต้นของการมีวงจรที่สร้างขึ้นโดยเฉพาะสำหรับการไหลของข้อมูลหนึ่ง ๆ จะต้องรองรับกรณีที่พบบ่อยที่สุดซึ่งเป็นวิธีการที่ใช้ shader อย่างไรก็ตามสำหรับตัวเลือกความเข้ากันได้ย้อนหลังไปป์ไลน์ฟังก์ชั่นคงที่ยังคงมีอยู่ - แต่ค่าใช้จ่ายก็คือฟังก์ชั่นคงที่เก่าจะต้องมีการเปลี่ยนเป็นเฉดสีซึ่งอาจต้องเสียค่าใช้จ่าย สิ่งนี้จะอธิบายความแตกต่างของประสิทธิภาพการทำงาน


1

เหตุผลหลักที่ฉันคิดได้ก็คือขั้นตอนการติดตั้งคงที่ซึ่งโปรแกรมของคุณไม่จำเป็นต้องใช้ ตัวอย่างเช่นภาพเกมที่แสงทั้งหมดคงที่คุณสามารถใช้ shader ที่ไม่แม้แต่จะพยายามคำนวณหาแสงแบบไดนามิก ในกรณีนี้คุณ shader ทำงานได้เร็วกว่า shader ที่ precompiled ซึ่งกำลังตรวจสอบสมการบางส่วนสำหรับแสงแบบไดนามิก (shader วัตถุประสงค์ทั่วไป) มีตัวอย่างอื่นด้วยคุณสามารถนึกถึงหลาย ๆ แง่มุมที่ควรพิจารณาสำหรับขั้นตอนการแก้ไข แต่คุณสามารถเพิกเฉยต่อการใช้งานในรหัส GLSL ของคุณเอง


1

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

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


"สิ่งที่อาจเกิดขึ้นเมื่อคุณใช้ฟังก์ชั่นไปป์ไลน์คงที่คือว่าไดรเวอร์ของคุณโหลดเฉพาะเฉดสีพิเศษของตัวเองที่ใช้เส้นทางฟังก์ชั่นคงที่" .. คุณแน่ใจเรื่องนี้หรือไม่ คุณช่วยจัดหาทรัพยากรที่เชื่อถือได้ให้หน่อยได้ไหม? ขอบคุณ
Quazi Irfan

@iamcreasy ฉันไม่มีแหล่งที่เชื่อถือได้ (ดังนั้นอาจ) ฉันต้องยอมรับ แต่ฉันสงสัยอย่างมากว่าในปัจจุบันการ์ดกราฟิกส์ (ซึ่งเป็นเพียงโปรเซสเซอร์ขนาดเล็กจำนวนมาก) ยังคงมีฮาร์ดแวร์เฉพาะสำหรับการคำนวณแสงหรือการคำนวณหมอก แทนที่จะเป็นไปได้ว่าพวกเขาจะโหลดโปรแกรมที่คอมไพล์ล่วงหน้าสำหรับสิ่งนี้ลงในสเตจ shader ที่เฉพาะเจาะจง (ไม่ว่าจะมาจากไดรเวอร์หรือที่เก็บ ROM บางตัวฉันไม่รู้)
Chris บอก Reinstate Monica

@iamcreasy ตาม nouveau wiki nouveau.freedesktop.org/wiki/CodeNamesท่อคงที่ถูกลบออกใน GeForce 6xxx
DirtY iCE

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