使用如下函数可以创建管道对象:
cl_mem clCreatePipe (cl_context context,
cl_mem_flags flags,
cl_uint pipe_packet_size,
cl_uint pipe_max_packets,
const cl_pipe_properties *properties,
cl_int *errcode_ret)
- 参数context为一个有效的用于创建管道对象的OpenCL上下文。
-
参数f lag为一个位域。对于管道对象,只能是CL_MEM_READ_ONLY、CL_MEM_WRITE_ONLY、CL_MEM_READ_WRITE和CL_MEM_HOST_NO_ACCESS。默认值为CL_MEM_READ_WRITE。
-
参数pipe_packet_size是一个管道包的大小,单位为字节。
-
参数pipe_max_packets指定管道所能包含的最大包的数量,从而指定管道的容量。
-
参数properties指定管道属性以及相应的值。在OpenCL 2.0中,该值为NULL。
-
参数errcode_ret为函数执行的错误码。
如下代码展示了在主机端创建管道对象:
size_t packetSize = sizeof(float);
int numPackets = 128;
pipe = clCreatePipe(context, CL_MEM_HOST_NO_ACCESS,
packetSize, numPackets, NULL, &err);
在例子中,管道对象中的包数据为f loat类型。管道对象中包的数据类型可以为OpenCL支持的矢量和标量类型,也可以是用户自定义的数据类型。例子中管道对象最多可以包含numPackets个包,同时创建的管道对象主机无法访问(CL_MEM_HOST_NO_ACCESS)。