O Intel® FPGA SDK para compilador OpenCL™ oferece uma garantia de que as declarações em um kernel NDRange são executadas por threads em ordem de seus identificadores de thread. Para garantir que a garantia seja atendida em programas que contêm fluxo de controle dependente de threads, uma barreira de re-pedidos é inserida pelo compilador no ponto de junção dos caminhos de fluxo de controle dependentes de threads. Uma falha na configuração de tais barreiras faz com que a computação se estagnar na barreira sem possibilidade de avançar.
As operações do canal também podem causar essa paralisação.
Mostrado abaixo é um exemplo de uma "construção de fluxo de controle dependente de threads":
Obtenha iD de thread global
id int = get_global_id(0);
Certifique-se de que não sairemos dos limites
se (id < n)
c[id] = a[id] b[id];
Aqui, a instrução if é uma construção de fluxo de controle que depende do thread, ou seja, o que ela faz depende de qual thread a executa.
Reescrevê-lo para que o kernel NDRange não contenha quaisquer operações de canal ou construções de fluxo de controle dependentes de threads.
Este problema está programado para ser corrigido em uma versão futura do Intel® FPGA SDK para software OpenCL.