問題タブ [pgi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
156 参照

parallel-processing - PGI コンパイラの並列化 +=

ベクトルと行列のクラスを並列化する作業を行っていますが、問題が発生しました。の形でループがあるときはいつでも

for (int i = 0; i < n; i++) b[i] += a[i] ;

コードにはデータ依存性があり、並列化されません。Intelコンパイラを使用する場合、プラグマなしでこれを処理するのに十分スマートです(これに似た膨大な数のループと、実際にはこれよりも複雑なケースのため、依存関係チェックなしのプラグマを避けたいと思います。存在する場合に備えて確認したいと思います)。

これを許可する PGI コンパイラのコンパイラ フラグを知っている人はいますか?

ありがとうございました、

ジャスティン

編集: for ループでエラーが発生しました。実際のループをコピーして貼り付けていませんでした

0 投票する
1 に答える
433 参照

fortran - (1) で INTENT (IN) 変数 x に代入できません - どうすれば解決できますか?

gfortran (mpif90) を使用して Fortran プログラムをコンパイルすると、次のエラーが発生します。

このプログラムを PGI でコンパイルすると、このエラーは発生しません。

これに関して2つ質問があります。

  1. このエラーの意味は何ですか?
  2. gfortran と mpif90 でこのモジュール ファイルを PGI と同様にコンパイルするにはどうすればよいですか? これを気にしないようにgfortranコンパイラに伝えるために渡すことができるフラグはありますか?

任意の提案をいただければ幸いです。

0 投票する
1 に答える
3847 参照

compiler-construction - 異なるコンパイラ (PGI と Intel) 間で割り当て可能な配列を含む Fortran 派生型を渡します

Nvidia GPU と Intel Xeon Phi を進化させるプロジェクトがあります。ホスト コードと GPU コードは Fortran で記述され、pgfortran によってコンパイルされます。仕事の一部を Phi にオフロードするには、ifort によってコンパイルされた共有ライブラリを作成し (静的リンクは機能しません)、コードの pgfortran 部分から共有サブルーチンを呼び出す必要があります。そうすることで、コードの pgfortran 部分から Xeon Phi と通信できる intel fortran 共有ライブラリに配列をオフロードできます。

今、コードの pgfortran 部分から ifort 共有ライブラリに割り当て可能な配列を含む派生型を渡そうとしています。いくつか問題があるようです。

簡単な例を次に示します (ここには Xeon Phi オフロード ディレクティブはありません)。

caller.f90:

呼ばれる.f90:

メイクファイル:

cl%a(1:10)ここで" " に注意してください。 " (1:10)" がなければ、何も出力されません。

このコードは最終的に の要素をcl(1)%a出力し、配列を出力しようとした次の行でセグメンテーション違反に遭遇しましたcl(1)%b

cl%a(1:10)" " を "cl%a(1:100)"に変更し、" " を削除するとprint *, cl%b(1:10)。次の結果が得られます。

結果

b 配列の要素がそこにあることがわかりますが、" cl%b(1:10)" でそれらを取得することはできません。

これは、さまざまなコンパイラのさまざまな派生型構造が原因である可能性があることを知っています。しかし、この種の派生型をコンパイラ間で渡す方法が本当に必要です。解決策はありますか?

ありがとうございました!

0 投票する
2 に答える
452 参照

fortran - 割り当て可能な配列を含む派生型は、既存の OpenACC コンパイラでサポートされていますか?

割り当て可能な配列を含む派生型を GPU との間でコピーし、高速化されたコードでそれらを使用することをサポートする OpenAcc コンパイラはありますか?

OpenACC 仕様 (v2.0) にはこれが可能であると記載されていますが、コンパイラに実装されている場所はどこにもありません。PGI コンパイラは派生型をサポートしていますが、割り当て可能な配列を含むものはサポートしていないようです ( PGI フォーラムのこのページを参照してください)。これはその後変更された可能性がありますが、(まあ) どこにも公表されていないようです。

0 投票する
1 に答える
799 参照

segmentation-fault - このコード セグメントが (割り当て中に) pgi では失敗するのに intel では失敗するのはなぜですか?

このコードは、Intel コンパイラで実行すると機能します。ただし、pgi で実行すると、リストされているサブルーチンの * と ** の間で障害がセグメント化されます。-mcmodel-medium で pgi コンパイラを使用しています。このコードで openacc の使用を開始するには、PGI を使用する必要があります。何が間違っているのでしょうか?前もって感謝します!

! サブルーチン コード内に割り当てずに、この行のセグメント フォールト

メインコードはこちら

そのため、いくつかのコメンターがサブルーチン内の再割り当てについて尋ねました。これを行ったのは、最初に 2 番目の割り当てなしで試してみたところ、最初の x() 値を読み取るときにサブルーチンでセグメンテーション違反を受け取ったためです。サブルーチンの割り当てをコメントアウトして、これをもう一度試してみたところ、x() の読み取り中に PGI seg が失敗し、Intel コンパイラが同じことをしたことがわかりました。この行は上で太字で示されています。

0 投票する
0 に答える
202 参照

c - PGCC でコンパイルされた OpenACC で高速化された共有ライブラリからルーチンを呼び出すと、MEX で未定義のシンボル エラーが発生する

libraberto.soでコンパイルされた共有ライブラリがありPGCCます。これには OpenACC プラグマ ディレクティブが含まれており、-accこれらのディレクティブが有効になるようにフラグを指定してコンパイルされます。対応するメイクファイルの規則は次のとおりです。

file1.c、などは、ライブラリfile2.cを構成するソース ファイルです。

次に、mex_gateway.c単純に MATLAB から共有ライブラリ内のルーチンを呼び出し、変数 (配列とスカラー) を渡し、出力配列を受け取るファイルがあります。次のようにコンパイルされます。

コンパイルは正常に機能しますが、MATLAB でゲートウェイを実行しようとすると、次のエラーが発生します。

Google でこの特定のエラー (シンボル) に関する情報を見つけることができず、コードのどこを見ればよいかわかりません。プログラムは、OpenACC ディレクティブなしで (つまり、なしで-acc) 共有ライブラリをコンパイルすると正常に動作します。このエラーは、MEX ( ) で使用される配列の特定の性質が原因である可能性があると考えましたmxArray。これは、データをアクセラレータに転送するときに OpenACC で適切に動作しない可能性がありますがmemcpy、入力を真mallocの C 配列に渡してから、共有ライブラリ ルーチンに違いはありません。