我处于一种迫切需要内核中的虚函数的情况。我知道你不能在内核中使用在主机内存中创建的对象,如果它们有虚函数的话。
如果我使用
placement new
和由 cudaMallocManaged
分配的设备指针,我可以将它传递给内核并正确使用它的虚函数吗?
我问而不只是尝试的原因是因为我在实现这个方面还有很多其他问题,并且想知道它是否有可能,因为如果不可能,我可以尝试更复杂的,但肯定有效方法解释here.
如果我使用 placement new 和 cudaMallocManaged 分配的设备指针,我可以将它传递给内核并正确使用它的虚函数吗?
不,它不会起作用。在这种情况下调用的主机构造函数将初始化对象,就好像它是一个主机对象一样,如果在设备代码中调用,该对象中的虚函数将无法正常工作。