gpt4 book ai didi

C++ CUDA 推力 vector 多态性

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:20:08 24 4
gpt4 key购买 nike

在我现在正在编写的程序中,我想使用 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)是一个模板类,其中模板有两个参数 - 它包含的类型以及它使用的分配器。两种 vector 使用不同的分配器,这又意味着两个不同的指针。

有什么方法可以定义 ptr 以便我可以像在示例中那样使用它吗?

最佳答案

我最终结合了@Michael Haidl 和@Robert Crovella(以及@talonmies 的代理人)的建议来创建一个类(称为“UnifiedVector”),它有两个基于非类型参数枚举的特化(计算方法::GPU,计算方法::CPU)。

在一个专门化中,UnifiedVector 继承了 host_vector,在另一个中继承了 device_vector。然后我使用相同的枚举对使用 UnifiedVector 的类进行模板化,这样我就可以像这样使用它:

template<ComputeMethod C>
class SomeClass
{
private:
UnifiedVector<something,C> data;
}

不确定这种方法有多优雅或“正确”,但我想它就足够了,因为它实现了使 vector 对使用它的类“透明”的目标(因为它不必明确地以不同的方式处理一种 vector 或为两种不同的可能 vector 类型持有两个指针)。

关于C++ CUDA 推力 vector 多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27567804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com