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

aocl バージョン 17.0 で ivdep #pragma正常に動作しないのはなぜですか?

環境

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

    16.1 では、このコードは、依存性のために外側のループがシリアル化され、内部ループの依存性が#pragma ivdep によって削除された場合、期待どおりに動作しました。

    このループは、内部ループとの真の依存性のためにシリアル化されます。

    for (中文字 x = 0、x < 4;x) {

    スループには反復間の依存性がありませんが、外側のループに依存します

    ivdep の#pragma

    for (y = 0、y<64、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 --0466666

    2. ループの入り込みで、「if (スループ)」でループを包みます。

    このループは、真の依存性のためにシリアル化されます。

    for (中文字 x = 0、x < 4;x) {

    if (卉卉)

    64 回の繰り返しの各セット内に依存性がありません

    ivdep の#pragma

    for (y = 0、y<64、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

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