この非常に役立つ投稿を見つけたので、コンパイラの最適化について明確にしたいと思います。この関数があるとしましょう (元の投稿と同じ):
template<int action>
__global__ void kernel()
{
switch(action) {
case 1:
// First code
break;
case 2:
// Second code
break;
}
}
コンパイラは、コンパイル時にテンプレート変数が不明な関数を呼び出した場合でも、到達できないコードを排除するという意味で最適化を行いますか? たとえば、2 つの別個の関数を作成するようなものですか? 例えば:
kernel<argv[1][0]>();