【发布时间】:2016-02-14 21:13:33
【问题描述】:
据我了解,虚拟方法调用是后期绑定,因此编译器无法内联。显然,nvcc 严重依赖内联代码。我想知道如果在 Cuda 的内核中使用虚拟方法是否有任何严重的缺点。有没有应该避免的情况?它们会对性能产生影响吗?
【问题讨论】:
-
除非在编译时去虚拟化,否则它们会影响性能(它们需要 vtable 查找 + 间接分支)。如果 warp 中的线程不解析为相同的虚拟方法(例如,在处理具有不同具体类型的对象数组时),您将得到 warp 发散。尽可能避免它们。出于好奇,您正在编写什么样的应用程序,需要在 CUDA 代码中使用虚拟方法?
-
不是 method 是“后期绑定”,而是方法 call 是后期绑定。有时。
-
我正在开发一个 ODE 求解器。长话短说,我有一个名为 solve 的方法,它有两种不同的实现。我编写了一个带有纯虚函数的基类和两个覆盖此方法的子类。这是一个易于维护的解决方案,尽管它可能不是最佳的。尽管如此,我还是有兴趣了解有关此主题的更多信息。
标签: c++ cuda nvcc virtual-functions