文章 ID: 000073897 内容类型: 故障排除 上次审核日期: 2019 年 01 月 23 日

如果循环计数超过分配的通道数,为什么在 OpenCL™ 内核编译期间会发生堆栈转储?

环境

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

    如果循环包含对索引通道的写入,并且循环计数超过分配的通道数,则在 OpenCL™ 编译期间可能会出现堆栈转储。请参阅下面的示例代码。

    通道无符号字符my_channel[16] __attribute__((深度(1024)));
    字符数据[32];

    ...
    for (无符号字符 i = 0; i < 32; i ) {
    write_channel_intel(my_channel[i], 数据[i]);

    }

    解决方法

    确保循环计数永远不会超过分配的通道数。

    #define num_channels 32

    通道无符号字符my_channel[num_channels] __attribute__((深度(1024)));
    字符数据[num_channels];

    ...
    for (无符号字符 i = 0; i < num_channels; i ) {
    write_channel_intel(my_channel[i], 数据[i]);

    }

    从面向 OpenCL™ 编译器的 英特尔® FPGA SDK 版本 19.1 开始,该问题已修复。

    相关产品

    本文适用于 1 产品

    英特尔® 可编程设备

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