OpenCL静态c ++语言

时间:2014-11-26 04:30:53

标签: c++ opencl

我是OpenCL的新手。我尝试执行使用内核中的类的OpenCL代码,AMD的主机代码找到下面的链接

http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2012/10/CPP_kernel_language.pdf

我在我的机器上实现了相同的代码。这是主机代码main.cpp

class Test{
public:
    void setX(int value){ x = value; }
    int getX(){ return x; }
private:
    int x;
};

int main(){
Test tempClass;
void* dm_idata = clEnqueueMapBuffer(command_queue,classObj,CL_TRUE, CL_MAP_WRITE, 0, sizeof(Test), 0, NULL, NULL, &ret);
tempClass.setX(10); 
clEnqueueUnmapMemObject(command_queue,classObj,dm_idata,0,NULL,NULL);//class is passed to the device
clEnqueueMapBuffer(command_queue,classObj,CL_TRUE, CL_MAP_WRITE, 0, sizeof(Test), 0, NULL, NULL, &ret); //class is passed back to the host
printf("\n temp value: %d\n", tempClass.getX());
}

这是内核代码。

class Test{
    setX (int value);
private:
    int x;
};
__kernel void vector_add(__global Test* Inclass){  
if(get_global_id(0) == 0)
    Inclass->setX(6);
}

现在我的问题是当我尝试打印结果时,它给我的临时值为10,内核的值应为6。我不确定如果我遗失了什么,任何帮助都会受到高度赞赏。

感谢。

0 个答案:

没有答案