สถานที่อ้างอิงของ GPU น่ากังวลหรือไม่


9

ไม่ท้องที่ของการอ้างอิงให้มากที่สุดเท่าของความแตกต่างกับประสิทธิภาพ GPU มันไม่ประสิทธิภาพของ CPU หรือไม่?

ตัวอย่างเช่นถ้าฉันส่งคำสั่งวาด 200 ครั้งไปยัง GPU ฉันจะเห็นความแตกต่างที่เห็นได้ชัดเจนหรือไม่หากข้อมูลสำหรับแต่ละคำสั่งนั้นต่อเนื่องกันในหน่วยความจำแทนที่จะกระโดดไปรอบ ๆ แผนที่บัฟเฟอร์ / พื้นผิว

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

คำตอบ:


10

สถานที่อ้างอิงมีความสำคัญ แต่คุณไม่ต้องกังวลมาก ... เพราะคุณไม่สามารถควบคุมได้อย่างสมบูรณ์

เมื่อใช้ OpenGL / DirectX คุณมักจะมีการควบคุมรูปแบบหน่วยความจำที่ จำกัด คนขับจะทำหน้าที่ส่วนที่เหลือ ตัวอย่างเช่นคุณสามารถลองใช้เลย์เอาต์จุดสุดยอดบัฟเฟอร์หลายรูปแบบเช่นการใช้ข้อมูลจุดยอด interleaved หรือ non-interleaved และขึ้นอยู่กับประสิทธิภาพข้อมูล / ไดรเวอร์ / GPU ของคุณจะแตกต่างกันไป โปรไฟล์และเลือกสิ่งที่เหมาะกับแอปพลิเคชันของคุณมากที่สุด

ตัวอย่างเช่นในการเพิ่มประสิทธิภาพ GPU Gems Pipeline การอ้างอิงตำแหน่งถูกกล่าวถึงสองครั้งครั้งแรก:

เข้าถึงข้อมูลจุดสุดยอดในลักษณะที่ค่อนข้างต่อเนื่อง หน่วยความจำแคชของ GPU สมัยใหม่เข้าถึงเมื่อเรียกจุดยอด เช่นเดียวกับในลำดับชั้นหน่วยความจำใด ๆ ตำแหน่งอ้างอิงเชิงพื้นที่ช่วยเพิ่มความนิยมสูงสุดในแคชจึงช่วยลดความต้องการแบนด์วิดท์

และครั้งที่สอง

ปรับให้เหมาะสมสำหรับแคชจุดสุดยอดโพสต์ & L GPU รุ่นใหม่มีแคชแบบ first-in, first-out (FIFO) ขนาดเล็กที่เก็บผลลัพธ์ของจุดยอดที่เปลี่ยนแปลงล่าสุด ความนิยมในแคชนี้จะบันทึกงานการแปลงและการให้แสงทั้งหมดพร้อมกับงานทั้งหมดที่ทำก่อนหน้านี้ในขั้นตอนการทำงาน ในการใช้ประโยชน์จากแคชนี้คุณต้องใช้การทำดัชนีแบบดั้งเดิมและคุณต้องสั่งจุดยอดของคุณเพื่อเพิ่มการอ้างอิงในพื้นที่ให้มากที่สุด มีเครื่องมือที่ใช้ได้ - รวมถึง D3DX และ NVTriStrip (NVIDIA 2003) - ที่สามารถช่วยคุณทำงานนี้ได้

ในความคิดของฉันคำแนะนำเหล่านั้นทำตามสิ่งที่ฉันพูดถึงและบอกเป็นนัยว่าคุณไม่สามารถควบคุมเลย์เอาต์ของหน่วยความจำได้อย่างสมบูรณ์ แต่สิ่งที่คุณสามารถควบคุมได้ตัวอย่างเช่นการวางแนว VBO แต่ละจุดสามารถมี

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

ฉันคิดว่าคุณควรกังวลเกี่ยวกับท้องถิ่นของการอ้างอิงเมื่อใช้ OpenCL / CUDA เพราะคุณมักจะควบคุมรูปแบบหน่วยความจำอย่างแน่นอน


3

เดิมที GPU ใช้สำหรับแอปพลิเคชั่นมัลติมีเดียที่แสดงการใช้ข้อมูลเพียงเล็กน้อย เมื่อ GPU ใช้มากขึ้นสำหรับแอปพลิเคชันที่ใช้งานทั่วไป (ดังนั้นคำว่า GPGPU) จึงมีแคชขนาดใหญ่ที่จัดการด้วยฮาร์ดแวร์เช่น Fermi GPU มีแคชระดับสุดท้าย 768 KB Kepler GPU มี 1536 KB แคชระดับสุดท้ายและ Maxwell GPU มีแคชระดับสุดท้าย 2048 KB พร้อมด้วยการวิจัยขนาดใหญ่เกี่ยวกับแคชแคชของ GPU แสดงให้เห็นว่าตำแหน่งข้อมูลนั้นมีความสำคัญสำหรับ GPU อย่างแน่นอน ดูกระดาษแบบสำรวจของฉันสำหรับรายละเอียดและการอ้างอิงด้านบน

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