C++ CUDA 推力矢量多态性
C++ CUDA Thrust vector polymorphism
在我现在正在编写的程序中,我想使用 GPU 或 CPU 进行计算(用于对一个进行基准测试(。为此,我想要一些通用指针,我可以使用device_vector或host_vector的实例初始化,如下所示:
ptr = new host_vector<float>();
或
ptr = new device_vector<float>();
host_vector 和device_vector都继承自 detail::vector_base,但我不能使用 detail::vector_base 指针,因为vector_base(这意味着device_vector和host_vector(是一个模板类,其中模板有两个参数 - 它包含的类型和它使用的分配器。这两种向量都使用不同的分配器,这反过来意味着两个不同的指针。
有什么方法可以定义 ptr,以便我可以像在我的示例中一样使用它?
我最终结合了@Michael Haidl和@Robert Crovella的建议(以及代理@talonmies'(创建一个类(称为"UnifiedVector"(,该类基于非类型参数枚举(ComputeMethod::GPU,ComputeMethod::CPU(有两个专门化。
在一个专业化中,UnifiedVector继承了host_vector,而在另一个device_vector中。然后,我使用相同的枚举对使用 UnifiedVector 的类进行模板化,以便我可以像这样使用它:
template<ComputeMethod C>
class SomeClass
{
private:
UnifiedVector<something,C> data;
}
不确定这种方法有多优雅或"正确",但我想这就足够了,因为它实现了使向量对使用它的类"透明"的目标(因为它不必以不同的方式明确处理一种向量或为两种不同的可能向量类型保留两个指针(。
相关文章:
- 多态性和功能结合
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- C++boost序列化多态性问题
- 如何查找哪个类对象位于数组的特定索引上(多态性)
- 如何在多线程中正确使用unique_ptr进行多态性?
- 具有智能指针的多态性
- 在 C++ 中在堆栈上创建实例时如何保持多态性?
- 继承/多态性 - 我是否被迫使用"protected"变量?
- C++ 多态性在代码::块 17.12 中不起作用
- C++ 泛型和多态性:这种模式可行吗?
- 为什么我们实际上需要运行时多态性?
- 如何在这个简单的最小示例中实现多态性?
- 如何使用静态多态性在 int 和指针类型之间进行转换?
- 无法初始化已知大小的矢量指针,该大小不会因多态性而更改
- 运行时多态性和dynamic_cast需要澄清
- 如何调用指针类型的方法(禁用多态性)?
- 从基类调用函数的多态性
- 运行时多态性 - 箭头运算符访问了错误的成员?
- C++ CUDA 推力矢量多态性