Advertisement

如何在CUDA代码中实现虚函数的使用(C++)

阅读量:

近期所进行的项目开发中,需要借助CUDA平台中虚函数机制以降低开发难度,提升系统的可扩展性。起初我误以为可以直接沿用CPU环境下的编程方式实现功能,然而实际操作过程中才意识到自身认知存在明显不足。经过大量资料查阅后终于找到可行的解决办法,因此将相关经验整理记录,供各位参考与借鉴。

简介

若希望在device上实现虚函数的功能,最关键的一点在于:

对象的创建过程必须在device端完成。

这表明类的实例化操作应当在device上进行。换句话说,不能采用常规的cudaMalloc方式进行内存分配,而应选择在__device____global__函数内部通过class *A = new A;语句来创建对象。

举例

若上述说明存在理解困难,可参考以下示例进行说明,该示例仅用于阐述我的解决思路。在实际开发过程中,务必避免将包含虚函数的类以数组形式进行定义,否则将可能导致严重问题。

  1. 创建一个包含虚函数的基类Base及其派生类Derived,并确保所定义的方法与在CPU上实现的方式保持一致。
复制代码
    class Base
    {
    public:
    __host__ __device__ Base() {}
    __host__ __device__ ~Base() {}

全部评论 (0)

还没有任何评论哟~