cuda中虚拟方法的缺点
Cons of virtual methods in cuda
据我所知,虚拟方法调用是后期绑定的,因此编译器无法内联。显然,nvcc在很大程度上依赖于内联代码。我想知道如果在Cuda的内核中使用虚拟方法,是否会有任何严重的缺点。是否存在应避免的情况?它们会对表现产生影响吗?
如果编译器能够将调用设为虚拟机,它可能能够将其转换为常规方法调用,甚至内联它。为NVCC提供动力的Clang/LLVM在某些情况下能够做到这一点,作为优化。您必须检查生成的代码,以了解情况是否如此。
如果编译器无法对调用进行虚拟化,则可能会对性能产生影响,尤其是当该调用位于热路径上时。虚拟呼叫需要:
- vtable查找
- 间接分支
vtable查找需要花费内存访问,这很慢(可能会"浪费"本可以更好地使用的缓存线),而且间接分支通常很昂贵。此外,如果不是warp中的所有线程都将虚拟方法解析到同一地址(例如,当处理具有不同具体类型的对象数组时),这将导致warp发散,这是另一个性能打击。
也就是说,如果您没有在热路径上调用虚拟方法,那么影响应该可以忽略不计。如果没有进一步的代码,就无法判断。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 在工厂中使用静态方法:优点和缺点?
- 使用 unique_ptr 作为方法参数 - 优点和缺点
- OOP——使用静态方法有缺点吗
- 在名称空间中组织变量和方法的优点和缺点
- cuda中虚拟方法的缺点
- 如何访问类变量?公共方法/getters与继承.优点和缺点是什么
- 使用类的方法而不实例化的优点/缺点
- 内衬方法:缺点