__syncthreads()
impliziert eine Memory Fence-Funktion. Dies ist in der documentation behandelt:
wartet, bis alle Fäden im Faden-Block erreicht haben diesen Punkt und alle globalen und gemeinsam genutzten Speicherzugriffe, die durch diesen Fäden vor __syncthreads() sind für alle Threads im Block gemacht .
Also in diesem Fall wäre es nicht notwendig sein __threadfence_block()
zusätzlich zu verwenden, um __syncthreads()
können Sie keine threadfence Funktion für die Ausführung Barriere in der üblichen allgemeinen parallel Reduktion ersetzen. Die Ausführungsbarriere (__syncthreads()
) wird zusätzlich zur Memory Fencing-Funktion benötigt. Im allgemeinen Fall ist es im Allgemeinen notwendig zu warten, bis alle Threads eine bestimmte Reduktionsrunde ausgeführt haben, bevor mit der nächsten Runde fortgefahren wird; __threadfence_block()
selbst wird keine Warps zwingen zu warten, während andere Warps eine bestimmte Runde der Reduktion ausführen.
Daher ist in der Regel __syncthreads()
erforderlich, und vorausgesetzt, Sie haben es ordnungsgemäß verwendet, ist die __threadfence_block()
in der Regel nicht erforderlich.
__syncthreads()
bedeutet __threadfence_block()
.
__threadfence_block()
bedeutet nicht __syncthreads()