gpt4 book ai didi

cuda - 如何在CUDA中使用多态

转载 作者:行者123 更新时间:2023-12-04 15:59:01 31 4
gpt4 key购买 nike

我正在将一些物理模拟代码从 C++ 移植到 CUDA。

基本算法可以理解为:对向量的每个元素应用一个运算符。在伪代码中,模拟可能包括以下内核调用:

apply(Operator o, Vector v){
...
}

例如:
apply(add_three_operator, some_vector)

将向向量中的每个元素添加三个。

在我的 C++ 代码中,我有一个抽象基类 Operator,具有许多不同的具体实现。重要的方法是
类运算符{
虚拟双操作(双 x)=0;
运算符 compose(运算符 lo, 运算符 ro);
...
}

AddOperator 的实现可能如下所示:
class AddOperator : public Operator{
private:
double to_add;
public:
AddOperator(double to_add): to_add(to_add){}
double operator(double x){
return x + to_add;
}
};

operator 类具有缩放和组合 Operator 的具体实现的方法。这种抽象允许我简单地将“叶”运算符组合成更一般的转换。

例如:
apply(compose(add_three_operator, square_operator), some_vector);

将添加三个然后平方向量的每个元素。

问题是 CUDA 不支持内核中的虚拟方法调用。我目前的想法是使用模板。然后内核调用将类似于:
apply<Composition<AddOperator,SquareOperator>>
(compose(add_three_operator, square_operator), some_vector);

有什么建议?

最佳答案

大概是这样的……

template <class Op1, class Op2>
class Composition {...}

template <class Op1, class Op2>
Composition<Op1, Op2> compose(Op1& op1, Op2& op2) {...}

template<class C>
void apply(C& c, VecType& vec){...}

关于cuda - 如何在CUDA中使用多态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17821404/

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