gcc-10、Ubuntu 18.04 の CUDA 11、およびこの CMakeLists.txt ファイル (または OpenMP バージョン) を使用して、GPU オフロードで最も単純な OpenMP または OpenACC C++ プログラムを構築しようとしています。
cmake_minimum_required(VERSION 3.18)
project(hello VERSION 0.1.0)
find_package(OpenACC REQUIRED)
add_executable(hello main.cpp)
target_compile_options(hello PRIVATE -O3 -fopenacc -foffload=nvptx-none)
target_link_libraries (hello OpenACC::OpenACC_CXX)
ビルドは次のエラーで失敗します:
[build] [100%] Linking CXX executable hello
[build] /usr/local/bin/cmake -E cmake_link_script CMakeFiles/hello.dir/link.txt --verbose=1
[build] /usr/bin/g++-10 -O3 -DNDEBUG -fopenacc CMakeFiles/hello.dir/main.cpp.o -o hello
[build] ptxas fatal : Value 'sm_30' is not defined for option 'gpu-name'
[build] nvptx-as: ptxas returned 255 exit status
[build] mkoffload: fatal error: /usr/bin/x86_64-linux-gnu-accel-nvptx-none-gcc-10 returned 1 exit status
[build] compilation terminated.
GPU アーキテクチャを定義するフラグが欠落していると思われますが、関連するドキュメントが見つかりません。GCC でのオフロードのサポート: コンパイル オプションには Nvidia の例がなく、最善の推測-foffload="-arch=sm_75"
またはを試してみると、次の-foffload=nvidia-"-arch=sm_75"
ようになります。
[build] [ 50%] Building CXX object CMakeFiles/hello.dir/main.cpp.o
[build] /usr/local/bin/cmake -E time /usr/bin/g++-10 -DFMT_LOCALE -O3 -DNDEBUG -O3 -fopenacc -foffload=nvptx-none -foffload=\"-arch=sm_75\" -std=gnu++2a -o CMakeFiles/hello.dir/main.cpp.o -c /home/paul/st/hello/main.cpp
[build] g++-10: fatal error: GCC is not configured to support "-arch as offload target
[build] compilation terminated.
手がかりや関連リンクは高く評価されます。