CUDA プロジェクト
CUDA(英語) (Compute Unified Device Architecture)は、NVidia による並列コンピューティングプラットフォームおよびプログラミングモデルです。 CUDA 対応の GPU を操作するための C/C++ 言語拡張機能と API を提供します。
CLion は CUDA C/C++ をサポートし、 コードインサイトを提供します。 また、 CLion は、新規プロジェクトウィザードを使用してCMake ベースの CUDA アプリケーションを作成できます。
CLion の CUDA プロジェクト
始める前に、必ず CUDA 開発ツールキット(英語)をインストールしてください。 インストール手順の詳細については、 公式ドキュメント(英語)を参照してください。
新しい CUDA プロジェクトを作成する
メインメニューで、 に移動し、プロジェクトタイプとして CUDA 実行可能ファイル または CUDA ライブラリ を選択します。
必要に応じて、プロジェクトの場所、言語標準、ライブラリタイプを指定します。

選択した標準が
CMAKE_CUDA_STANDARD変数に設定されます。 別の標準の通常の C/C++ ファイルをプロジェクトに追加する場合は、 CMakeLists.txt スクリプトでCMAKE_C_STANDARD/CMAKE_CXX_STANDARD変数を手動で設定する必要があります。作成 をクリックすると、CLion はサンプル CMakeLists.txt および main.cu を使用してプロジェクトを生成します。

既存の CUDA プロジェクトを開く
新しい .cu/ .cuh ファイルを追加する
プロジェクトツリーで目的のフォルダーを右クリックし、 または を選択します。
タイプ フィールドで、CUDA ソースまたは CUDA ヘッダーにそれぞれ .cu または .cuh を選択します。
新しいファイルを 1 つ以上の CMake ターゲットに自動的に追加する場合は、 ターゲットに追加 チェックボックスを選択し、リストから必要なターゲットを選択します。

オプションには、一般的な CMake ターゲットと
cuda_add_executable/cuda_add_libraryで作成されたターゲットの両方が含まれます (CUDA CMake 言語を参照)。
CUDA コンパイラーを設定する
すべての .cu / .cuh ファイルは、LLVM ベースの CUDA コンパイラードライバーである NVCC(英語) を使用してコンパイルする必要があります。
NVCC を検出するには、CUDA ツールチェーンの場所を CMake に通知する必要があります。 次のいずれかのオプションを使用します。
システム
PATH変数に CUDA ツールチェーンパスを設定します。Linux では、 /etc/environment 構成ファイルで /usr/local/cuda-<version>/bin を
PATHに追加することをお勧めします。 こうすることで、ターミナルから作業している場合でも、デスクトップランチャーを使用している場合でも、リモート Linux マシンに接続している場合でも、CUDA Toolkit の場所が利用できるようになります。 詳細については、公式の Linux のインストールガイド(英語)を参照してください。または、CMake で NVCC へのパスを指定します。 これを行う方法の 1 つは、
CMAKE_CUDA_COMPILER変数を NVCC 実行可能ファイルの場所に設定することです。この変数を CMakeLists.txt に追加するか、 の CMake のオプション フィールドを使用できます。 例: Windows の場合:

