gpt4 book ai didi

c++ - C++ 对象的成员函数作为 CUDA __global__ 函数

转载 作者:搜寻专家 更新时间:2023-10-31 01:48:38 28 4
gpt4 key购买 nike

我有一个基类:

  template <class T> 
class A{
public:
// some data
T data;
//some functions like constructs etc.
...
// one virtual function
virtual void evaluate() = 0;

}

和派生类:

 template <class T> 
class B:public A<T>{
public:
// some functions like constructors etc.
virtual void evaluate();
__global__ void function2(); // **** error message

}

还有,我有

 template <class T> void
B<T>::evaluate()
{
dim3 grid(1);dim3 block(1);
void function2<<<grid,block>>>();
}

template <class T>  __global__ void B<T>::function2() // **** error message 
{
// computation here
}

所以基本上我有一个派生类的成员函数,我想在设备上以并行方式执行它。

不幸的是,我得到了错误:

error : illegal combination of memory qualifiers on the lines :

1> __global__ void function2(); // **** error message

2> template <class T> __global__ void B<T>::function2() // **** error message

我是 CUDA 新手。如果有人指出我的错误,那就太好了。我正在 Visual Studio 2010 上开发。

最佳答案

您的第一个代码片段中的模板类定义是非法的,因为它包含一个 __global__ 函数(CUDA 内核)。根据 language documentation , __global__ 函数不能是静态类成员函数。出于同样的原因,第二个模板化类成员函数是非法的。

关于c++ - C++ 对象的成员函数作为 CUDA __global__ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17535959/

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