一开始代码中这样写了:
cl::Context ctx = cl::Context(CL_DEVICE_TYPE_GPU, NULL);
cl::CommandQueue queue= cl::CommandQueue(ctx, devices[device_index],
CL_QUEUE_PROFILING_ENABLE, &err);
运行时发现运行正常,但是始终无法得到正确的结果。
找了另一个正常的例子逐个替换对象,最终发现这两个对象上面的赋值函数导致了问题。
因此,除非看了源码确认可以这么用,否则还是应该避免对象的值拷贝或者使用赋值函数。
很可能新对象虽然得到了所有内容,但是老对象析构后又导致新对象指向的内容出错。
修改为以下代码后正常:
cl::Context* ctx = new cl::Context(CL_DEVICE_TYPE_GPU, NULL);
cl::CommandQueue* queue = new cl::CommandQueue(ctx, devices[device_index],
CL_QUEUE_PROFILING_ENABLE, &err);