2

OpenACC を使用して計算を GCC 5.3 上の nvidia GPU にオフロードする方法を正確に理解しようとしています。物事をグーグルで検索すればするほど、私は混乱します。私が見つけたすべてのガイドは、 gcc 全体とnvptx-toolsnvptx-newlib. 他の情報源によると、OpenACC は GOMP ライブラリの一部です。他のソースによると、OpenACC サポートの開発は GCC 6.x でのみ継続されます。また、OpenACC のサポートが GCC のメイン ブランチにあることも読みました。-fopenaccただし、 andを使用してプログラムをコンパイルすると、動作しません-foffload=nvptx-non。gcc 5.3+でOpenACCコードをコンパイラして実行するのに何が必要かを誰かが説明してくれますか?

  • 一部のインターネット ソースが言うように、OpenACC サポートが GCC のメイン ブランチの一部である場合、一部のガイドでnvptx-tools、 、および GCCの (再) コンパイルが必要なように見えるのはなぜですか?nvptx-newlib
  • この中で GOMP ライブラリの役割は何ですか?
  • OpenACC サポートの開発は、今後 GCC 6+ に対してのみ行われるというのは本当ですか?
  • OpenACC のサポートが成熟したら、OpenMP を有効にするのと同様の方法 (つまり、コンパイラ フラグをいくつか追加するだけ) で有効にすることが目標ですか?
  • 「OpenACC」を「OpenMP 4.0 GPU / MICオフロード機能」に置き換えた後、誰かが上記のすべてに対する回答を提供できますか?

前もって感謝します

4

1 に答える 1

4

以下のリンクには、OpenACC サポート用に gcc をコンパイルするスクリプトが含まれています。

https://github.com/olcf/OLCFHack15/blob/master/GCC5OffloadTest/auto-gcc5-offload-openacc-build-install.sh

  1. OpenACC は現在 GCC のメイン ブランチの一部ですが、注意すべき点がいくつかあります。gcc の一部であるライブラリがあっても、gcc をコンパイルするときに、コンパイルするライブラリを指定する必要があります。それらのすべてがデフォルトでコンパイルされるわけではありません。OpenACC の場合、追加の問題があります。NVIDIA ドライバーはオープン ソースではないため、GCC は OpenACC をバイナリに直接コンパイルできません。Nvidia ランタイムが処理する中間 NVPTX 命令に OpenACC をコンパイルする必要があります。したがって、nvptx ライブラリもインストールする必要があります。

  2. GOMP ライブラリは、OpenMP と OpenACC の両方を処理する中間ライブラリです。

  3. はい、OpenACC の開発は GCC 6 でのみ行われると思いますが、それでも GCC 5 にバックポートされる可能性があります。しかし、最善の方法は GCC 6 を使用することです。

  4. GCC 開発者が何をするかについてコメントすることはできませんが、最初の点で問題が何であるかをすでに述べたと思います。NVIDIA がドライバーをオープン ソースにしない限り、追加の手順が常に必要になると思います。

  5. 現在、OpenMP は CPU と MIC に対してのみ計画されていると思います。両方の OpenMP サポートがおそらくデフォルトの動作になると思います。NVIDIA GPU をターゲットとする OpenMP がすぐにターゲットの一部になるかどうかはわかりませんが、GCC は OpenMP と OpenACC の両方に GOMP を使用しているため、最終的にはできるようになると思います。また、GCCもOpenMPを使ったHSAをターゲットにしているので、基本的にはAMD APUのもの。AMD GPU が同じように動作するかどうかはわかりませんが、可能かもしれません。AMD はドライバーをオープン ソース化しているため、デフォルトの動作に統合する方が簡単だと思います。

于 2016-08-04T08:55:29.087 に答える