我在头文件中有一个模板化函数,并在使用CUDA编译时收到一些警告。
警告:内联限定符被忽略为"全局"功能
template<typename A,typename B>
__global__ inline void functionA(ar1, arg2)
{}
有人可以帮忙吗?
答案 0 :(得分:4)
当函数被“内联”时,意味着要在函数内执行的代码被提升到调用函数中,从而避免了保存寄存器,跳转到函数以及之后恢复寄存器的开销(在线搜索“ABI”了解详情。)
无法内联内核调用,因为执行内核代码(GPU)的处理器与启动内核(CPU)的处理器不同,所以没有任何意义。
即使使用动态并行,它也没有意义,因为语义意味着子内核可以在任何地方运行,而不一定在同一个SM上运行。
答案 1 :(得分:0)
嗯,对我来说这是一个很大的问题,因为我想为许多不同的文件提供一个通用的 global 函数,并将其保留在hpp文件中会导致链接错误(多个定义) )或此警告(如果我添加了内置关键字)。
解决方案: 而是添加一个内联的 device 函数,并在每个所需文件中创建一个辅助 global 函数,该文件只需调用此设备函数即可。这样就可以了。