什么是C ++类型std :: vector :: size_type的OpenCL等价物?

时间:2012-09-19 15:03:52

标签: c++ opencl

Where should I using OpenCL data types?已触及此主题,但它没有回答我的问题。

(1)对于C ++类型std :: vector :: size_type,绑定opencl类型和内核opencl类型应该是什么?

(2)在将其作为主机ptr设置为clCreateBuffer()之前,如何将std :: vector :: size_type转换为您在(1)的答案中提到的绑定类型?

我之所以需要上述原因,是因为我试图将矢量的大小传递给我的内核。

1 个答案:

答案 0 :(得分:1)

  1. 这取决于。 cl_uint / uintcl_ulong / ulong是可能的替代方案。当向量的大小最多为2 32 2时,前者就足够了。当且仅当超过该限制时,您应该考虑使用cl_ulong / ulong。在此之前你可能会打破一些其他限制,例如:设备的最大允许缓冲区大小(CL_DEVICE_MAX_MEM_ALLOC_SIZE)或地址空间(CL_DEVICE_ADDRESS_BITS)。所以我的建议是坚持cl_uint / uint,除非有充分的理由使用cl_ulong / ulong

  2. static_cast<cl_uint>(v.size())甚至boost::numeric_cast<cl_uint>(v.size())(如果该值无法容纳cl_uint,则会引发异常。)