/ / ¿Hay algo como la operación atómica en cuda en OpenCL - c ++, opencl

¿Hay algo como la operación atómica en cuda en OpenCL - c ++, opencl

Cuando escribo el código CUDA, uso la operación atómica para forzar una sincronización global en el último paso.

Entonces también tengo que implementar la misma tarea en OpenCL, me pregunto si hay una operación similar en OpenCL, como la operación atómica en CUDA, que puedo usar, mis dispositivos son una placa fpga.

Respuestas

3 para la respuesta № 1

la barrera () puede ser algo similar a lo que está buscando, pero solo puede forzar una "unión" en los hilos en el mismo grupo de trabajo.

Ver este post Es posible que pueda utilizar CLK_GLOBAL_MEM_FENCE para obtener los resultados que está buscando.

Desbordamiento de pila: Barreras en OpenCL


1 para la respuesta № 2

No hay sincronización global a nivel de kerneles OpenCL y CUDA ya que grupos de trabajo completos pueden terminar antes de que otros puedan iniciarse. Solo la sincronización a nivel de grupo de trabajo está disponible dentro de un kernel. Para la sincronización global usas muchos kernels.


0 para la respuesta № 3

De acuerdo con tu comentario, parece que quieres operaciones atómicas en valores flotantes.

Por favor revisa este enlace: Operación atómica y flota en opencl.

La idea es utilizar el incorporado. atom_cmpxchg Operación para intentar intercambiar el valor antiguo de una variable de punto flotante con un nuevo valor, que podría ser su suma con otro valor, o la multiplicación, división, resta, etc.

El intercambio solo tiene éxito si el valor antiguo es en realidad el valor antiguo (que es donde cmp entra en juego). De lo contrario, lo hará de nuevo en un bucle while.

Tenga en cuenta que esta operación atómica podría ser bastante lenta si muchos subprocesos realizan esta operación en un solo valor.