C++ 如何在OpenCL中从内核打印结果?

C++ 如何在OpenCL中从内核打印结果?,c++,opencl,C++,Opencl,我是OpenCL的新手。我尝试使用OpenCL C++内核语言扩展。我正在尝试使用本文档的第10页代码打印结果。请从本文档中查找下面的代码,如果我在任何地方出错,请纠正我 class Test{ public: void setX(int value){ x = value;} int getX(){ return x;} private: int x; }; int main() { cl_mem classObj = clCreateBuffer(conte

我是OpenCL的新手。我尝试使用OpenCL C++内核语言扩展。我正在尝试使用本文档的第10页代码打印结果。请从本文档中查找下面的代码,如果我在任何地方出错,请纠正我

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

int main() {
    cl_mem classObj = clCreateBuffer(context, CL_MEM_USE_HOST_PTR, sizeof(Test), &tempClass, &ret);
    void* dm_idata = clEnqueueMapBuffer(command_queue, classObj, CL_TRUE, CL_MAP_WRITE, 0 , sizeof(Test), 0, NULL, NULL, &ret);
    tempClass.setX(10); //prints this value
    clEnqueueUnmapMemObject(command_queue, classObj, dm_idata, 0, NULL, NULL);//class is passed to the device
    ret = clEnqueueNDRangeKernel(command_queue, kernel, 1, NULL, &global_item_size, &local_item_size, 0, NULL, NULL);
    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 foo(__global Test* Inclass){   

if(get_global_id(0) == 0)
    Inclass->setX(6);
}
它打印来自主机代码的值。我需要从内核中得到结果。非常感谢您的帮助

我得到的结果是


temp value=10

您第二次调用
clEnqueueMapBuffer
应该是通过
CL\u MAP\u READ
,而不是
CL\u MAP\u WRITE
,因为您想读取数据。

谢谢您的回复。我还遗漏了另一个参数“-x clc++”,如此url()中所述。