Cuda 警告:忽略了“的内联限定符”;“全球”;功能

Cuda 警告:忽略了“的内联限定符”;“全球”;功能,cuda,Cuda,我在头文件中有一个模板函数,在使用CUDA编译时会收到一些警告 警告:忽略“全局”函数的内联限定符 模板 __全局_uu_uuuu内联无效函数(ar1,arg2) {} 有人能帮上忙吗?当函数“内联”时,意味着要在函数内部执行的代码被提升到调用函数中,从而避免了保存寄存器、跳转到函数中以及之后恢复寄存器的开销(有关详细信息,请在线搜索“ABI”) 内联内核调用是不可能的,因为执行内核代码的处理器(GPU)与启动内核的处理器(CPU)不一样,所以没有意义 即使使用动态并行,也没有意义,因为语义意

我在头文件中有一个模板函数,在使用CUDA编译时会收到一些警告

警告:忽略“全局”函数的内联限定符

模板
__全局_uu_uuuu内联无效函数(ar1,arg2)
{}
有人能帮上忙吗?

当函数“内联”时,意味着要在函数内部执行的代码被提升到调用函数中,从而避免了保存寄存器、跳转到函数中以及之后恢复寄存器的开销(有关详细信息,请在线搜索“ABI”)

内联内核调用是不可能的,因为执行内核代码的处理器(GPU)与启动内核的处理器(CPU)不一样,所以没有意义

即使使用动态并行,也没有意义,因为语义意味着子内核可以在任何地方运行,不一定在同一个SM上。

当函数“内联”时,意味着要在函数内部执行的代码被提升到调用函数中,从而避免了保存寄存器的开销,跳转到函数中,然后恢复寄存器(在线搜索“ABI”了解详细信息)

内联内核调用是不可能的,因为执行内核代码的处理器(GPU)与启动内核的处理器(CPU)不一样,所以没有意义


即使使用动态并行,也没有任何意义,因为语义意味着子内核可以在任何地方运行,不一定在同一个SM上。

对我来说,这是一个巨大的问题,因为我想为许多不同的文件提供一个通用的全局函数,如果我添加了inline关键字,将其保留在hpp文件中会导致链接错误(多个定义)或此警告

解决方案:
改为添加一个内联设备函数,并在每个只调用此设备函数的所需文件中创建一个辅助全局函数。这就是诀窍。

对我来说,这是一个巨大的问题,因为我想为许多不同的文件提供一个通用的全局函数,如果我添加内联关键字,将其保留在hpp文件中会导致链接错误(多个定义)或此警告

解决方案:
改为添加一个内联设备函数,并在每个只调用此设备函数的所需文件中创建一个辅助全局函数。这就是诀窍。

到底需要什么帮助?内核不能内联,所以关键字是多余的。具体帮助什么?内核不能内联,因此关键字是多余的。
template<typename A,typename B>
__global__ inline void functionA(ar1, arg2)
{}