簡體   English   中英

如何在OpenCL中從內核打印結果?

[英]How to print results from kernel in OpenCL?

我是OpenCL的新手。 我正在嘗試使用OpenCL c ++內核語言擴展http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2012/10/CPP_kernel_language.pdf 我正在嘗試使用此文檔的第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);
}

它從主機代碼中打印值。 我需要從內核獲取結果。 非常感謝您的幫助。

我得到的結果是

溫度值= 10

clEnqueueMapBuffer第二次調用應傳遞CL_MAP_READ ,而不是CL_MAP_WRITE ,因為您要讀取數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM