O FPGA SDK for OpenCL™ compiler oferece uma garantia de que as declarações em um kernel NDRange são executadas por threads na ordem de seus identificadores de thread. Para garantir que a garantia seja atendida em programas que contêm fluxo de controle dependente de thread, uma barreira de reordenação é inserida pelo compilador no ponto de união de caminhos de controle dependentes do thread. Uma falha na configuração de tais barreiras faz com que a computação pare na barreira sem possibilidade de progresso futuro.
As operações de canal também podem causar esta paralisação.
Mostrado abaixo está um exemplo de uma "construção de fluxo de controle dependente de thread":
Obtenha a ID da thread global
int id = get_global_id(0);
Certifique-se de que não sairemos dos limites
se (id < n)
c[id] = a[id] b[id];
Aqui, a declaração se a declaração é uma construção de fluxo de controle que depende do thread, ou seja, o que ele faz depende de qual thread a executa.
Escreva novamente o kernel NDRange para não conter nenhuma operação de canal ou construções de fluxo de controle dependentes do thread.