我有一段代码,它由没有修改权限的对象组成。另一方面,我必须编写CUDA内核来进行一些计算。此刻,我将所需的信息转换为数组或结构并传递给它。是否有可能将对象传递给CUDA内核,并且CUDA内核是否有权访问该类的私有成员?有些人也向我建议。将C++对象传递给CUDA内核
回答
您可以在您的CUDA代码中使用C++功能。它有一些额外的要求。例如内核函数不能是我的一个类的成员。对于使用你自己的数据结构,它需要符合一些要求。作为__device__
__device__
构造函数,你需要在设备代码中使用
- 成员应注明。
- 如果你的结构封装指针,这需要在设备内存中分配。
- 您可以使用模板,但不能使用具有虚拟功能的类。
您可以在编程指南的附录D. C/C++语言支持中看到C++数据结构的一些示例。
至于你的具体问题:
- 是的,你可以在内核传递对象。您需要为其实施
__device__
复制构造函数。 - 您可以通过班级方法访问私人成员。您应该使用
__device__
访问器方法在课堂外使用它。 但是你不能通过内核调用传递具有私有成员的类。
首先感谢您的回答。我仍然对主查询有疑问。假设我有一个C++类ex: - class A(){private:int x;}。现在,我将这个类的一个对象传递给另一个文件中的cuda内核。现在,内核如何访问私有变量。我必须包含内核的类定义才能理解。但是,然后我得到它是无法访问的错误。如果我在类定义中包含__global__函数(),那么g ++将无法编译它。如何去做。 –
你能提供一些代码的例子吗? – geek
我有一个C++文件fil1.c头文件file.h,它有一个类的定义 - class A {private:int x; void funct();}。在file1.c中实现的funct函数中,我调用了file2.cu中的函数,并说B(),并且我将B的对象objx传递给B。现在B()调用cuda内核K <<<1,1000> >>(objxDev )其中objxDev是类A的一个对象,并且在设备端用适当的memcpy进行了连接。问题是,在内核代码中,我查询objx.x,并且出现无法访问的错误。我必须赋予这个内核函数访问私有成员x的权力,并且不需要afftg A级。 –
- 1. 将结构传递给CUDA内核
- 2. 将类对象传递给内核
- 3. 虚拟继承传递给cuda内核函数的对象
- 4. Cuda编程 - 将嵌套结构传递给内核
- 5. 将C++对象传递给C#
- 6. 将C++/CUDA类传递给PyCUDA的SourceModule
- 7. 将参数传递给内部对象
- 8. 将数组传递给Cuda
- 9. ASP.NET C#将对象传递给方法
- 10. 将C#对象传递给vbscript
- 11. 将元素传递给C#对象 - LINQ
- 12. 将RtMidi对象传递给函数(C++)
- 13. 将PySide对象传递给C++
- 14. C++将类对象传递给函数
- 15. 将对象传递给Arraylist
- 16. 将对象传递给onreadystatechange
- 17. 将对象传递给UserControl
- 18. 将对象传递给viewmodel
- 19. 将对象传递给Spark
- 20. 将对象传递给UITypeEditor
- 21. 如何使用常量内存将结构数组传递给CUDA内核
- 22. 将参数传递给内核模块
- 23. 将struct传递给cudafy.net中的内核
- 24. 将对象内的对象作为参数传递给函数
- 25. 如何将所需的jQuery对象传递给内部对象?
- 26. 将对象传递给jrxml,并将对象传递给其子报表
- 27. 在cuda内核中声明CPP对象
- 28. 本地对象参数至CUDA内核
- 29. 只能将一个类传递给CUDA内核进行并行评估?
- 30. 将抽象Graphics对象传递给paintComponent()
请教[这个答案](http://stackoverflow.com/a/14119245/1593077)到一个相关的问题。 – einpoklum