一般に、CUDA カーネルは .cpp ファイルから直接呼び出すことができないことはわかっています。代わりに、そのような機能が必要な場合は、インターフェイスが .h ファイルに入り、実装がカーネルと共に .cu ファイルに入る CPU 呼び出し可能な関数でカーネルをラップする必要があります。
ただし、カーネルがそのタイプでテンプレート化されていて、そのテンプレート化可能性を CPU ラッパーを介して .cpp ファイルに渡したい場合、このポリシーを順守すると問題が発生します (テンプレート インターフェイスは同じファイル (.h) にある必要があるため)その実装により、nvcc 以外のコンパイラがその .h ファイルにアクセスしようとすると問題が発生します)。
この制限を回避する方法を知っている人はいますか? (完全にテンプレート化された) CUDA Thrust ライブラリは .cu ファイルからのみ直接呼び出すことができるという事実によって証明されるように、おそらく何もありません (こちらを参照)?