在CUDA内核中使用虚拟函数

Using virtual functions in CUDA kernels

本文关键字:虚拟 函数 CUDA 内核      更新时间:2023-10-16

所以我想在设备上分配一个具有虚拟函数的对象,然后调用内核并执行其中一些虚拟函数。我试过两种方法,但都不起作用:

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

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

我可以只使用虚拟函数与在内核中创建的对象调用函数吗?

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

我知道真正的问题是什么吗?

我知道真正的问题是什么吗?

部分原因。

在cuda中不完全支持c++。只有从4.0开始,您才能使用虚拟功能。

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