cuda程序的组织(与C++融合)

cuda程序的组织(与C++融合)

前言:

我们都希望有一个好的cuda程序组织方式,让我们的代码或程序变得干净整洁,不容易出错,可以移植性能强。今天介绍一种最基础CUDA程序组织方式。

我们都知道面向对象程序的好处,或者说,我们现在有一个C++程序需要并行化。我们不得不让CUDA程序与C++相融合,但cuda是基于c语言的,怎样组织cuda程序就尤为关键了。

问题:

由于有关CUDA的程序是基于C语言的,kernel不能被类直接调用,但为了实现面向对象的封装功能,需要借助namespace:。

几个定义:

调用kernel的函数(后面叫它调用函数):在C++的类中,不能直接调用kerenl函数,需要调用一个函数,通过这个函数间接调用kernel。
C++类:像普通的C++程序一样,对对象进行封装,唯一不同的是在需要并行计算的地方,使用调用函数,完成并行计算的任务。
kernel函数:并行计算,在GPU端运行的函数。

一般C++中的cuda程序是这样的:

定义一个类便于我们面向对象编程。
使用namespace 将cuda需要的全局变量(如常量,纹理等变量),调用函数的实现和kernel函数的实现,定义到一个cu文件中。

类中调用调用函数,调用函数调用kerenl函数。(其中注意头文件顺序,保证可以访问到,ps .cu文件可直接被inlcude)

实例:

OpenCV中关于GPU SURF的实现方式。参看surf.cuda.cpp和surf.cu。

猜你喜欢

转载自blog.csdn.net/fb_help/article/details/80150659
今日推荐