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
13
A
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
- 1. Maximale Anzahl von Else-Anweisungen in C++
- 2. maximale Anzahl von contact_id
- 3. Maximale Anzahl von Sendeversuchen
- 4. Android Studio maximale Anzahl von Zeilen logcat
- 5. Maximale Anzahl von Berechtigungen überschritten
- 6. maximale Anzahl in js
- 7. Anzahl der Anweisungen gelöscht?
- 8. Hilfe: Maximale Anzahl von Clients erreicht - Segmentierungsfehler
- 9. Maximale Anzahl von Objekten in NSArray
- 10. Maximale Anzahl von Strings in Cbind?
- 11. Maximale Anzahl von SANs (alternative Subjektnamen) zulässig
- 12. BLE: Maximale Anzahl von Paketen in Verbindungsintervall
- 13. Maximale Anzahl von Peripheriegeräten auf CoreBluetooth?
- 14. maximale Anzahl von Parametern in SQL-Abfrage
- 15. Ebenennavigation - Maximale Anzahl von Preisintervallen - funktioniert nicht
- 16. OpenSSL konfigurieren maximale Anzahl von Verbindungen
- 17. Maximale Anzahl von Enum-Elementen in Java
- 18. Maximale Anzahl von Apache Nutch-Worker-Instanzen
- 19. Maximale Anzahl von Variablen in Klassen
- 20. Maximale Anzahl von Var/Funktionsdefinitionen in Javascript?
- 21. Maximale Anzahl von Zeichen stringbuilder kann
- 22. Maximale Anzahl von Objekten in PDF
- 23. Maximale Anzahl von UILocalNotification für iPhone
- 24. Maximale Anzahl von Spalten in Crystal Reports?
- 25. Maximale Anzahl von Variablen in Methode
- 26. Maximale Anzahl von Gruppen in Java Regex
- 27. Maximale Anzahl von Objekten im Arbeitsbereich
- 28. Maximale Anzahl von Inodes in einem Verzeichnis?
- 29. C++ if-Anweisung maximale Anzahl von Elementen
- 30. Was ist die maximale Anzahl von Verbindungen?
ich nichts über Shadern wissen, aber ich nehme an, dass sie keinen unbegrenzten Speicherplatz haben. –