如何通过C++类封装CUDA核函数实现长尾词查询?
- 内容介绍
- 文章标签
- 相关推荐
本文共计559个文字,预计阅读时间需要3分钟。
CUDA+C++所声称,CUDA对C语言进行了很好的扩展,直接使用C语言可以非常简单方便地调用CUDA核心函数。但若想使用C++的类成员函数直接调用核心函数是不可能的,首先,核心函数不能作为类的成员函数;其次,核心函数也不能直接在C++中声明为成员函数。
正如CUDA C所称,CUDA对C语言进行了很好的扩展,直接使用C语言可以非常简单方便的调用CUDA核函数。但是当想使用C++的类成员函数直接调用核函数是不可行的,第一,核函数不能作为类的成员函数,第二,C++的cpp文件和CUDA的cu文件分别经由g++和nvcc编译,当两种代码混合就会编译出错。
因而C++的类和CUDA结合使用需要进行一层封装,借用两个数组相加的例子说明,主要过程如下:
本项目包括4文件,如上图所示,分别为:add.h、add.cpp、kernel.cuh、kernel.cu。在add.h中封装一个函数AddNum(),调用kernel.cuh中的函数
AddKernel(int *a, int *b, int *c, int DX),然后在kernel.cu文件中使用AddKernel(...)调用相加核函数Add(int *a, int *b, int *c, int DX)
1、add.h文件定义了一个CTest的类,包括3个指针(数组)、4个函数。
本文共计559个文字,预计阅读时间需要3分钟。
CUDA+C++所声称,CUDA对C语言进行了很好的扩展,直接使用C语言可以非常简单方便地调用CUDA核心函数。但若想使用C++的类成员函数直接调用核心函数是不可能的,首先,核心函数不能作为类的成员函数;其次,核心函数也不能直接在C++中声明为成员函数。
正如CUDA C所称,CUDA对C语言进行了很好的扩展,直接使用C语言可以非常简单方便的调用CUDA核函数。但是当想使用C++的类成员函数直接调用核函数是不可行的,第一,核函数不能作为类的成员函数,第二,C++的cpp文件和CUDA的cu文件分别经由g++和nvcc编译,当两种代码混合就会编译出错。
因而C++的类和CUDA结合使用需要进行一层封装,借用两个数组相加的例子说明,主要过程如下:
本项目包括4文件,如上图所示,分别为:add.h、add.cpp、kernel.cuh、kernel.cu。在add.h中封装一个函数AddNum(),调用kernel.cuh中的函数
AddKernel(int *a, int *b, int *c, int DX),然后在kernel.cu文件中使用AddKernel(...)调用相加核函数Add(int *a, int *b, int *c, int DX)
1、add.h文件定义了一个CTest的类,包括3个指针(数组)、4个函数。

