Ist die Reihenfolge der Vertex-Pufferdaten beim Rendern von indizierten Grundelementen wichtig?

14

Ich baue die Dreiecke eines 3D-Objekts. Wenn ich sie in der Reihenfolge, in der sie berechnet wurden, in den Puffer schreiben kann, wird der CPU-Code vereinfacht. Die Eckpunkte für die Dreiecke werden nicht zusammenhängend sein.

Gibt es eine Leistungsstrafe für das Schreiben in der falschen Reihenfolge?

Jay
quelle

Antworten:

12

Hier spielen (mindestens) zwei Faktoren eine Rolle. GPUs können einen Vertex-Cache nach der Transformation verwenden, wenn indizierte Grundelemente gerendert werden. Die Größe dieses Caches variiert und wird während eines einzelnen Zeichnungsaufrufs verwendet (meines Wissens nicht über mehrere Aufrufe hinweg, daher spielt es keine Rolle, wie häufig Sie die Pufferdaten in diesem Kontext ändern).

Wenn Sie Ihre Daten so organisieren, dass sie diesen Cache nutzen (ein Beispielalgorithmus finden Sie hier ), können Sie Leistungsverbesserungen feststellen. Diese Organisation hat jedoch mehr mit der Reihenfolge Ihrer Indizes zu tun, sodass jedes Indextripel so viele zuletzt gesehene Eckpunkte wie möglich wiederverwendet. Es hat wahrscheinlich wenig Einfluss auf Ihr spezifisches Szenario, es sei denn, Ihre Dreiecke sind über Ihren Indexpuffer ebenfalls zufällig im Puffer verstreut. In diesem Fall blasen Sie wahrscheinlich häufig den Cache. In Ihrer Frage war mir nicht klar, ob dies der Fall ist oder nicht, und ich fand es erwähnenswert.

Es ist wahrscheinlicher, dass GPUs während eines Zeichnens auch Speicherzugriffe auf Scheitelpunktdaten zwischenspeichern. Die Größe dieses Caches ist auch ziemlich unzuverlässig und es ist vorstellbar, dass Sie eine hohe Fehlerhäufigkeit in diesem Cache auf den einzelnen Kernen erhalten, die diese Indizes in sehr schlecht lokalisierte Eckendaten verarbeiten.

Ob dies zu einem Leistungsproblem führt oder nicht, das in Ihrer Anwendung als rote Fahne gilt, und insbesondere (wie es sich anhört), Ihren Algorithmus zu überarbeiten, um die Daten auf Kosten der Lesbarkeit des Algorithmus besser zu organisieren ... das kann ich nicht beantworten, du musst einige Szenarien profilieren und sehen.

Ich persönlich würde mich auf die Seite des lesbaren, verwaltbaren Codes irren, da ich denke , dass jeder fehlende Cache, den Sie verursachen werden, für die Benutzer nicht signifikant genug ist, um es zu bemerken.


quelle