記事 ID: 000073934 コンテンツタイプ: トラブルシューティング 最終改訂日: 2021/08/27

インテル® FPGA SDK for OpenCL™ コンパイラーがスレッド依存の制御フローまたはチャネル操作を含む NDRange カーネルでハングアップして終了しないのはなぜですか?

環境

  • インテル® Quartus® Prime 開発ソフトウェア・プロ・エディション
  • インテル® FPGA SDK for OpenCL™ プロ・エディション
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    詳細

    インテル® FPGA SDK for OpenCL™ コンパイラーは、NDRange カーネル内のステートメントがスレッド ID の順にスレッドによって実行されていることを保証します。スレッド依存のコントロールフローを含むプログラムで保証が確実に満たされていることを確認するため、コンパイラーはスレッド依存のコントロールフロー・パスの結合点に再注文の障壁を挿入します。このような障壁の構成に欠陥があると、前方に進展することなく、計算が障壁で停滞します。

    チャネル操作により、このストールが発生する可能性もあります。

    以下は「スレッド依存制御フロー構造」の例です。

       
    グローバルスレッド ID を取得

    int id = get_global_id(0);

    境界を超えないことを確認してください

    if (id < n)

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

     

    ここでは、if ステートメントはスレッドに依存する制御フロー構造です。つまり、実行するスレッドによって異なります。

    解決方法

    NDRange カーネルを再書き込みして、チャネル操作やスレッド依存のコントロール・フロー構造を含めないでください。

     

    この問題は、今後のバージョンの インテル® FPGA SDK for OpenCL ソフトウェアで修正される予定です。

    関連製品

    本記事の適用対象: 1 製品

    インテル® プログラマブル・デバイス

    このページのコンテンツは、元の英語のコンテンツを人力翻訳および機械翻訳したものが混在しています。この内容は参考情報および一般的な情報を提供するためものであり、情報の正確さと完全性を保証するものではありません。インテルは不正確な翻訳があった場合でもいかなる責任を負いません。このページの英語版と翻訳の間に矛盾がある場合は、英語版に準拠します。 このページの英語版をご覧ください。