Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

stef

Treue Seele

  • »stef« ist der Autor dieses Themas

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

1

14.06.2012, 21:25

Shader mit For-Schleife

Ich habe einen Vertex-Shader

geschrieben (GLSL 1.3) in dem ich zwei verschachtelte For-Schleifen

programmiert habe. Das hat mir der Linker meiner alten ATI 400 übel

genommen. Das Linken hat eine halbe Ewigkeit gedauert (> 2min).

Auf meiner GTX 480 ging das Linken sehr schnell, dafür ist mir der

Linker mit „nicht genügend Speicher“ ausgestiegen als ich die

Anzahl der Schleifendurchläufe auf 100 gestellt habe. (Ich wollte

mal probieren in wie weit das Einfluss auf die Framerate hat.) Das

finde ich eigentlich erstaunlich weil 100 nicht so die Masse ist.









Syntaktisch ist der Shader in Ordnung.

Es sieht fast so aus als ob Shader ein allgemeines Problem mit

Schleifen haben wenn diese zu oft durchlaufen werden. Hat eventuell

schon mal jemand so ein ähnliches Problem gehabt oder kann das

Verhalten erklären ?
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

14.06.2012, 21:34

Das kann alle möglichen Gründe haben. Ohne den Shader zu sehen, kann man da nicht viel sagen. Vermutlich hatte der Grafikkartentreiber Probleme damit, die Schleife zu unrollen...

stef

Treue Seele

  • »stef« ist der Autor dieses Themas

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

3

14.06.2012, 21:37

Zitat

Das kann alle möglichen Gründe haben. Ohne den Shader zu sehen, kann man da nicht viel sagen. Vermutlich hatte der Grafikkartentreiber Probleme damit, die Schleife zu unrollen...






Was bedeutet unrollen ?
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

stef

Treue Seele

  • »stef« ist der Autor dieses Themas

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

5

14.06.2012, 22:32

Man lernt doch nie aus ... :)

Wenn der Compiler versucht hat den Inhalt meiner For-Schleife 100 mal hintereinander zu hängen dann ist das doch eine Erklärung für das Speicherproblem.
"UNROLLEN" Shader-Compiler Schleifen prinzipiell wenn die Abbruchbedingung aufgelöst werden kann ?
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

14.06.2012, 22:34

Normalerweise ja. Die GPU mag bedingte Sprünge überhaupt nicht gern (ältere GPUs konnten das nicht mal) ;)

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »dot« (14.06.2012, 22:40)


stef

Treue Seele

  • »stef« ist der Autor dieses Themas

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

7

14.06.2012, 22:43

Noch mal eine kurze Frage ...

Da ein Shader-Kern ja keine vollwertige CPU/GPU ist müssen ja programmiertechnisch Einschränkungen existieren.
Gibt es Tips / Regeln / Vorgaben die man beim Programmieren eines Shaders beachten sollte.
(z.B. komplexere Schleifen vermeiden ;) )
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

stef

Treue Seele

  • »stef« ist der Autor dieses Themas

Beiträge: 246

Wohnort: Kassel

Beruf: Softwareentwickler

  • Private Nachricht senden

9

14.06.2012, 23:04

Danke !
"In C++ it's harder to shoot yourself in the foot, but when you do, you blow off your whole leg." — Bjarne Stroustrup.

Werbeanzeige