問題タブ [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 に答える
936 参照

c++ - OpenACC 並列カーネルが生成されない

コードをグラフィカルに高速化するために、PGC++ でコードを開発しています。

  • Eigen に依存する OpenBabel を使用しています。
  • #pragma acc kernel を使ってみた
  • #pragma acc ルーチンを使用してみました
  • 私のコンパイル コマンドは次のとおりです。 pranav/new_installed/lib/openbabel/main.cpp/home/pranav/new_installed/lib/libopenbabel.so"

次のエラーが表示されます

注: 66 行目は「mol.SetTorsion(a[0],a[1],a[2],a[3],i*(3.14159265358979323846/180));」です。以下の貼り付けられたボードで。

このエラーを表示している私のコードは次のとおりです。

Googleでの一次検索から、これはmol(OBMolオブジェクト)の「後方依存」のために発生しているエラーであることがわかりました。誰かがそれに対する解決策を知っているなら、私を助けてください。

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

fortran - Intelコンパイラでの「use ifcore」に相当するPGI

私は現在、もともと Intel コンパイラ用に設計された PGI を使用したモデルのコンパイルに取り組んでいます。スクリプトの 1 つは、use ifcoreその他のランタイム ライブラリにリンクする Intel 固有のコマンドです。PGI に相当するもの (Linux マシン用) を見つけるのに苦労しています...何かアイデアはありますか?

私は見ていましdflibたが、それはWindows固有のようです。現在、mpif90 を使用してモデルをコンパイルしています。

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

gcc - c - PGI OpenACC 対応ライブラリと gcc のリンク

簡単に言えば、私の質問は、ソースファイルでOpenACCコンストラクトを利用しながら、2つの異なるコンパイラを使用してファイルをコンパイル/ビルド(ライブラリを使用)することに依存しています。

OpenACC コンストラクトを持つ C ソース ファイルがあります。配列の総和を計算する単純な関数しかありません。

次の行を使用して簡単にコンパイルできます。

pgcc -acc -ta=nvidia -c libmyacc.c

次に、次の行で静的ライブラリを作成します。

ar -cvq libmyacc.a libmyacc.o

ライブラリを使用するために、次のようなコードを書きました。

これで、この静的ライブラリを PGI コンパイラ自体で使用して、上記のソースをコンパイルできます ( f1.c):

pgcc -acc -ta=nvidia f1.c libmyacc.a

そして、それは完璧に実行されます。ただし、gcc の場合は異なります。私の質問はここにあります。どうすればgccで正しくビルドできますか?

この質問に対する Jeff のコメント: linking pgicompiled library with gcc linkerのおかげで 、エラーなしでソース ファイル ( f1.c) をビルドできるようになりましたが、実行可能ファイルはいくつかの致命的なエラーを発します。

これは、ソース ファイルを gcc ( f1.c)でコンパイルするために使用するものです。

gcc f1.c -L/opt/pgi/linux86-64/16.5/lib -L/usr/lib64 -L/usr/lib/gcc/x86_64-redhat-linux/4.8.5 -L. -laccapi -laccg -laccn -laccg2 -ldl -lcudadevice -lpgmp -lnuma -lpthread -lnspgc -lpgc -lm -lgcc -lc -lgcc -lmyacc

これはエラーです:


PGI コンパイラで-vコンパイルするときのオプションのおかげで、コンパイラが PGI と NVidia から非常に多くの他のツール (や など) を呼び出すことがわかります。f1.cpgacclnknvlink


私の質問:

  1. 私は間違った道を進んでいますか?GCC から PGI コンパイル ライブラリの関数を呼び出し、それらの関数内で OpenACC を使用できますか?
  2. 上記の回答が肯定的である場合、PGI が行う手順 (呼び出しpgacclnkと) なしで、まだリンクを使用できますか?nvlink
  3. 上記の回答も肯定的である場合、どうすればよいですか?
0 投票する
1 に答える
436 参照

gcc - c - PGI OpenACC 対応ライブラリを gcc に動的にリンクする

以前、PGI で静的ライブラリを作成し、それを gcc でビルドされたプログラムにリンクする方法について質問しました: c - PGI OpenACC 対応ライブラリを gcc でリンクする

今、同じ質問がありますが、動的です。ライブラリがPGIで動的にビルドされているときに、gcc でプログラムをビルドするにはどうすればよいですか?

また、次の事実を考慮します。

  • 両方が同じ OpenMP プラグマとルーチンも認識できるようにします。たとえば、ライブラリで OpenMP クリティカル領域を使用する場合、プログラム全体をそのセクションでシリアル化する必要があります。

  • OpenACC プラグマは、PGI でビルドされたライブラリで使用されます。

  • アプリケーションでライブラリを完全に動的にロードします。dlopenlibを開いdlsymて関数を見つけるために使用することを意味します。

  • また、スレッドがデータ転送や計算のために GPU に同時にアクセスできるようにしたいと考えています。詳細については、次のコード スニペットを参照してください。

たとえば、次のライブラリとメイン コードをビルドすると、次のエラーが発生します。call to cuMemcpyHtoDAsync returned error 1: Invalid value


注:次のコードをビルドするとき、lib と main の両方のケースで、-lgompPGI の OpenMP ライブラリ ( ) の代わりに LibGOMP ( )を意図的に使用しました。-lpgmp


ライブラリコード:

次のコマンドでビルドされたライブラリ:

pgcc -acc -ta=nvidia:nordc -fPIC -c libmyacc.c

pgcc -shared -Wl,-soname,libctest.so.1 -o libmyacc.so -L/opt/pgi/linux86-64/16.5/lib -L/usr/lib64 -L/usr/lib/gcc/x86_64-redhat-linux/4.8.5 -laccapi -laccg -laccn -laccg2 -ldl -lcudadevice -lgomp -lnuma -lpthread -lnspgc -lpgc -lm -lgcc -lc -lgcc libmyacc.o


メインコード:

そして、前の質問で Mat が説明したように、gcc を使用して次のコマンドでメイン コードをビルドしました。

gcc f1.c -L/opt/pgi/linux86-64/16.5/lib -L/usr/lib64 -L/usr/lib/gcc/x86_64-redhat-linux/4.8.5 -L. -laccapi -laccg -laccn -laccg2 -ldl -lcudadevice -lgomp -lnuma -lpthread -lnspgc -lpgc -lm -lgcc -lc -lgcc -lmyacc


私は何か間違ったことをしていますか?上記の手順は正しいですか?

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

arrays - サブルーチンに渡された配列を割り当てる PGI FORTRAN90 (seg fault)

これは、PGI fortran コンパイラを使用してコンパイルしている fortran90 コードです。セグフォルトなしでは、サブルーチン内で配列を割り当てることができないようですarraySub()。配列が次のように割り当てられているかどうかを確認しても、エラーが発生しますallocated(theArray)。次のようにコマンドラインでコードをコンパイルしています。pgf90 -o test.exe test.f90

and で初期化しているため、サブルーチンtheArray内で割り当てられない理由について混乱しています。特に奇妙なのは、セグ フォールトもあるということです。誰かが私を正しい方向に向けて解決できるかどうか疑問に思っていました。前もって感謝します!arraySubintent(inout)allocatableallocated(theArray)

編集:重複した質問には実際のサンプルコードがないため、モジュールを使用してソリューションを投稿します:

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

alias - openacc - 配列のエイリアスにより、「配列の境界を判別できません」というエラーが発生する

ホストにサイズ N の配列があります。それを自分のデバイスに転送してから、エイリアスを割り当てて使用しようとします。しかし、「配列の境界を判別できません」というコンパイル エラーが発生します。

例:

上記のコードでは、次のエラーが発生します。

PGC-S-0155-Cannot determine bounds for array br (array.c: 15)

もっと具体的にこれを試してみてもdouble *br = &ar[0];、同じことが起こります。

cc20 デバイスで CUDA 7.5 で PGI 16.5 64 ビット バージョンを使用しています。

有効な配列を使用しているので、エイリアシングは問題になりませんよね? これはバグですか?