El SDK de FPGA para compilador OpenCL™ proporciona una garantía de que las instrucciones en un kernel NDRange son ejecutadas por subprocesos en orden de sus identificadores de subprocesos. Para asegurarse de que se cumple la garantía en los programas que contienen flujo de control dependiente de subprocesos, el compilador inserta una barrera de reordenamiento en el punto de unión de las rutas de flujo de control dependientes de subprocesos. Una falla en la configuración de tales barreras hace que el cálculo se detenga en la barrera sin posibilidad de progreso hacia adelante.
Las operaciones del canal también pueden causar este estancamiento.
A continuación se muestra un ejemplo de una "construcción de flujo de control dependiente de subprocesos":
Obtener ID de hilo global
int id = get_global_id(0);
Asegúrese de no salirnos de los límites
if (id < n)
c[id] = a[id] b[id];
Aquí, la instrucción if es una construcción de flujo de control que depende de subprocesos, es decir, lo que hace depende de qué subproceso lo ejecute.
Vuelva a escribir el kernel de NDRange para que no contenga operaciones de canal ni construcciones de flujo de control dependientes de subprocesos.