問題タブ [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.
c++ - #ifdef でコンパイラを検出する
複数のプラットフォームとコンパイラで動作する小さなコードを作成しようとしています。私はアサーションを使用しており、そのほとんどはオフにできますが、PGI のOpenMP サポートpgicpp
を使用してコンパイルすると、オプションが自動的に使用されます。コード内のどこでも「throw」ステートメントを使用すると、致命的なコンパイラ エラーが発生します。(「例外処理のサポートが無効になっています」)-mp
--no_exceptions
PGIdefine
のステートメントを非表示にするためにテストできる d マクロはありますか? throw
私は通常、gcc などを使用して作業しGCC_VERSION
ます。これらのマクロを PGI で説明しているドキュメントが見つかりません。
fortran - Windows PGI Visual Fortran で netcdf.lib をリンクする際の問題
(Windows OS) で PGI Visual Fortran を使用して、fortran (f90) ライブラリと実行可能ファイルで構成されるプロジェクト/ソリューションを構築しています。f90 ライブラリは netcdf.lib にリンクしています。f90 は正常にコンパイルおよびビルドされますが、実行可能ファイルにリンクしようとすると、次のエラーが発生します。
Compiling Project ...
Linking...
error LNK2019: unresolved external symbol nf_ _inq_varid_ referenced in function interpnwptools_checkcldliq_
error LNK2001: unresolved external symbol nf__inq varid
error LNK2019: unresolved external symbol nf_ strerror_ referenced in function エラー
エラー LNK2019: unresolved external symbol nf_ get_ att_関数
エラー LNK2001 で参照されている real_: 未解決の外部シンボル nf_ get_ att_ real_
エラー LNK2019: 関数 ncdf_module_openfile_ エラーで参照されている未解決の外部シンボル nf_ create_エラー LNK2019
: 未解決の外部シンボル nf_def_dim_ が関数 ncdf_module_openfile_ で参照されています
。
.
.
および nf_ 未解決のシンボルの他のすべての束。netcdf ライブラリが正しくリンクされているとは思えません。誰でも助けることができますか?私が使用しているプロジェクトには、MS VStudio 2003 を使用して自分で構築した netcdf 3.6.0-p1 が必要です。また、gfortran と eclipse を使用してプロジェクトを構築しようとしましたが、同じリンクの問題があります。以前に netcdf や fortran を使用したことがありません...何か提案はありますか?
c++ - ofstream オブジェクトのインスタンス化中に C++ アプリケーションがクラッシュします。
C++ アプリケーションの実行中に非常にイライラする問題が発生しました。Windows XP の Interix サブシステムで pgcpp コンパイラを使用しています。私の問題は基本的にここで説明されています:
ヘッダー ファイルにクラス定義があります。このヘッダー ファイルは、1 つのソース ファイルに含まれています。このクラスには 2 つのコンストラクターがあり、基本的にロガーの実装に使用されます。最初のコンストラクターは引数として ostream *out を取り、2 番目のオーバーロードされたコンストラクターはファイル名とデフォルトのブール値 false を取ります。この 2 番目のコンストラクターの目的は、渡すファイル名のストリームを取得し、メッセージのログ記録を開始することです。コンストラクタ内のコードは次のとおりです。
p_out と p_ofstream の宣言は次のとおりです。
上記の 3 つはすべてプライベート メンバーです。MessageLogger クラスのインスタンス化は次のように行われます。
append_to_file のデフォルト値は false であることに注意してください。PGDBG
挙動不審でもあります。p_ofstream = new std::ofstream (filename);
コントロールが にあり、ランダムな場所にステップインしてアプリケーションがクラッシュしたときに、不可解にステップインでき ます。
また、PGDBG で混合コードまたは逆アセンブリ コードのいずれかを表示しようとすると、デバッガーがクラッシュして次のメッセージが表示されます。
上記とまったく同じことを行ったサンプル プログラムでこれを再現することはできませんが、すべて正常に動作します。誰かが何が起こっているのか、これに修正があるかどうかを説明できますか?
ありがとう、アディティア。
optimization - ポートランドグループのFORTRANpgf90プログラムは、-fastでコンパイルすると失敗し、-fast-Mnounrollで成功します。
このコードは、最近、サイレントに失敗するエッジケースを発見するまで、長い間陽気にハミングしました。エラーは返されませんでした。失敗は見たところかなり微妙です。エッジケースでは、次の方法でコードを問題なく実行できます。
-traceback
1)デバッグ(-g
または-gopt
)
を含むまたはデバッグするオプションのセットを使用してコンパイルする。
-fast -Mnounroll
2) ;
でコンパイルする
3)最適化<2でコンパイルします。
4)コードにWRITEステートメントを追加して、失敗の場所を特定します。
言い換えれば、障害のデバッグに役立つツールのほとんどは、実際には障害が消えることになります。
ループの展開やその他の最適化に関連する障害とその解決策に関する情報を調べています。
よろしくお願いします。
visual-studio - PGI ビジュアル Fortran の ACCESS_VIOLATION
PGI ビジュアル Fortran を使用して Fortran プログラムを作成しています。このコードは、かなり長い 2 つのモジュールとメインのプログラムで構成されています。プログラムのコンパイルとビルドは、警告やエラーなしで成功しています。ただし、実行時またはデバッグ モードでエラーが発生します。
このエラーの後、プログラムの実行が停止します。この問題を克服するために、推測できるあらゆる方法を試しました。ただし、問題は解決しません。変数は適切に定義されているようです。デバッグ モードでは、すべての変数は問題ないようです。変数 x、y、および z はモジュール内の関数によって適切に評価されますが、次のコードが示すように、メイン PROGRAM では評価できません (ファイル mainser.f90 のプログラム main の 14 行目のブレークポイントによって取得されます)。 ):
エラーやアクセス違反の原因がわかりません。これは私がよく知らない既知の問題ですか? それともバグですか?私はあなたからの助けに感謝します。前もって感謝します。Fortran 言語のコードは次のように添付されています。mainser.f90 :
ChainConfModule.f90 :
rand.f90 :
fortran - アクセラレータディレクティブが機能しない
これは行列乗算のコードです
これを実行すると、アクセラレータディレクティブとPGIコンパイラを使用した場合の実行時間は75ミリ秒になります。しかし、「cuda fortran」実装で同じ行列乗算を実行すると、実行時間はわずか5ミリ秒です。したがって、アクセラレータディレクティブを使用したとしても、大きな違いがあります。したがって、アクセラレータディレクティブが正しく機能しているとは思えません。
c++ - C/C++ および GNU/PGI: `__pgio_ini' への未定義の参照
PGI Compiler バイナリを既存の GNU バイナリにリンクする方法はありますか? リンクしようとすると、次のエラーが表示されます。
詳細:
gcc と g++ でいくつかのファイルをコンパイルしました。Cmain
関数はこれらのファイルに含まれています。ここで、OpenACC 関数をプロジェクトに追加する必要があります。これは、PGI C コンパイラ ( pgcc
) によってコンパイルする必要があります。コンパイル後、上記のリンク エラーが発生します (エラーは両方pgCC
またはg++
リンカーと同じです)。
おそらく、OpenACC 関数をダミー ライブラリに統合し、それをプロジェクトにインクルード/リンクする必要があります。しかし、私はそれを行う方法がわかりません。
残念ながら、一部の関数は GNU Compiler に依存しているため、プロジェクト全体を PGI Compiler でコンパイルすることはできません。
前もって感謝します。
fortran - PGIがこのモジュールのパブリック属性を取得しないのはなぜですか?
ここで他の誰かのコードを操作します。gfortranで問題なくコンパイルされます。ただし、Portland Groupでは、次のエラーが発生します。
問題のある行は次のようになります。
(ここでは明らかに多くのMPIが行われていますが、それがポイントだとは思いません。)そこで、のソースコードでModMpi
あるModMpi.f90に移動します。ここでは、への参照はありませんMPI_WTIME
が、次のように表示されます。
最後に、のソースに移動すると、ModMpiInterface
次の行が見つかります。
OK、ModMpi.f90を編集しmpi_wtime
、公開を宣言することで、PGIからコンパイルを取得することができました。しかし、それでも、私は疑問に思います。なぜgfortranは(明らかに)それmpi_wtime
が公開されていると想定したのに、PGIはこれを明示的に伝えなければならなかったのでしょうか。なぜPGIは、元の公開宣言が「使用チェーン」全体に当てはまると想定しないのですか?
どちらか一方の動作がFortran標準に近いと思います。それはどちらでしょうか?
fortran - POS=... pgi コンパイラを使用する場合
すべての主要な fortran コンパイラでコンパイルできるはずの一連のコードを更新/再作成しようとしています。ifort
、gfortran
および、比較的古い (?) バージョンの pgi コンパイラ (バージョン 7.2.5)にアクセスできます。コードは gfortran と ifort で正常にコンパイルされますが、portland グループのコンパイラは次のような行でエラーを出します。
私は実際にこれを使用しmpif90
ていますが、それはpgf90
違いはありません。(iheader
は単純に 20 個の要素を持つ整数配列です)。ポートランドグループコンパイラはこれをサポートしていますか?