CLion 2023.3 ヘルプ

CUDA プロジェクト

CUDA(英語)(Compute Unified Device Architecture)は、NVidia による並列コンピューティングプラットフォームおよびプログラミングモデルです。CUDA 対応 GPU を操作するための C/C++ 言語拡張機能と API を提供する

CLion は CUDA C/C++ をサポートし、コードインサイトを提供します。また、CLion は、新規プロジェクトウィザードを使用して CMake ベースの CUDA アプリケーションを作成できます。

CLion の CUDA プロジェクト

始める前に、必ず CUDA 開発ツールキット(英語)をインストールしてください。インストール手順の詳細については、公式ドキュメント(英語)を参照してください。

新しい CUDA プロジェクトを作成する

  1. メインメニューで、ファイル | 新しいプロジェクトに移動し、プロジェクトタイプとして CUDA 実行可能ファイルまたは CUDA ライブラリを選択します。

  2. 必要に応じて、プロジェクトの場所、言語標準、ライブラリタイプを指定します。

    Create a new CUDA project

    選択した標準が CMAKE_CUDA_STANDARD 変数に設定されます。別の標準の通常の C/C++ ファイルをプロジェクトに追加する場合は、CMakeLists.txt スクリプトで CMAKE_C_STANDARD/CMAKE_CXX_STANDARD 変数を手動で設定する必要があります。

  3. 作成をクリックすると、CLion はサンプル CMakeLists.txt および main.cu を使用してプロジェクトを生成します。

    A template CUDA project

既存の CUDA プロジェクトを開く

  • CMake ベースの CUDA プロジェクトは、ファイル | 開くメニューまたは CLion ウェルカム画面から通常の CMake アプリケーションとしてくことができます。

  • 非 CMake CUDA プロジェクトの場合、compilation database生成して CLion にロードできます。

新しい .cu/ .cuh ファイルを追加する

  1. プロジェクトツリーで目的のフォルダーを右クリックし、新規 | C/C++ ソースファイルまたは C/C++ ヘッダーファイルを選択します。

  2. タイプフィールドで、CUDA ソースまたは CUDA ヘッダーにそれぞれ .cu または .cuh を選択します。

    新しいファイルを 1 つ以上の CMake ターゲットに自動的に追加する場合は、ターゲットに追加チェックボックスを選択し、リストから必要なターゲットを選択します。

    Adding a CUDA source file

    オプションには、一般的な 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>/binPATH に追加することをお勧めします。こうすることで、ターミナルから作業しているか、デスクトップランチャーを使用しているか、リモート Linux マシンに接続しているかに関係なく、CUDA ツールキットの場所を利用できるようになります。詳細については、公式 Linux のインストールガイド(英語)を参照してください。

  • または、CMake で NVCC へのパスを指定します。これを行う方法の 1 つは、CMAKE_CUDA_COMPILER 変数を NVCC 実行可能ファイルの場所に設定することです。

    この変数を CMakeLists.txt に追加するか、設定 | ビルド、実行、デプロイ | CMakeCMake のオプションフィールドを使用できます。例: Windows の場合:

    CMake setting for a CUDA project

デフォルト以外のホストコンパイラーを構成する

ホストコードをコンパイルするために、NVCC はシステムのデフォルトの C++ コンパイラー(Linux では gcc /g ++、Windows では cl.exe)を呼び出します。サポートされているバージョンは、Windows(英語) および Linux(英語) の公式ガイドで確認できます。

システムのデフォルトコンパイラーが CUDA ツールキットと互換性がない場合は、代わりに NVCC が使用するカスタムコンパイラー実行ファイルを指定できます。

