在 CUDA 内核中使用虚拟函数
所以我想在设备上分配一个具有虚拟函数的对象,然后调用内核并执行其中一些虚拟函数。我尝试了两种方法来做到这一点,但都不起作用:
1)使用 cudaMalloc 和 cudaMemcpy 从主机分配和复制对象。这会复制包含主机内存指针的虚拟函数表,这在设备上执行时显然会导致内核崩溃。
2) 从第二个内核分配对象,保存指向该对象的设备内存指针,并将该指针传递给原始内核。然而,由于内核不同,内核执行时函数在设备内存中的位置并不相同,并且虚拟函数表不正确,使用时会导致内核崩溃。
我是否只能将虚拟函数与在内核中创建的调用该函数的对象一起使用?
当我分配对象以获得正确的虚拟函数表时,我可以以某种方式引用原始内核吗?
我是否明白这里的实际问题是什么?
So I want to allocate an object with virtual functions on the device, then call a kernel and execute some of those virtual functions. I have tried two ways to do this but neither work:
1) Allocate and copy the object from the host using cudaMalloc and cudaMemcpy. This copies over the virtual function table that contains host memory pointers which obviously crash the kernel when executing on the device.
2) Allocate the object from a second kernel, save the device memory pointer to the object and pass that pointer to the original kernel. However, since the kernels are different, the functions are not in the same places in device memory upon kernel execution and the virtual function table is incorrect and crashes the kernel when used.
Can I only use virtual functions with objects created in the kernel the functions are called from?
Can I somehow reference the original kernel when I allocate my objects to get the virtual function table right?
Do I even understand what the actual problem is here?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
一部分。
当您在 cuda 中试验 C++ 时,并不完全支持。从4.0开始才可以使用虚函数。
确保您有 4.0 驱动程序/api。
发布您的错误日志。
Part of it.
As you experimented C++ in cuda is not fully supported. Only Starting from 4.0 you can use the virtual function.
Make sure you have the 4.0 driver / api.
Post your Error log.