2010-04-11 25 views
13

Gibt es eine maximale Anzahl von Anweisungen in Assemblersprache, die in die Fragment-Programmeinheit geladen werden sollen? Ich habe einen Algorithmus auf Port von CPU zu GPU und anscheinend passt es nicht auf die GPU.GLSL maximale Anzahl von Anweisungen

+1

ich nichts über Shadern wissen, aber ich nehme an, dass sie keinen unbegrenzten Speicherplatz haben. –

Antwort

2

Es gibt eine Begrenzung für die maximale Anzahl von Anweisungen, die ein Shader haben kann. Soweit ich weiß, variiert es von GPU zu GPU. Wenn Ihr Shader zu groß ist, erzeugt die Kompilierung einen Fehler.

34

Es gibt mehrere harten und weichen Grenzen, von denen einige sind nicht sofort offensichtlich:

  • Instruction Slots: Die Gesamtzahl der Befehle, die die Hardware in einem lokalen Speicher empfangen kann.
  • ausgeführter Befehle: Die maximale Anzahl von Instruktionen, die (einschließlich Anweisungen, die mehrmals in einer Schleife ausgeführt wird) ausgeführt werden
  • Eine einzelne GLSL Anweisung zu einem Dutzend oder mehr Befehle
  • Mehrere GLSL Anweisungen zu einer Karte können abbilden Einzelbefehl abhängig von der Qualität des Optimierers (z. B. multiply-add, dot, lerp)
  • Begrenzte Temp-Register (nur 32) erfordern möglicherweise mehr Anweisungen als auf der SM4-Hardware erforderlich (kein Problem mit 4096).
  • Swizzling kostet in der Regel keine zusätzlichen Anweisungen heutzutage, aber tut auf etwas älterer Hardware und in einigen Situationen auf einige Hardware kann (insb. Gl_FragColor ist ein solcher Kandidat)
  • Unabhängig von aktuellen Anweisungen, OpenGL 2.0 kompatible Hardware ist auf 8 abhängig Textur Fetches (unbegrenzt auf Hardware, die 2.1 OpenGL tun oder besser) begrenzt

Sie haben diese garantiert Minima (die meisten Karten haben mehr):

  • 512 Befehlsschlitze für die Vertex- und Pixel-Shader auf OpenGL 2.x (SM3) fähige Hardware
    • Anweisungen 65536 ausgeführt
  • 4096 Vertex- und 65536 Pixel-Shader-Befehls-Slots auf 3.x (SM4) Hardware
    • 65536 ausgeführt Vertexshader-Anweisungen, unbegrenzte Pixelshader-Anweisungen
  • mindestens 24 dynamische Verzweigungen möglich auf 2.x (SM3) Hardware
  • Voll dynamische Verzweigung (keine Grenzen gesetzt) ​​auf SM4 Hardware
  • Nur Konditionalbewegungs auf SM2.x vorhanden, alles andere muss von Code-Duplizierung und Schleifenentrollen gebracht werden oder scheitern muss
+8

Dies ist eine großartige Antwort, aber es wäre besser mit einigen Referenzen. – Kaganar

Verwandte Themen