您的位置:首页 > 编程语言

cuda编程实践-2

2015-06-10 10:11 274 查看
    由于最近考试,不得不复习,咱们的大学体制,没办法实践我的cuda,我表示很难过。废话到此为止:

    今天去办公室,老冯(我的老师,姑且如此称呼)告诉我一个说实话我听激动的问题,什么问题呢?当然还是关于cuda移植的问题,就是我们之前成功了,但是往后调用函数的时候会出现很多error,具体error我没有看到,抱歉不能一一列举。最后终于找到问题,因为__global__kernel()这个函数需要写在using namespace之外,写在里面会出现很多语法错误。解决这个错误的的过程是因为我们搜到一篇国外的案例http://stackoverflow.com/questions/18551859/cuda-why-is-it-not-possible-to-define-static-global-member-functions

   我不确定你是否能够打开这篇文章,我来通俗的解释一下问题

   问题代码:

class A
{
public:
__global__ static void kernel();
};

__global__ void A::kernel()
{}


代码拥有两个问题,第一,kernel函数不能够是静态的,第二,kernel函数不能够写在class之中。

具体处理方法应该是写一个class来包装kernel所需调用的函数,然后通过全局函数kernel去调用class中的方法或者其他(需要注意,你在想使用类的函数的时候记得在显存上为这个类的对象开辟一块数据内存哦!)

具体细节如下:

class some_class

{

public:

__device__ some_class(int a) :  b(a) {}

__device__ int getB() : {return b;}

private:

int b;

}

__global__ void kernel()

{

some_class my_class(threadIdx.x);

do something with my_class.getB()

}


另:本人是一名初学者,鉴于并没有找到合适的学习资料,所有东西都是在老师的帮助下完成,也是一知半解。希望大神如果看到我文章的问题一定告诉我,可以毫不犹豫的批评鞭策,不需顾忌,大家互相学习,共同进步!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ cuda