CUDAでtype_traits

CUDA Advent Calendar 2019 16日目の記事です.

CUDAで例えばstd::is_sameは使えるか?

結論から言うと使えます.
カーネル関数内で
if (std::is_same::value) {
    // 型Aと型Bが同じだった場合
} else {
    // 型Aと型Bが異なっていた場合
}
のようにできます.
stdはhost用の関数群だしできないのかなと思っていましたが,type_traitsに含まれるものはコンパイル時に色々するものですし動きそうではありますよね.

PTXだとどうなっているか

こんなカーネル関数のPTXを見てみます. T=int, floatの実体を作ったときのPTXがこちら.
最初の関数名が_Z6kernelIiEvPiの方がT=int,次の_Z6kernelIfEvPiがT=floatです. 確かに期待通りのPTXが作られています.

カテゴリー:CUDA
記事作成日:2019-12-16