在cuda内核中声明CPP对象 我是CUDA新手,我需要知道它的限制,然后通过CUDA运行我的C++项目。 假设我有一个C++类叫做MyC类。知道Cuda使用C99,是否可以在内核中声明MyClass类型的对象?下面的代码片段是否合适 _global__ void SolveBlaBlaBLa(int x, ...) { MyClass obj1; . . . }

在cuda内核中声明CPP对象 我是CUDA新手,我需要知道它的限制,然后通过CUDA运行我的C++项目。 假设我有一个C++类叫做MyC类。知道Cuda使用C99,是否可以在内核中声明MyClass类型的对象?下面的代码片段是否合适 _global__ void SolveBlaBlaBLa(int x, ...) { MyClass obj1; . . . },c++,c,oop,cuda,C++,C,Oop,Cuda,提前感谢,, -Ruru只是提供了一个答案,将其从未答复列表中删除。我想@JaredHoberock不会介意的 一般来说,CUDA支持C++功能的大子集,包括对设备代码中对象的支持。 但是,在设备上执行的任何代码都必须正确修饰。对于普通的单个函数(不是内核),编译器识别出的用于创建设备可调用版本的代码是\uuuu device\uuu。这适用于设备上可能使用的任何对象方法,包括构造函数和析构函数 您可能还希望熟悉对设备代码中使用的C++类的其他限制,如< P>只提供一个答案,使其从未被回答的列表

提前感谢,,
-Ruru

只是提供了一个答案,将其从未答复列表中删除。我想@JaredHoberock不会介意的

一般来说,CUDA支持C++功能的大子集,包括对设备代码中对象的支持。 但是,在设备上执行的任何代码都必须正确修饰。对于普通的单个函数(不是内核),编译器识别出的用于创建设备可调用版本的代码是
\uuuu device\uuu
。这适用于设备上可能使用的任何对象方法,包括构造函数和析构函数


您可能还希望熟悉对设备代码中使用的C++类的其他限制,如

< P>只提供一个答案,使其从未被回答的列表中得到。我想@JaredHoberock不会介意的

一般来说,CUDA支持C++功能的大子集,包括对设备代码中对象的支持。 但是,在设备上执行的任何代码都必须正确修饰。对于普通的单个函数(不是内核),编译器识别出的用于创建设备可调用版本的代码是
\uuuu device\uuu
。这适用于设备上可能使用的任何对象方法,包括构造函数和析构函数


您还希望熟悉对设备代码中使用的C++类的其他限制,如:

CUDA不使用C99作为基础,它遵循C90,其中添加了大量的C++ 98语言特征。如果<代码> MyClass < /Cord>具有<代码>·{HooSovi} /代码> -仅构造函数和析构函数,则您的代码将是非法的。您需要确保它们带有
\uuuuuu device\uuuuuu
\uuuuu host\uuuuuuuuuu\uuuuuuuu
@JaredHoberock注释。感谢您的回复。在这种情况下,我将不得不处理构造函数和析构函数,以包含关键字___________;这不会是一个问题,我希望…感谢大家_deviceCUDA不使用C99作为基础,它遵循C90,C90添加了大量C++98语言功能。如果
MyClass
具有
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。您需要确保它们带有
\uuuuuu device\uuuuuu
\uuuuu host\uuuuuuuuuu\uuuuuuuu
@JaredHoberock注释。感谢您的回复。在这种情况下,我将不得不处理构造函数和析构函数,以包含关键字___________;这不会是一个问题,我希望…感谢大家_“谢谢你的回答,”罗伯特克罗维拉。我不明白为什么要在设备内部装饰一个物体!编译器处理这个问题不是更好吗?因为对象已在设备内部或外部声明。我可以处理所有的限制,以便对象在CPU和GPU上都能很好地编译。修饰是在类定义点完成的。不是在实例化对象时。实例化对象不需要额外的修饰。如果您注意到这个限制(在类定义点修饰方法),那么无论是在主机代码还是设备代码中实例化,它都应该可以正常工作。谢谢您的回答,@RobertCrovella。我不明白为什么要在设备内部装饰一个物体!编译器处理这个问题不是更好吗?因为对象已在设备内部或外部声明。我可以处理所有的限制,以便对象在CPU和GPU上都能很好地编译。修饰是在类定义点完成的。不是在实例化对象时。实例化对象不需要额外的修饰。如果您注意到这个限制(在类定义点修饰方法),那么无论是在主机代码还是在设备代码中实例化,它都应该可以正常工作。