cuBLASなどの関数の実行時間を手軽に測る

目次

何の話か

GPU上で走る既存のアプリケーションで、例えばcublasSgemmの実行にかかっている時間を知りたいときどうしますか?
nsysで測ったとしてもカーネルの実行時間しか取れないですし、アーキによって実行される関数名が異なるのでプロファイリングするのが少々面倒だったりします。
そんなときどうすればいいかという話。

CULiPのご紹介

そんなときに便利なのがCULiP(きゅーりっぷ)です。
CULiPはcuBLAS等の関数をラップして実行時間を測ります。
使い方はかんたん。
CULiPの共有ライブラリをビルドして計測を行いたいアプリケーションにリンクするだけ。
実行ファイルを実行すれば関数実行にかかった時間が標準出力に出力されます。
プロファイリングの有効無効は環境変数で実行時に切り替えできます。

CULiPの仕組み

CULiPではcuBLAS等の関数と同名の関数が定義されており、これがlibcublas.soの代わりにリンクされます。
CULiPの関数内ではlibcublas.soをdlopenし、本物の関数を呼びます。
この読んでいる間の時間を記録することで実行時間の計測を行います。

おわりに

CULiPは現状サポートしてる関数も少ないです。
関数を追加したい場合などはissueを立てたりPRを投げてくれると助かります。

カテゴリー:CUDA
記事作成日:2021-05-03