面向 OpenCL™ 编译器的 英特尔® FPGA SDK 保证 NDRange 内核中的陈述按线程标识符按线程执行。为了确保在包含与线程相关的控制流的程序中满足保证,编译器在与线程相关的控制流路径的合并点插入了重新排序障碍。此类障碍配置出现故障,将导致计算在障碍处失速,没有推进的可能性。
通道操作也可能导致此失速。
下图所示为"线程相关控制流结构"的一个示例:
获取全局线程 ID
int id = get_global_id (0);
确保不超出边界
如果 (id < n)
c[id] = a[id] b[id];
这里,如果语句是一种与线程相关的控制流结构,即它做什么取决于哪个线程执行它。
重写 NDRange 内核以不包含任何通道操作或基于线程的控制流结构。
此问题计划在面向 OpenCL 软件的英特尔® FPGA SDK 的未来版本中修复。