LoginSignup
5
6

More than 3 years have passed since last update.

CUDAでも自動補完ほしい!!ソース解析したい!!

Posted at

動機

MicroSoftが提唱したLanguageServerProtocolがテキストエディターの補完ツールやLintingツールとして普及して久しいですね。もはやこうしたツールなしでは生きていけない体にされている人も多いと思います。これを使ってフォーマットをする方も多いでしょう。ある変数の定義にジャンプするのもコマンド一発でいけます。
しかし困ったことに、CUDA C/C++で公式のLanguageServerが提供されていないのです。そこで今回はclangdを使ってcudaでもLanguageServerを使う方法を紹介していきたいと思います。

動作環境:ubuntu18.04
clangd: version 8
CUDA : 10.0

clangdの設定

clangdの設定ファイルはcompile_commands.json、もしくは、compile_flags.txtです[1]。compile_commands.jsonは一つ一つのファイルに対して細かくコマンドを指定できるんですが今回は全部のファイルで一括のオプションを指定するcompile_flags.txtを使います。
compile_flags.txtを以下のようにします。

compile_flags.txt
c++
-x
cuda
--std=c++14

これをプロジェクトのルートに配置します。
すると、.cppを開いても.hppを開いても、.cuを開いてもLanguageServerの恩恵を受けられるようになります。

実例

NeoVim+LanguageClient-neovim+deoplete.nvim+neosnippetの場合
設定については、人によって大きく異なると思われるので、LanguageClient-neovimのwikiを参照。

cudaMallocManaged.gif
cudaの関数の補完ができている様子。そして、__global__等が入っていても指摘してこないことから、しっかりとCUDAとして認識していることがわかる。

add.gif
blockDimやthreadIdxも補完できている様子。

header_go_to_jump.gif

ヘッダファイルでもしっかりLintingが働き、定義元へのジャンプもできます。

VSCodeでも同様のことがvscode-clangdを使うとできる。

vscode.gif

以上、CUDAでもVisualStudio等の重量級IDEを使わずとも補完できるようにする方法でした。

参考資料

[1] Getting started with clangd — Extra Clang Tools 11 documentation https://clang.llvm.org/extra/clangd/Installation.html

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6