【问题标题】:Using virtual functions in CUDA kernels在 CUDA 内核中使用虚函数
【发布时间】:2011-08-09 00:56:52
【问题描述】:

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

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

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

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

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

我是否明白这里的实际问题是什么?

【问题讨论】:

  • 有一个更新的问题重复了,which I have answered。由于 OP 自 2011 年 4 月以来没有访问过 SO,因此投票关闭了这个。

标签: c++ cuda gpu virtual-functions


【解决方案1】:

我是否明白这里的实际问题是什么?

其中的一部分。

正如您在 cuda 中试验的那样,不完全支持 C++。只有从 4.0 开始,您才能使用虚拟功能。

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

  2. 发布您的错误日志。

【讨论】:

  • 对不起,我用的是 4.0,我有一个计算能力 2.1 的卡。如果我分配对象然后在同一个内核中调用该函数,则虚函数调用的工作方式与它应该完全一样。我只有在内核中遇到问题。我没有收到错误日志,内核只是转储而不打印它应该打印的东西。我没有过多地研究错误代码或它可能产生的任何东西。
猜你喜欢
  • 1970-01-01
  • 2016-01-16
  • 1970-01-01
  • 2012-04-28
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
相关资源
最近更新 更多