如何在CUDA代码中实现虚函数的使用(C++)
发布时间
阅读量:
阅读量
近期所进行的项目开发中,需要借助CUDA平台中虚函数机制以降低开发难度,提升系统的可扩展性。起初我误以为可以直接沿用CPU环境下的编程方式实现功能,然而实际操作过程中才意识到自身认知存在明显不足。经过大量资料查阅后终于找到可行的解决办法,因此将相关经验整理记录,供各位参考与借鉴。
简介
若希望在device上实现虚函数的功能,最关键的一点在于:
对象的创建过程必须在device端完成。
这表明类的实例化操作应当在device上进行。换句话说,不能采用常规的cudaMalloc方式进行内存分配,而应选择在__device__或__global__函数内部通过class *A = new A;语句来创建对象。
举例
若上述说明存在理解困难,可参考以下示例进行说明,该示例仅用于阐述我的解决思路。在实际开发过程中,务必避免将包含虚函数的类以数组形式进行定义,否则将可能导致严重问题。
- 创建一个包含虚函数的基类Base及其派生类Derived,并确保所定义的方法与在CPU上实现的方式保持一致。
class Base
{
public:
__host__ __device__ Base() {}
__host__ __device__ ~Base() {}
全部评论 (0)
还没有任何评论哟~
