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

为什么#pragma ivdep 在 aocl 版本 17.0 中无法正常工作?

环境

  • 英特尔® Quartus® Prime Pro Edition
  • 适用于 OpenCL™ 的英特尔® FPGA SDK
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    说明

    在 16.1 版本中,由于依赖关系而使外环被串行,而内回路依赖由 #pragma ivdep 删除,则按照预期进行。

    由于与内部循环的真正依赖,此循环被串行化

    (未签名的 char x = 0;x < 4;x) {

    内部循环不具有迭代依赖关系,但取决于外环

    #pragma ivdep

    对于 (未签名的 char y = 0; y

    在 17.0 版本中,#pragma ivdep 现在应用于内环和外回路,因此,外回路的依赖性不会被编译器计入。 因此,尽管在仿真工作,但类似的代码在硬件中可能无法正常工作。

    解决方法

    解决 方案:

    1. 在内核中添加一个额外的参数"虚拟"。 在主机侧,始终通过第 1 个关于此虚拟参数的参数。

    之前

    __kernel空 my_kernel(
    __global cpx_t* 限制输入,
    __global cpx_t* 限制结果)

    __kernel空 my_kernel(
    __global cpx_t* 限制输入,
    __global cpx_t* 限制结果,
        int dummy

    2. 在循环嵌套中,以"if(虚拟元)"包装内部循环:

    由于真正的依赖,此循环被串行化

    (未签名的 char x = 0;x < 4;x) {

    if (虚拟) {

    每组 64 个迭代之间不存在依赖关系

    #pragma ivdep

    对于 (未签名的 char y = 0; y

     

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

    相关产品

    本文适用于 5 产品

    英特尔® Arria® 10 FPGA 和 SoC FPGA
    英特尔® Stratix® 10 FPGA 和 SoC FPGA
    Cyclone® V FPGA 和 SoC FPGA
    Arria® V FPGA 和 SoC FPGA
    Stratix® V FPGA

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