atomicAdd () für Double auf GPU

8

Ich mache ein Projekt auf GPU, und ich muss atomAdd () für double verwenden, weil die cuda es nicht für double unterstützt, also verwende ich den folgenden Code, der NVIDIA bereitstellt.

%Vor%

Nun möchte ich wissen, warum das Gerät eine Schleife benötigt, während (angenommen! = alt)

    
taoyuanjl 18.04.2013, 07:57
quelle

1 Antwort

9

Grundsätzlich, weil die Implementierung eine Last erfordert, die nicht atomar ausgeführt werden kann. Die Operation zum Vergleichen und Tauschen ist eine atomare Version von

%Vor%

Es gibt keine Garantie, dass sich der Wert bei address nicht ändert zwischen dem Zyklus, in dem der Wert von address geladen wird, und dem Zyklus, bei dem der Aufruf atomicCAS zum Speichern des aktualisierten Werts verwendet wird. Wenn dies geschieht, wird der Wert in address nicht aktualisiert. Daher stellt die Schleife sicher, dass die beiden Operationen wiederholt werden, bis sich der Wert von address zwischen der Lese- und der Vergleichs- und Tauschoperation nicht ändert, was bedeutet, dass die Aktualisierung stattgefunden hat.

    
talonmies 18.04.2013, 10:15
quelle

Tags und Links