私はもともと OpenMP で書かれたコードを持っています。今、それを OpenACC に移行したいと考えています。以下を検討してください。
1- まず、OpenMP の出力結果は最終結果と見なされ、OpenACC の出力はそれに続く必要があります。
2- 次に、端末のプログラムへの入力によって有効になるコードに 2 つの機能があります。したがって、入力フラグに基づいてF1
orが実行されます。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 です。