次のオプションのいずれかを選択します。

  1. CUDAHOSTCXX 環境変数を使用する

    CUDAHOSTCXX=/path/to/compiler
    • 現在のプロジェクトのみに設定するには、設定 | ビルド、実行、デプロイ | CMake環境フィールドを使用します。

    • システム全体に設定するには、この変数を /etc/environment に追加します。

  2. CMake 変数を使用する

    • 言語としての CUDA を使用する CUDA プロジェクトの場合: CMAKE_CUDA_HOST_COMPILER および CMAKE_CUDA_FLAGS

    • find_package(CUDA) を使用する CUDA プロジェクトの場合: CUDA_HOST_COMPILER および CUDA_NVCC_FLAGS

    設定 | ビルド、実行、デプロイ | CMakeCMake のオプションフィールドに次の行を追加します。

    -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 スクリプトの先頭にある次の行に注意してください。

    project(cuda_testprj CUDA)

    このコマンドでは、LANGUAGES(英語) オプションに CUDA が指定されています(行を短くするために LANGUAGES キーワードはスキップされます)。

    例として、project(project_name LANGUAGES CUDA CXX) を記述して、CUDA と C++ の両方をプロジェクト言語として有効にすることができます。

    NVCC コンパイラーオプション

    NVCC のコンパイラーフラグ(英語)を指定するには、CMAKE_CUDA_FLAGS(英語) 変数を設定します。

    set(CMAKE_CUDA_FLAGS "-Wall")

    このようにして、フラグはすべてのターゲットに対してグローバルに使用されます。

    別のアプローチは、target_compile_options(英語) コマンドを使用して特定のターゲットのフラグを設定することです。例:

    target_compile_options( my_target PRIVATE $<$<COMPILE_LANGUAGE:CUDA>: --generate-line-info>)

    分離可能なコンパイル

    デフォルトでは、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 コードを含む実行可能ファイルとライブラリを作成できます。

    add_executable(target_name cpp_file.cpp cuda_file.cu)

    もう 1 つのオプションは、新しいファイルを追加するときに CUDA ターゲットを追加することです。新しいターゲットの追加をクリックし、ドロップダウンリストから必要なコマンドを選択します。

    Adding targets for new files

    CMake は、ファイル拡張子に応じて適切なコンパイラーを呼び出します。

    CUDA C/C++ のコードインサイト

    CLion は CUDA コードを解析して正しくハイライトします。これは、ナビゲーションクイックドキュメント、およびその他のコーディング支援機能が期待どおりに動作することを意味します。

    Code insight for CUDA code

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

    Completion for CUDA code

    cuda-gdb を使用したデバッグ

    Linux では、cuda-gdb(英語) を使用して CUDA カーネルをデバッグできます。

    cuda-gdb をカスタムデバッガーとして設定する

    1. 設定 | ビルド、実行、デプロイ | ツールチェーンに移動し、現在のツールチェーンのデバッガーフィールドにパスを入力します。

    2. -G コンパイラーオプションを使用して、CUDA デバッグシンボルを追加します: add_compile_options(-G) このコマンドは、プロファイルCMake のオプションまたは CMakeLists.txt スクリプトに追加できます。

    既知の問題と制限

    • Windows では、CLion が MSVC ツールチェーン用にバンドルしている LLDB ベースのデバッガーで、CUDA コードに問題が発生する可能性があります。

    • macOS では、このプラットフォームはバージョン 10.13 から正式にサポートされていないため、CUDA プロジェクトに対する CLion のサポートはテストされていません。

    • 現在、コードカバレッジValgrind MemcheckCPU プロファイリングツールは、CUDA プロジェクトに対して適切に機能しません。

    関連ページ:

    CMakeLists.txt

    CMakeLists.txt ファイルには、プロジェクトのソースファイルとターゲット(実行可能ファイル、ライブラリ、その両方)を記述する指示文と命令のセットが含まれています。新しいプロジェクトを作成すると、CLion は自動的に CMakeLists.txt ファイルを生成してプロジェクトのルートディレクトリに配置します。プロジェクトを開くには、CLion を最上位の CMakeLists.txt にポイントしてプロジェクトとして開くを選択します。以下の例は、単純な「Hello, World」プロジェクト...

    CMake プロジェクトを作成する / 開く

    CMake プロジェクトを最初から作成するウェルカム画面で新しいプロジェクトをクリックするか、メインメニューからを選択します。左側のペインで C++ 実行ファイルを選択します。プロジェクト名と言語標準を設定します。作成をクリックします。CLion は、次のコマンドを含む単一のソースファイル main.cpp とルート CMakeLists.txt を含むスタブプロジェクトを生成します。CMake の最低限必要なバージョンを指定します。CLion にバンドルされている CMake のバージョンに設定されてい...

    Compilation database

    CMake、Gradle、Makefile に基づいていないプロジェクトで作業している場合でも、CLion が提供する高度な IDE 機能を利用できます。1 つの方法は、非 CMake プロジェクトをインポートし、CLion にそれを単純な CMake 構造に変換させることです。別のオプションは、compilation database をロードしてプロジェクトを開くことです。compilation database を使用すると、CLion はプロジェクトファイルを検出し、インクルードパスやコンパ...

    チュートリアル: Windows で CLion を設定する

    WSL ツールチェーンを使用すると、Linux の CMake とコンパイラーを使用してプロジェクトを構築し、Windows マシンで leavCLionLion を実行せずに WSL で実行 / デバッグできます。Microsoft Visual C++:システムに Visual Studio2013, 2015, 2017, 2019,, 2022 をインストールしてください。CLion で、に移動します。をクリックし、ツールチェーンテンプレートのリストから Visual Studio を選択しま...

    ソースコードナビゲーション

    さまざまなアクションやポップアップを使用して、エディター内のコードを素早く移動することができます。エディターウィンドウとツールウィンドウ間の移動に関する詳細情報については、エディターの基本を確認してください。キャレットで移動する後方に移動するには、を押します。前方に移動するには、を押します。最後に編集した場所に移動するには、を押します。エディターで現在のキャレット位置を見つけるには、Ctrl+M を押します。大きなファイルをスクロールしたくない場合は、このアクションが役立つかもしれません。た

    クイックドキュメント

    クイックドキュメントポップアップはキャレットのコード要素に関する詳細情報を取得できます: CLion はマウスオーバー時に自動的にポップアップで簡単なドキュメントを表示する: ポップアップを呼び出す要素に応じて、ポップアップには次のものが含まれます。関数のシグネチャーの詳細とコードのドキュメント (通常のコメントまたは Doxygen コメント):、推論される型:、構造体とクラスの詳細をコピー / 移動します。以下の例では、ポップアップに含まれる TODO コメントを参照することもできます。標準の関数、...