デフォルト以外のホストコンパイラーを構成する
ホストコードをコンパイルするために、NVCC はシステムのデフォルトの C++ コンパイラー (Linux では gcc/g ++ 、Windows では cl.exe) を呼び出します。 サポートされているバージョンは、 Windows(英語) および Linux(英語) の公式ガイドで確認できます。
システムのデフォルトコンパイラーが CUDA ツールキットと互換性がない場合は、代わりに NVCC が使用するカスタムコンパイラー実行ファイルを指定できます。
次のオプションのいずれかを選択します。
CUDAHOSTCXX環境変数を使用するCUDAHOSTCXX=/path/to/compiler現在のプロジェクトのみに設定するには、 の 環境 フィールドを使用します。
システム全体に設定するには、この変数を /etc/environment に追加します。
CMake 変数を使用する
言語としての CUDA を使用する CUDA プロジェクトの場合: CMAKE_CUDA_HOST_COMPILER および CMAKE_CUDA_FLAGS
find_package(CUDA)を使用する CUDA プロジェクトの場合: CUDA_HOST_COMPILER および CUDA_NVCC_FLAGS
の CMake のオプション フィールドに次の行を追加します。
-DCMAKE_CUDA_HOST_COMPILER=/path/to/compiler -DCMAKE_CUDA_FLAGS="-ccbin /path/to/compiler"あるいは、 CMakeLists.txt に変数を設定します。
set(CMAKE_CUDA_HOST_COMPILER "/path/to/compiler") set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -ccbin /path/to/compiler")ツールチェーンのコンパイラーを使用するには、パスを
${CMAKE_CXX_COMPILER}に置き換えます。set(CMAKE_CUDA_HOST_COMPILER "${CMAKE_CXX_COMPILER}") set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -ccbin ${CMAKE_CXX_COMPILER}")
Windows では、 MSVC ツールチェーンの Visual Studio インストールを切り替えると、ホストコンパイラーが自動的に変更されます。
CUDA プロジェクト用の CMake
CUDA 言語
CUDA は、バージョン 3.8 以降、CMake の言語としてサポートされています。 CLion が新しい CUDA プロジェクト用に生成する CMakeLists.txt スクリプトの先頭にある次の行に注意してください。
このコマンドでは、 LANGUAGES(英語) オプションに CUDA が指定されています(行を短くするために LANGUAGES キーワードはスキップされます)。
例として、 project(project_name LANGUAGES CUDA CXX) を記述して、CUDA と C++ の両方をプロジェクト言語として有効にすることができます。
NVCC コンパイラーオプション
NVCC のコンパイラーフラグ(英語)を指定するには、 CMAKE_CUDA_FLAGS(英語) 変数を設定します。
このようにして、フラグはすべてのターゲットに対してグローバルに使用されます。
別のアプローチは、 target_compile_options(英語) コマンドを使用して特定のターゲットのフラグを設定することです。 例:
分離可能なコンパイル
デフォルトでは、NVCC はプログラム全体のコンパイルアプローチを使用しますが、代わりに 分離可能なコンパイル(英語)を有効にすることができます。 このようにして、CUDA プロジェクトのコンポーネントは別々のオブジェクトにコンパイルされます。
CMAKE_CUDA_SEPARABLE_COMPILATION(英語) 変数を使用して、分離可能なコンパイルを制御できます。
set(CMAKE_CUDA_SEPARABLE_COMPILATION ON)コマンドを追加して、グローバルにオンにします。CUDA_SEPARABLE_COMPILATION(英語) プロパティを使用して、特定のターゲットに対して有効にします。
set_target_properties( cuda_testprj PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
ターゲットを追加する
CUDA が言語として有効になっている場合、通常の add_executable/add_library コマンドを使用して、CUDA コードを含む実行可能ファイルとライブラリを作成できます。
もう 1 つのオプションは、新しいファイルを追加するときに CUDA ターゲットを追加することです。 新しいターゲットの追加 をクリックし、ドロップダウンリストから必要なコマンドを選択します。

CMake は、ファイル拡張子に応じて適切なコンパイラーを呼び出します。
CUDA C/C++ のコードインサイト
CLion は CUDA コードを解析し正しくハイライトするため、 ナビゲーション、 クイックドキュメントやその他のコーディング支援機能が通常通り利用できます:

さらに、カーネルの呼び出しで山括弧を使う際に コード補完が利用できます。

cuda-gdb を使用したデバッグ
Linux では、 cuda-gdb(英語) を使用して CUDA カーネルをデバッグできます。
cuda-gdb をカスタムデバッガーとして設定する
に移動し、現在のツールチェーンの デバッガー フィールドにパスを入力します。
CUDA デバッグシンボルを追加するには、
-Gコンパイラーオプションを使用します:add_compile_options(-G)。 このコマンドは、 CMake のオプション の プロファイルや CMakeLists.txt スクリプトに追加できます。
既知の問題と制限
Windows では、CLion が MSVC ツールチェーン用にバンドルしている LLDB ベースのデバッガーで、CUDA コードに問題が発生する可能性があります。
macOS では、このプラットフォームはバージョン 10.13 から正式にサポートされていないため、CUDA プロジェクトに対する CLion のサポートはテストされていません。
現在、 コードカバレッジ、 Valgrind Memcheck、 CPU プロファイリングツールは、CUDA プロジェクトで正常に動作しません。