将std :: vector传递给openCL内核C ++绑定

时间:2018-03-06 03:16:37

标签: c++ opencl

我是OpenCL的新手。 我想使用C ++绑定将vector传递给OpenCL内核。

目前我有主持人计划:

duration

在我的内核程序中,我像这样访问每个向量值:

std::vector<cl_float4> toKernel;
std::vector<cl_float3> output;
int n = 50;

//init some value in toKernel vector
//make kernel, program, command queue, etc...

cl::Buffer bufferX = cl::Buffer(
      context,
      CL_MEM_READ_ONLY,
      vectorSize * sizeof(cl_float4)
    );

cl::Buffer bufferNumber = cl::Buffer(
      context,
      CL_MEM_READ_ONLY,
      sizeof(int)
    );

cl::Buffer bufferOutput = cl::Buffer(
      context,
      CL_MEM_WRITE_ONLY,
      vectorSize * sizeof(cl_float3)
    );


queue.enqueueWriteBuffer(
      bufferX,
      CL_TRUE,
      0,
      vectorSize * sizeof(cl_float4),
      toKernel.data()
    );
queue.enqueueWriteBuffer(
      bufferNumber,
      CL_TRUE,
      0,
      sizeof(int),
      &n
    );

kernel.setArg(0, bufferX);
kernel.setArg(1, bufferNumber);
kernel.setArg(2, bufferOutput);

cl::NDRange global(vectorSize);
    cl::NDRange local(1);
    queue.enqueueNDRangeKernel(
      kernel,
      cl::NullRange,
      global,
      local
    );

queue.enqueueReadBuffer(
      bufferOutput,
      CL_TRUE,
      0,
      vectorSize * sizeof(cl_float3),
      &output
    );

这是正确的方法吗? 我不确定如何在OpenCL中输出调试消息。 当我尝试从内核读取输出时,我得到clEnqueueReadBuffer(-5)。 你如何从OpenCL读回std :: vector?

1 个答案:

答案 0 :(得分:3)

-5表示资源不足。您不能将输出作为指向读缓冲区的指针传递。您需要传递output.data