Die GPU führt Threads in Gruppen von 32 Threads aus, die Warps genannt werden. Wenn verschiedene Threads in einem Warp verschiedene Pfade im Code durchlaufen, muss die GPU den gesamten Warp mehrfach ausführen, einmal für jeden Codepfad.
Um dieses Problem, das als Warp-Divergenz bezeichnet wird, in den Griff zu bekommen, sollten Sie Ihre Threads so anordnen, dass die Threads in einem bestimmten Warp so wenig unterschiedliche Codepfade wie möglich durchlaufen. Wenn Sie das geschafft haben, müssen Sie in den sauren Apfel beißen und den Leistungsverlust akzeptieren, der durch die verbleibende Warp-Divergenz verursacht wird. In manchen Fällen können Sie nichts tun, um Ihre Threads zu ordnen. Wenn dies der Fall ist und wenn die verschiedenen Codepfade einen großen Teil des Kernels oder der Gesamtarbeitslast ausmachen, ist die Aufgabe möglicherweise nicht für die GPU geeignet.
Es spielt keine Rolle wie Sie implementieren die verschiedenen Codepfade. if-else
, switch
Wenn es darauf ankommt, dass die Threads in einem Warp auf unterschiedlichen Pfaden laufen, wird die Leistung beeinträchtigt.
Es spielt auch keine Rolle, wie viele Fäden jeden Pfad durchlaufen, sondern nur die Gesamtzahl der verschiedenen Pfade im Warp.
Hier ist eine andere Antwort zu diesem Thema, die etwas ausführlicher ist.