問題タブ [pgi-accelerator]

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 に答える
998 参照

fortran - Fortran-OpenACC ルーチンはどのようにして別の Fortran-OpenACC ルーチンを呼び出すことができますか?

私は現在、ほとんどのルーチンを PGI (15.10) コンパイラで OpenACC を使用して GPGPU に移植することにより、スペクトル要素流体ソルバーを高速化しようとしています。ソースコードは OO-Fortran で書かれています。このソフトウェアには、他の関数やサブルーチンを呼び出すサブルーチンの「層」があります。openacc を使用してコードを GPU に移行するために、移植が必要な各ルーチンに「$acc ルーチン」ディレクティブを配置することを最初に試みました。コンパイル中に「pgf90 -acc -Minfo=accel」を使用すると、次のエラーが表示されます。

nvvmCompileProgram エラー: 9.

エラー: /tmp/pgacc2lMnIf9lMqx8.gpu (146, 24): 関数 'innerroutine_' への無効な前方参照を間違った型で解析します!

PGF90-S-0155 - コンパイラがアクセラレータ領域の変換に失敗しました (-Minfo メッセージを参照): デバイス コンパイラがエラー ステータス コードで終了しました (Test.f90: 1)

これと同じ問題は、次の単純な fortran プログラムで再現できます。

繰り返しますが、上記のプログラムを「pgf90 -acc -Minfo=accel」でコンパイルすると、問題が発生します。

openacc は、他の acc が有効なルーチンを呼び出す acc が有効なルーチンをサポートしていますか?

もしそうなら、私は何を間違っていますか?

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

openacc - PGI 16.9 で行が長すぎます。の解き方?

問題を再現するには、次のダミー コードを使用します。

PGF90-S-0285-ソース行が長すぎます (pp.f90: 6) PGF90-S-0023-構文エラー - 括弧のバランスが取れていません (pp.f90: 6) 0 通知、0 警告、2 重大、0 pp の致命的

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

nvcc - openacc - ta=multicore と ta=nvidia のコンパイルの不一致

私はもともと OpenMP で書かれたコードを持っています。今、それを OpenACC に移行したいと考えています。以下を検討してください。

1- まず、OpenMP の出力結果は最終結果と見なされ、OpenACC の出力はそれに続く必要があります。

2- 次に、端末のプログラムへの入力によって有効になるコードに 2 つの機能があります。したがって、入力フラグに基づいてF1orが実行されます。F2

そのため、前述のように、コードを OpenACC に転送しました。これで、OpenACC コードを両方-ta=multicore-ta=nvidiaコンパイルし、さまざまなアーキテクチャ用に OpenACC リージョンをコンパイルできます。

の場合F1、両方のアーキテクチャの出力は OpenMP と同じです。したがって、 と を使用してプログラムをコンパイルする-ta=multicoreと、が選択されている-ta=nvidia場合に OpenMP と同様の正しい出力結果が得られることを意味します。F1

についてF2は、少し異なります。でコンパイルすると-ta=multicore、OpenMP として正しい出力が得られますが、nvidia アーキテクチャでは同じことが起こりません。コードをコンパイルすると-ta=nvidia、結果が間違っています。

何が間違っているのF2か、さらには何か考えはありますbuild processか?

注:私は PGI コンパイラ 16 を使用しており、NVIDIA GPU の CC は 5.2 です。

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

cuda - OpenACC の固定メモリ (PGI コンパイラを使用)

OpenACC に変換した単純な CUDA コードがあります。すべてのカーネルは期待どおりに並列化され、CUDA カーネルと同様のパフォーマンスを発揮します。ただし、デバイスからホストへのメモリ転送によりパフォーマンスが低下します。私の CUDA コードでは固定メモリを使用しており、パフォーマンスが大幅に向上しています。残念ながら、OpenACC では固定メモリを利用する方法がわかりません。ドキュメントには何も見つかりませんでした。固定メモリを利用する簡単な OpenACC の例を教えてもらえますか?

PS: PGI 16.10-0 64 ビット コンパイラを使用しています。

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

c - PGI コンパイラを使用して C/OpenACC でグローバル動的配列を宣言する方法

A動的に割り当てられた配列が extern として定義され、OpenACC を使用して GPU にアップロードされる簡単なテスト ケースを実行しようとしています。すべて PGI コンパイラを使用します。

私の header.hファイル:

次に、私のheader.c実装:

それから、main.c私は持っています

次のコマンドでコードをコンパイルします。

私のPGIコンパイラのバージョンは次のとおりです。

コードを実行するには:

問題は、PGI コンパイラが を送信variable=A bytes=8しているため、私の送信要求を無視していることだと思いますA[0:N]

では、PGI コンパイラを使用して C/OpenACC でグローバル動的配列を宣言するにはどうすればよいでしょうか?