gpt4 book ai didi

c++ - CUDA 错误 - 虚函数、继承、新运算符

转载 作者:太空宇宙 更新时间:2023-11-04 13:36:48 29 4
gpt4 key购买 nike

使用 OOP CUDA 代码,我在global 函数中对象创建 有奇怪的行为

CUDA 设备:Tesla C2075,计算能力:2.0

没有 NEW 运算符一切正常

使用新运算符 -> 失败:CUDA_ERROR_NO_BINARY_FOR_GPU

查看代码:

基类:

class Base
{
public:
float PositionX;
float PositionY;
float PositionZ;


public:
__device__ Base()
{
}

__device__ void SetPosition(float x, float y, float z)
{
PositionX = x;
PositionY = y;
PositionZ = z;
}


__device__ virtual void setCode(float r);
__device__ virtual void getCode(float q);

};

1导数:

class  Box : public  Base
{
public:

bool myIsVisible;
float code;

public:


__device__ Box()
{
}

__device__ void setCode(float r) override
{
code = r;
}


__device__ void getCode(float a) override
{
a = code ;
}

}

2导数:

class  Sphere : public  Base
{

public:

bool myIsVisible;
float code;

public:


__device__ Sphere()
{
}

__device__ void setCode(float r) override
{
code = r;
}
__device__ void getCode(float a) override
{
a = code;
}

}

AAANDe 终于让我的内核处于错误状态:

 __global__ void CreateSphere(size_t *objectHandle_in)
{
Sphere *aObject = new Sphere();

}

良好状态:

 __global__ void CreateSphere(size_t *objectHandle_in)
{
Sphere *aObject ;

}

来自 CUDA 编程指南:

When a function in a derived class overrides a virtual function in a base class, the execution space qualifiers (i.e., host, device) on the overridden and overriding functions must match.

It is not allowed to pass as an argument to a global function an object of a class with virtual functions.

虚函数表被放置在全局或常量内存中 编译器。

但我只是创建对象,在这种情况下它也失败了:

__device__ creatDevSphere()
{
Sphere *aObject = new Sphere();
}

__global__ void CreateSphere(size_t *objectHandle_in)
{
creatDevSphere();

}

我知道新运算符在 CC 2.0 中可用...或者不是?

最佳答案

我猜您使用的是 CUDA 7,因为您使用了 C++11 功能。setCodegetCode 方法需要在您的 Base 类中实现,或者它们必须是纯虚拟的。

这对我有用:

__device__ virtual void setCode(float r) = 0;
__device__ virtual void getCode(float q) = 0;

关于c++ - CUDA 错误 - 虚函数、继承、新运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29283418/

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