¿Cuál es el análogo de OpenCL para__syncthreads() de CUDA y blockIdx.x?
parallel-processing (3)
Estoy tratando de traducir el código CUDA a OpenCL y ahora estoy atrapado con estas funciones / variables:
__syncthreads()
-
blockIdx.x
¡En realidad lo encontré solo! Aquí hay un artículo útil: http://www.netlib.org/utk/people/JackDongarra/PAPERS/parcocudaopencl.pdf
La respuesta es: para la barrera de uso __syncthreads () (CLK_LOCAL_MEM_FENCE); para el uso de blockIdx.x get_group_id (0)!
Hay muchas páginas en la web que pueden ayudarlo a portar CUDA a OpenCl (por ejemplo, aquí ). Solo quiero destacar, como lo señala aquí para la "barrera", que hay barrier(CLK_LOCAL_MEM_FENCE)
y barrier(CLK_GLOBAL_MEM_FENCE)
: principalmente la diferencia es que la primera garantiza el orden correcto de las operaciones de memoria cuando se usa el local (compartido en CUDA) memoria y el segundo cuando está operando en la memoria global. Asegúrese de usar el correcto para su caso.
__syncthreads()
-> barrier(_)
pero asegúrese de entender la diferencia entre barrier(CLK_LOCAL_MEM_FENCE)
y barrier(CLK_GLOBAL_MEM_FENCE)
marque esta pregunta o esta documentación para obtener más información.
blockIdx.x
-> get_group_id(0)
que le dará la primera / x dimensión de identificación del grupo / bloque