สถานที่อ้างอิงมีความสำคัญ แต่คุณไม่ต้องกังวลมาก ... เพราะคุณไม่สามารถควบคุมได้อย่างสมบูรณ์
เมื่อใช้ OpenGL / DirectX คุณมักจะมีการควบคุมรูปแบบหน่วยความจำที่ จำกัด คนขับจะทำหน้าที่ส่วนที่เหลือ ตัวอย่างเช่นคุณสามารถลองใช้เลย์เอาต์จุดสุดยอดบัฟเฟอร์หลายรูปแบบเช่นการใช้ข้อมูลจุดยอด interleaved หรือ non-interleaved และขึ้นอยู่กับประสิทธิภาพข้อมูล / ไดรเวอร์ / GPU ของคุณจะแตกต่างกันไป โปรไฟล์และเลือกสิ่งที่เหมาะกับแอปพลิเคชันของคุณมากที่สุด
ตัวอย่างเช่นในการเพิ่มประสิทธิภาพ GPU Gems Pipeline การอ้างอิงตำแหน่งถูกกล่าวถึงสองครั้งครั้งแรก:
เข้าถึงข้อมูลจุดสุดยอดในลักษณะที่ค่อนข้างต่อเนื่อง หน่วยความจำแคชของ GPU สมัยใหม่เข้าถึงเมื่อเรียกจุดยอด เช่นเดียวกับในลำดับชั้นหน่วยความจำใด ๆ ตำแหน่งอ้างอิงเชิงพื้นที่ช่วยเพิ่มความนิยมสูงสุดในแคชจึงช่วยลดความต้องการแบนด์วิดท์
และครั้งที่สอง
ปรับให้เหมาะสมสำหรับแคชจุดสุดยอดโพสต์ & L GPU รุ่นใหม่มีแคชแบบ first-in, first-out (FIFO) ขนาดเล็กที่เก็บผลลัพธ์ของจุดยอดที่เปลี่ยนแปลงล่าสุด ความนิยมในแคชนี้จะบันทึกงานการแปลงและการให้แสงทั้งหมดพร้อมกับงานทั้งหมดที่ทำก่อนหน้านี้ในขั้นตอนการทำงาน ในการใช้ประโยชน์จากแคชนี้คุณต้องใช้การทำดัชนีแบบดั้งเดิมและคุณต้องสั่งจุดยอดของคุณเพื่อเพิ่มการอ้างอิงในพื้นที่ให้มากที่สุด มีเครื่องมือที่ใช้ได้ - รวมถึง D3DX และ NVTriStrip (NVIDIA 2003) - ที่สามารถช่วยคุณทำงานนี้ได้
ในความคิดของฉันคำแนะนำเหล่านั้นทำตามสิ่งที่ฉันพูดถึงและบอกเป็นนัยว่าคุณไม่สามารถควบคุมเลย์เอาต์ของหน่วยความจำได้อย่างสมบูรณ์ แต่สิ่งที่คุณสามารถควบคุมได้ตัวอย่างเช่นการวางแนว VBO แต่ละจุดสามารถมี
หากแอปพลิเคชันของคุณมีปัญหาด้านประสิทธิภาพคุณควรตรวจหาคอขวดก่อนซึ่งอาจไม่ใช่ตำแหน่งข้อมูลที่เป็นปัญหาของการอ้างอิง แต่อาจเป็นเพราะมีข้อมูลจำนวนมากที่ไม่มีการเลือกสรรตัวอย่างเช่นคุณไม่ได้ทำการคัดเฟรัส ฯลฯคุณสามารถตรวจสอบคำตอบของฉันที่นี่ในหัวข้อ
ฉันคิดว่าคุณควรกังวลเกี่ยวกับท้องถิ่นของการอ้างอิงเมื่อใช้ OpenCL / CUDA เพราะคุณมักจะควบคุมรูปแบบหน่วยความจำอย่างแน่นอน