Open10

NVIDIAのC++コンパイラ

onihusubeonihusube

NVIDIA製のC++コンパイラとして

  • nvcc
  • NVC++
  • PGI Compiler

の3つが存在しているように見えている。

onihusubeonihusube

On July 29, 2013, NVIDIA Corporation acquired The Portland Group, Inc. As of August 5, 2020, the "PGI Compilers and Tools" technology is a part of the NVIDIA HPC SDK product available as a free download from NVIDIA.

PGIは2013年にNVIDIAによって買収された模様。その後NVIDIAの下でHPC向けCUDAコンパイラとしてPGIコンパイラを提供しているらしい。

PGI has been deeply involved in the expansion of the use of GPGPUs for high-performance computing, developing CUDA Fortran [11] [12] with NVIDIA Corporation and PGI Accelerator Fortran and C compilers [13] which use programming directives. PGI and NVIDIA have both participated in the specification of the new standard OpenACC directives for GPU computing since it was first announced on November 3, 2011. [14][15] On May 21, 2013, PGI released a compiler for the OpenCL language on multi-core ARM processors. [16]
NVIDIA Corporation acquired PGI from STMicroelectronics on July 29, 2013 [1] [2] and offered the PGI technology under the "PGI Compilers and Tools" product line.[17] On August 5, 2020, NVIDIA announced that the "PGI Compilers and Tools" product line has evolved into a new NVIDIA HPC SDK product available as a free download from NVIDIA. The NVIDIA HPC SDK includes rebranded PGI compilers and added features for developing HPC applications.[3] [4]

PGIはSTMicroelectronicsの傘下で、2011年ごろからGPGPU向けコンパイラの開発でNVIDIAと協業を始め、その後2013年に買収された模様。

PGIコンパイラはOpenACCをサポートしていても、CUDAをサポートしているわけでは無いらしい。見るに、PGI CUDA FortranコンパイラはCUDAを直接サポートしている。

onihusubeonihusube

NVIDIA's CUDA Compiler (NVCC) is based on the widely used LLVM open source compiler infrastructure.

nvccはLLVMベースのコンパイラ。PGIとは別系統。

CUDAの提供開始が2007年から(CUDA - Wikipedia)なので、PGI系のCUDAコンパイラは後からの取り組み。

非HPC分野の人が見るCUDAコンパイラはこれ。

厳密には.cuファイル以外のC++コードは別のC++コンパイラに投げているので、nvcc自体はCUDAコンパイラであってC++コンパイラとは言えないかもしれない。一応、.cuファイル内でもCUDA C++というか、C++14程度のコードを書くことができる(nvcc 11.1.0 くらい現在)

onihusubeonihusube

nvc++ is a C++17 compiler for NVIDIA GPUs and AMD, Intel, OpenPOWER, and Arm CPUs. It invokes the C++ compiler, assembler, and linker for the target processors with options derived from its command line arguments. nvc++ supports ISO C++17, supports GPU programming with C++17 parallel algorithms (pSTL) and OpenACC, and supports multicore CPU programming with OpenACC and OpenMP.

NVC++はCUDAプラットフォーム向けのC++コンパイラ。当初からOpenACCはサポートしていたらしいがCUDAは未サポート(https://twitter.com/blelbach/status/1261455345353809920)。

最近(2021年4月初頭頃)NVC++はCUDAをサポート開始した様子(https://twitter.com/blelbach/status/1381725494320590851)。多分2021年春のNVIDIA GTCで発表された?。

NVC++がいつ頃登場したのかは良く分からないけれど、2020年5月頃(多分2020年のGTC)に発表された?(https://twitter.com/blelbach/status/1261219711418724357)

onihusubeonihusube

We've established that GPU compilers are cheese.

NVCC == Cheddar
Clang CUDA == GoUDA (Google CUDA)
NVC++ == Feta
hipCC == Velveeta (sorry not sorry)

Come and get it while it's fresh!

GPU向けコンパイラの状況(2020年5月頃時点)をチーズに例えたもの。投稿者はNVIDIAの中の人。
注目すべきは材料と産地。

hipCCはCUDAをAMD GPUで動かすためのものらしい(CUDAをRadeonで動かす(導入編) - Fixstars Tech Blog)。

ここでの牛乳=LLVMを指すっぽい、産地の違いは提供者の違い。

つまり、NVC++だけはルーツが異なる。

onihusubeonihusube

LLVMはAPIの破壊的変更が激しく、nvccはLLVMのバージョンを上げるのに苦労しているっぽい。

The compiler toolchain gets an LLVM upgrade to 7.0, which enables new features and can help improve compiler code generation for NVIDIA GPUs.

CUDA 11.2がリリースされたのは2020年末、LLVM7がリリースされたのは2018年9月ごろ。2020年末時点のLLVMの最新版はLLVM12がリリース間近。

なお、11.1まではLLVM3.4がベースだった様子(https://twitter.com/termoshtt/status/1339442444149030913)

NVIDIAは将来的にNVC++にCUDAコンパイラを一本化したいかもしれない・・・

そしておそらく、NVC++はPGIの系譜のC++コンパイラだと思われる(フルスクラッチかもしれないが)

onihusubeonihusube

いつの間にか

のNVC++というのが消えて

Nvidia HPC C++
(ex Portland Group/PGI)

に変わっていた。ついでにC++17以前の分についてもPGIがこれに変わっていた。

やはり、PGI Compiler = NVC++であり、現在はNVC++ではなくNvidia HPC C++と呼ばれているらしい。

ついでに、同ページの下の方に

PGI does not ship an implementation of C++ standard library

とあるので、PGI Compilerは標準ライブラリを持たないらしい(Intelコンパイラと同じ感じ?)

onihusubeonihusube

NVIDIA HPC SDK Version 22.3 Documentation

を見ると、NVC++(nvc++)という表記は見えるけれどNVIDIA HPC C++というのは見当たらなさそう。というか実行ファイル名がnvc++という名前になっているらしい。

また、

NVIDIA HPC Compilers User's Guide Version 22.3

This guide is part of a set of manuals that describe how to use the NVIDIA HPC Fortran, C++ and C compilers. These compilers include the NVFORTRAN, NVC++ and NVC compilers.

とあり、他の言語とくっついているものの一応NVIDIA HPC C++という表記を見つけることができる。NVIDIA HPC xxxというのは製品名に近い扱いなのかも。

結局 : PGI Compiler = NVC++ = NVIDIA HPC C++

また呼び名が増えた・・・