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 ツールキットの場所を利用できるようになります。詳細については、公式 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 ターゲットを追加することです。新しいターゲットの追加をクリックし、ドロップダウンリストから必要なコマンドを選択します。
![新しいファイルのターゲットの追加 Adding targets for new files](https://resources.jetbrains.com/help/img/idea/2023.3/cl_cuda_addingtargets.png)
CMake は、ファイル拡張子に応じて適切なコンパイラーを呼び出します。
CUDA C/C++ のコードインサイト
CLion は CUDA コードを解析して正しくハイライトします。これは、ナビゲーション、クイックドキュメント、およびその他のコーディング支援機能が期待どおりに動作することを意味します。
![CUDA コードのコードインサイト Code insight for CUDA code](https://resources.jetbrains.com/help/img/idea/2023.3/cl_cuda_codeinsight.png)
さらに、コード補完は、カーネル呼び出しの山括弧括弧で使用できます。
![CUDA コードの補完 Completion for CUDA code](https://resources.jetbrains.com/help/img/idea/2023.3/cl_cuda_kernelcompletion.png)
cuda-gdb を使用したデバッグ
Linux では、cuda-gdb(英語) を使用して CUDA カーネルをデバッグできます。
cuda-gdb をカスタムデバッガーとして設定する
デバッガーフィールドにパスを入力します。
に移動し、現在のツールチェーンの-G
コンパイラーオプションを使用して、CUDA デバッグシンボルを追加します:add_compile_options(-G)
このコマンドは、プロファイルの CMake のオプションまたは CMakeLists.txt スクリプトに追加できます。
既知の問題と制限
Windows では、CLion が MSVC ツールチェーン用にバンドルしている LLDB ベースのデバッガーで、CUDA コードに問題が発生する可能性があります。
macOS では、このプラットフォームはバージョン 10.13 から正式にサポートされていないため、CUDA プロジェクトに対する CLion のサポートはテストされていません。
現在、コードカバレッジ、Valgrind Memcheck、CPU プロファイリングツールは、CUDA プロジェクトに対して適切に機能しません。
関連ページ:
![](https://resources.jetbrains.com/help/img/idea/2023.3/cl_cmakeListsFiles.png)
CMakeLists.txt
CMakeLists.txt ファイルには、プロジェクトのソースファイルとターゲット(実行可能ファイル、ライブラリ、その両方)を記述する指示文と命令のセットが含まれています。新しいプロジェクトを作成すると、CLion は自動的に CMakeLists.txt ファイルを生成してプロジェクトのルートディレクトリに配置します。プロジェクトを開くには、CLion を最上位の CMakeLists.txt にポイントしてプロジェクトとして開くを選択します。以下の例は、単純な「Hello, World」プロジェクト...
![](https://resources.jetbrains.com/help/img/idea/2023.3/cl_cmaketutorial_toolwindow.png)
CMake プロジェクトを作成する / 開く
CMake プロジェクトを最初から作成するウェルカム画面で新しいプロジェクトをクリックするか、メインメニューからを選択します。左側のペインで C++ 実行ファイルを選択します。プロジェクト名と言語標準を設定します。作成をクリックします。CLion は、次のコマンドを含む単一のソースファイル main.cpp とルート CMakeLists.txt を含むスタブプロジェクトを生成します。CMake の最低限必要なバージョンを指定します。CLion にバンドルされている CMake のバージョンに設定されてい...
![](https://resources.jetbrains.com/help/img/idea/2023.3/cl_compdb_overview.png)
Compilation database
CMake、Gradle、Makefile に基づいていないプロジェクトで作業している場合でも、CLion が提供する高度な IDE 機能を利用できます。1 つの方法は、非 CMake プロジェクトをインポートし、CLion にそれを単純な CMake 構造に変換させることです。別のオプションは、compilation database をロードしてプロジェクトを開くことです。compilation database を使用すると、CLion はプロジェクトファイルを検出し、インクルードパスやコンパ...
![](https://resources.jetbrains.com/help/img/idea/2023.3/cl_toolchain_options.png)
チュートリアル: Windows で CLion を設定する
WSL ツールチェーンを使用すると、Linux の CMake とコンパイラーを使用してプロジェクトを構築し、Windows マシンで leavCLionLion を実行せずに WSL で実行 / デバッグできます。Microsoft Visual C++:システムに Visual Studio2013, 2015, 2017, 2019,, 2022 をインストールしてください。CLion で、に移動します。をクリックし、ツールチェーンテンプレートのリストから Visual Studio を選択しま...
![](https://resources.jetbrains.com/help/img/idea/2023.3/cl_recent_locations_popup.png)
ソースコードナビゲーション
さまざまなアクションやポップアップを使用して、エディター内のコードを素早く移動することができます。エディターウィンドウとツールウィンドウ間の移動に関する詳細情報については、エディターの基本を確認してください。キャレットで移動する後方に移動するには、を押します。前方に移動するには、を押します。最後に編集した場所に移動するには、を押します。エディターで現在のキャレット位置を見つけるには、Ctrl+M を押します。大きなファイルをスクロールしたくない場合は、このアクションが役立つかもしれません。た
![](https://resources.jetbrains.com/help/img/idea/2023.3/cl_quickdoc_func_doxygen.png)
クイックドキュメント
クイックドキュメントポップアップはキャレットのコード要素に関する詳細情報を取得できます: CLion はマウスオーバー時に自動的にポップアップで簡単なドキュメントを表示する: ポップアップを呼び出す要素に応じて、ポップアップには次のものが含まれます。関数のシグネチャーの詳細とコードのドキュメント (通常のコメントまたは Doxygen コメント):、推論される型:、構造体とクラスの詳細をコピー / 移動します。以下の例では、ポップアップに含まれる TODO コメントを参照することもできます。標準の関数、...