Where should I using OpenCL data types?已触及此主题,但它没有回答我的问题。
(1)对于C ++类型std :: vector :: size_type,绑定opencl类型和内核opencl类型应该是什么?
(2)在将其作为主机ptr设置为clCreateBuffer()之前,如何将std :: vector :: size_type转换为您在(1)的答案中提到的绑定类型?
我之所以需要上述原因,是因为我试图将矢量的大小传递给我的内核。
答案 0 :(得分:1)
这取决于。 cl_uint
/ uint
和cl_ulong
/ ulong
是可能的替代方案。当向量的大小最多为2 32 2时,前者就足够了。当且仅当超过该限制时,您应该考虑使用cl_ulong
/ ulong
。在此之前你可能会打破一些其他限制,例如:设备的最大允许缓冲区大小(CL_DEVICE_MAX_MEM_ALLOC_SIZE
)或地址空间(CL_DEVICE_ADDRESS_BITS
)。所以我的建议是坚持cl_uint
/ uint
,除非有充分的理由使用cl_ulong
/ ulong
。
static_cast<cl_uint>(v.size())
甚至boost::numeric_cast<cl_uint>(v.size())
(如果该值无法容纳cl_uint
,则会引发异常。)