文章 ID: 000073934 内容类型: 故障排除 上次审核日期: 2021 年 08 月 27 日

为什么面向 OpenCL™ 编译器的英特尔® FPGA SDK 会挂起,并且永不终止包含与线程相关的控制流或通道操作的 NDRange 内核?

环境

  • 英特尔® Quartus® Prime Pro Edition
  • 面向 OpenCL™ 专业版的英特尔® FPGA SDK
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    说明

    面向 OpenCL™ 编译器的 英特尔® FPGA SDK 保证 NDRange 内核中的陈述按线程标识符按线程执行。为了确保在包含与线程相关的控制流的程序中满足保证,编译器在与线程相关的控制流路径的合并点插入了重新排序障碍。此类障碍配置出现故障,将导致计算在障碍处失速,没有推进的可能性。

    通道操作也可能导致此失速。

    下图所示为"线程相关控制流结构"的一个示例:

       
    获取全局线程 ID

    int id = get_global_id (0);

    确保不超出边界

    如果 (id < n)

    c[id] = a[id] b[id];

     

    这里,如果语句是一种与线程相关的控制流结构,即它做什么取决于哪个线程执行它。

    解决方法

    重写 NDRange 内核以不包含任何通道操作或基于线程的控制流结构。

     

    此问题计划在面向 OpenCL 软件的英特尔® FPGA SDK 的未来版本中修复。

    相关产品

    本文适用于 1 产品

    英特尔® 可编程设备

    本页面上的内容是原始英文内容的人工翻译与计算机翻译的组合。我们提供此内容是为了您的便利并且仅供参考,未必完整或准确。如果本页面的英文版与翻译版之间存在任何冲突,应以英文版为准。 查看此页面的英语版本。