Ich verwende eine CUDA-Textur im Grenzadressierungsmodus ( cudaAddressModeBorder
). Ich lese Texturkoordinaten mit tex2D<float>()
. Wenn die Texturkoordinaten außerhalb der Textur liegen, gibt tex2D<float>()
0
zurück.
Wie kann ich diesen zurückgegebenen Grenzwert von 0
auf etwas anderes ändern? Ich könnte die Texturkoordinate manuell überprüfen und den Randwert selbst einstellen. Ich habe mich gefragt, ob es CUDA API gibt, wo ich einen solchen Grenzwert setzen kann.
Wie von sgarizvi erwähnt, unterstützt CUDA nur vier nicht anpassbare Adressmodi, nämlich clamp , border , wrap und Spiegel , die in Abschnitt 3.2.11.1 beschrieben sind. des CUDA-Programmierhandbuchs.
Die ersten beiden arbeiten sowohl in nicht normalisierten als auch in normalisierten Koordinaten, während die letzten beiden nur in normalisierten Koordinaten arbeiten.
Um die ersten beiden zu beschreiben, betrachten wir den Fall der nichtnormalisierten Koordinaten und betrachten 1D-Signale der Einfachheit halber. In diesem Fall lautet die Eingabefolge c[k]
, mit k=0,...,M-1
.
cudaAddressModeClamp
Das Signal c[k]
wird außerhalb von k=0,...,M-1
fortgesetzt, so dass c[k] = c[0]
für k < 0
und c[k] = c[M-1]
für k >= M
.
cudaAddressModeBorder
Das Signal c[k]
wird außerhalb von k=0,...,M-1
fortgesetzt, so dass c[k] = 0
für k < 0
und für k >= M
.
Um die letzten beiden Adressmodi zu beschreiben, müssen wir nun normalisierte Koordinaten berücksichtigen, so dass die 1D-Eingangssignal-Abtastwerte als c[k / M]
mit k=0,...,M-1
angenommen werden.
cudaAddressModeWrap
Das Signal c[k / M]
wird außerhalb von k=0,...,M-1
fortgesetzt, so dass es periodisch mit der Periode gleich M
ist. Mit anderen Worten c[(k + p * M) / M] = c[k / M]
für jede (positive, negative oder verschwindende) ganze Zahl p
.
cudaAddressModeMirror
Das Signal c[k / M]
wird außerhalb von k=0,...,M-1
fortgesetzt, so dass es periodisch mit der Periode gleich 2 * M - 2
ist. Mit anderen Worten: c[l / M] = c[k / M]
für l
und k
für (l + k)mod(2 * M - 2) = 0
.
Der folgende Code veranschaulicht alle vier verfügbaren Adressmodi
%Vor%Das sind die Ausgaben
%Vor%Tags und Links cuda textures border addressing-mode