😻

cudair - live-reloadingをCUDA Appでできるようにするツールを作りました

2024/12/23に公開

作成背景

私の研究室では、GPU を用いた並列プログラミングを行っています。GPGPU で主に使われるものとして、CUDA や OPENCL などがあり、私の研究室では CUDA を利用しています。CUDA は基本的に C/C++上で動作します。そのため、プログラムが完成するたびに、ビルドして、実行して、修正して、またビルドして…と繰り返していました。当初は、make コマンドを利用してビルドと実行をまとめていたのですが、terminal を行き来する必要があり、ストレスに感じていました。そこで、golang にある Air のような live-reloading できるツールを作ろうと思ったのがきっかけです。

repository

https://github.com/ei-sugimoto/cudair

使い方

step1

まずは、設定ファイルを作成しましょう。一から作成するのは面倒なので、

cudair init

でシンプルな設定ファイルを作成できます。

できた設定ファイルを見ると、

root = "."
tmp_dir = "tmp"

[build]
bin = "./tmp/main"
cmd = "nvcc --std=c++17 -o ./tmp/main main.cu"
log = "build-errors.log"
exclude_dir = ["tmp"]

root:監視するディレクトリのルートパス
tmp_dir:build 結果を格納する一時 dir の名前
bin:実行コマンド
cmd:コンパイルコマンド
log:build 失敗時に原因を書き込む log ファイルの名前(まだ対応していないです)
exclude_dir:監視対象から除外したい dir の名前

step2

作成した設定ファイルを用いてcudairを起動しましょう。

cudair run -c .cudair.toml

-c, --config:設定ファイルのパス

起動すると、以下の通りになります。

step3

実際に、ファイルを編集して live-reloading できているか確認しましょう。

gif

補足

docker を使って起動することもできます。

FROM nvcr.io/nvidia/cuda:12.6.2-cudnn-devel-ubuntu20.04

RUN apt-get update && apt-get install -y wget

# installing Golang
RUN rm -rf /usr/local/go && wget https://go.dev/dl/go1.23.4.linux-amd64.tar.gz && tar -C /usr/local -xzf go1.23.4.linux-amd64.tar.gz

ENV PATH=$PATH:/usr/local/go/bin:/root/go/bin

RUN go install github.com/ei-sugimoto/cudair@latest

WORKDIR /app

COPY . .

CMD ["cudair", "run", "-c", ".cudair.toml"]

最後に

star をつけていただけると励みになるので、使用する際にはぜひお願いします!

GitHubで編集を提案

Discussion