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

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

環境

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

FPGA SDK for OpenCL™ コンパイラーは、NDRange カーネル内のステートメントがスレッド識別子の順にスレッドによって実行されることを保証します。スレッド依存の制御フローを含むプログラムで保証を確実に満たすために、スレッド依存制御フロー パスの結合ポイントにコンパイラによって並べ替えバリアが挿入されます。このようなバリアの構成に欠陥があると、計算がバリアで失速し、前進する可能性がなくなります。

チャネル操作もこのストールの原因となる可能性があります。

次に、"スレッド依存の制御フロー構造" の例を示します。


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

int id = get_global_id(0);

範囲外にならないようにしてください

if (id < n)

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

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

解決方法

NDRange カーネルを書き直して、チャネル操作やスレッド依存の制御フロー構造を含まないようにします。

関連製品

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

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

1

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