2011-04-19 92 views
3

所以我想在设备上分配一个具有虚函数的对象,然后调用一个内核并执行一些虚函数。我尝试了两种方法来做到这一点,但都没有成功:在CUDA内核中使用虚函数

1)使用cudaMalloc和cudaMemcpy从主机分配和复制对象。这在包含主机内存指针的虚拟函数表上进行复制,这些指针在设备上执行时显然会使内核崩溃。

2)从第二个内核分配对象,将设备内存指针保存到对象并将该指针传递给原始内核。但是,由于内核不同,内核执行时功能不在设备内存中的相同位置,虚拟功能表不正确,并且在使用内核时崩溃内核。

我只能在内核中创建的对象中使用虚函数来调用函数吗?

我可以以某种方式引用原始内核,当我分配我的对象来获得虚函数表正确吗?

我甚至可以理解实际问题在这里吗?

+0

有一个较新的问题,这个重复,[我已经回答](http://stackoverflow.com/questions/12701170/cuda-virtual-class/12704054#12704054)。由于OP自2011年4月以来没有访问过SO,所以投票结束这一次。 – harrism 2012-10-03 07:50:08

回答

1

我甚至可以理解实际问题在这里吗?

它的一部分。

正如你在cuda中尝试C++没有完全支持。仅从4.0开始,您可以使用虚拟功能。

  1. 确保您有4.0驱动程序/ api。

  2. 发布您的错误日志。

+0

对不起,我使用的是4.0,而且我有一个计算能力2.1卡。如果我分配对象然后在同一个内核中调用该函数,则虚拟函数调用的工作原理应该完全相同。它只是通过内核,我有一个问题。我没有得到一个错误日志,内核只是在没有打印它应该打印的东西的情况下抛出。我没有太多注意错误代码或者它可能产生的任何东西。 – 2011-04-19 23:08:16